Back to projects


Fluentia
A bilingual English-mastery platform for an Arabic speaker aiming at IELTS 7.5, with spaced repetition, grammar mastery and AI-graded writing.
- Year
- 2026
- Type
- Web app
- Status
- Private
Private build — shown as a case study, not a public product.
The problem. An Arabic speaker preparing for IELTS Band 7.5 ends up juggling flashcard apps, grammar books and writing feedback that never talk to each other. Fluentia is one platform for a single learner, fully bilingual with right-to-left layouts, that decides what to study each day. It is PIN-gated and built for one person, so it appears here as a case study rather than a demo.
The hard part. Vocabulary and grammar decay differently, so they needed two scheduling models. Words use FSRS-4.5 spaced repetition, written as a pure function with no I/O; grammar uses a Bayesian mastery probability with interleaved practice. An adaptive placement of about twelve minutes sets a CEFR level per skill. Arabic explanations had a quieter problem: the same concept drifting between terms, which I solved with a term lock that allows one Arabic term per concept.
The approach. A Vue 3.5 SPA and a NestJS 10 API with Prisma on Postgres live in a pnpm monorepo with shared Zod contracts, an i18n package held at full English and Arabic key parity, and design-system and token packages. Writing is graded by Claude with a rewrite loop, alongside a streamed tutor, a daily plan and a weekly report, all on versioned prompts with AI spend shown in settings. Each feature is tied to a named learning-science principle.
The outcome. More than 5,000 tests cover 42 API modules across more than 360 commits since May 2026. A 300-line budget per file is enforced by a script, and CI runs verification, Lighthouse and visual gates that combine axe checks with layout invariants. Every route is captured at three widths, in both directions and both themes, so a broken RTL layout shows up before it ships.
The hard part. Vocabulary and grammar decay differently, so they needed two scheduling models. Words use FSRS-4.5 spaced repetition, written as a pure function with no I/O; grammar uses a Bayesian mastery probability with interleaved practice. An adaptive placement of about twelve minutes sets a CEFR level per skill. Arabic explanations had a quieter problem: the same concept drifting between terms, which I solved with a term lock that allows one Arabic term per concept.
The approach. A Vue 3.5 SPA and a NestJS 10 API with Prisma on Postgres live in a pnpm monorepo with shared Zod contracts, an i18n package held at full English and Arabic key parity, and design-system and token packages. Writing is graded by Claude with a rewrite loop, alongside a streamed tutor, a daily plan and a weekly report, all on versioned prompts with AI spend shown in settings. Each feature is tied to a named learning-science principle.
The outcome. More than 5,000 tests cover 42 API modules across more than 360 commits since May 2026. A 300-line budget per file is enforced by a script, and CI runs verification, Lighthouse and visual gates that combine axe checks with layout invariants. Every route is captured at three widths, in both directions and both themes, so a broken RTL layout shows up before it ships.
My Role
Sole Full-Stack Developer & Learning Designer — designed the curriculum logic and both scheduling engines, built the Vue app, the NestJS API and the AI grading pipeline, and owned the Arabic terminology and the CI gates.
- Vue 3
- TypeScript
- NestJS 10
- Prisma 5
- PostgreSQL
- Zod
- Claude API
- Pinia
- pnpm workspaces
- Vitest
- Playwright + axe
- Lighthouse CI
- GitHub Actions


