Skip to content
Case studies
Case studyOctober 2026

Client project · Client portal

Student Applications & Document Collection

Replace WhatsApp document collection with guided student applications that feed the advisor's existing records.

The problem
Applications arrived as WhatsApp messages: passports here, transcripts elsewhere. Staff chased missing files and retyped details already sitting on the documents.
What I built
I designed and built a four-language student portal: apply before every document is ready, review extracted details and resume across devices, with files and grades reaching the agency’s CRM.
3 min read
Role
Product Engineer
Build
4 Sep–16 Oct 2025 · 6 weeks
Status
Delivered
Replace WhatsApp document collection with guided student applications that feed the advisor's existing records.
01 / 02
Slide 1 of 2
From application to the advisor's records.

I designed and built that journey in English, French, Arabic and Darija, including right-to-left layouts. I owned the work from the client brief through the complete student experience, document processing, integration with the agency's existing Laravel records and production deployment.

Extract The Details, Then Let The Student Check

The application asks for documents that already contain much of the information it needs. Uploading an ID prefills identity fields; uploading a transcript extracts grades. The student reviews the values and can correct them before continuing.

I kept the source visible beside the extracted value. A badge identifies the document behind a field, so the student can see where the information came from while checking it.

Grades also stay linked to the original transcript on the agency's student record. The advisor can compare them with the document, and the matching system can use them when evaluating university programs.

In the prepared example, Mathématiques 17,50 / 20 on the transcript becomes 17.50 / 20 on the advisor’s record. The number remains checkable against its source.

Slide 1 of 1
The student can check and edit a prefilled name against the identified source.

Save Progress Beyond The Device

The application changes with the student's answers. Their degree choice, qualifications and passport status determine the relevant questions and uploads. I defined those steps in typed configuration so the flow could follow each education path.

I saved answers and the current step on the backend, allowing a returning session to restore the application on a different device. The interface supports English, French, Arabic and Darija, including right-to-left layouts.

Slide 1 of 1
A goal saved on desktop is restored in a separate iPhone session.

Let Students Apply Before Every Document Is Ready

Baccalaureate students often begin applying before receiving their final results. Making every academic document mandatory at the start would prevent them from starting the process.

I separated the initial submission from the remaining document collection. The portal collects core identity information first, then gives students a dashboard for adding academic documents as they receive them.

Uploading and processing are separate states. A stored file may still be waiting for extraction, while other documents only need storage. The dashboard distinguishes uploading, processing, completed and failed states so the interface reflects that difference.

Slide 1 of 1
A submitted transcript stays visible alongside documents the student still needs to provide.

Build On The Records The Agency Already Uses

I used Next.js for the student experience and kept customer records, authorization, validation and document processing in Laravel.

The important integration decision was to extend the agency's existing customer model. Saving application progress updates the relevant fields on that record; attachments and grades remain attached to it. Staff can use the information in their current workspace without reconciling a separate student database.

Student requests run through server actions, with session tokens in HttpOnly cookies. Laravel checks that an attachment belongs to the authenticated customer before issuing a temporary S3 download URL.

Slide 1 of 1
The prepared example carries Mathématiques 17,50 on the transcript into the same 17.50 grade on the advisor record. Enlarge to inspect both highlighted values.

The remaining maintenance work is to consolidate duplicated rules for routing, required documents and completion. Those rules need to stay aligned when a student changes their education path.

The film's final comparison shows the handoff: 17.50 in the advisor's record matches 17,50 on the student's transcript. The information has moved from a document into the record the agency uses for its work. This portal, Phoenix and the agency CRM were built for the same client.

This walkthrough demonstrates the implemented handoff; it does not measure completion rates or extraction accuracy across student documents.

Clearway is an anonymized client identity. The demonstration uses synthetic student data and prepared document responses.

Related work: University Program Matching uses these academic records to explain suitable programs.

  • Next.js
  • Laravel
  • AWS Textract
  • React
  • TypeScript
  • PHP
  • OpenAI
  • S3
  • next-intl
  • TanStack Query
Next.js
Laravel
AWS Textract
ReactTypeScriptPHPOpenAIS3next-intlTanStack Query
TypeScriptPHPOpenAIS3next-intlTanStack QueryReact

Building something similar?

Discuss a projectDiscuss a projectDiscuss a projectDiscuss a project
© 2026 Yassine Chettouchhello@yaschet.com
LinkedInGitHubX