Learning & EdTech · Est. $18k – $20k
CareLingua

Bilingual FSP exam-prep platform for nurses

Coralsoft designed, built and shipped this product for the client.

WebBackendNext.js 16 (App Router, RSC)React 19Tailwind CSS
carelingua-fsp-exam-prep.example / dashboard
CareLingua landing page — “Fluency that earns trust on the ward, and in the exam” with a Notify me waitlist form and a feature grid covering guided dialogues, flashcards, matching & quizzes, exam simulation and bilingual DE/EN
The situation

What was in place before we started.

CareLingua turns preparation for the Fachsprachprüfung Pflege — the language exam internationally-trained nurses need to get licensed in Germany — into a structured, bilingual training platform, built on a content platform that cannot silently break.

The Fachsprachprüfung Pflege is the oral and written language exam required for internationally-trained nurses to get licensed in Germany. CareLingua turns preparation for it into a structured, bilingual (German/English) training platform with two main tracks: Üben (self-paced practice across thematic modules) and Prüfung (exam-format simulation of the real oral exam).

Our engineering focus was building a content platform that cannot silently break. Every piece of exam content flows through a shared canonical schema and a Zod validation gate that enforces exam-scoring rules — like “exactly one correct answer per question” — at build time and at every CMS publish. That’s what lets a non-technical product owner safely edit exam-relevant content live, without a developer.

Constraint

CMS as system of record, code as system of truth for structure — the product owner owns content values, code owns keys and schema.

Estimated Timeline
6 months
Estimated Team
5 people
Estimated Budget
$18k – $20k
Platforms
2
Stack
Next.js 16 (App Router, RSC)React 19Tailwind CSSRadix UI + shadcn/uiFramer Motioni18next / react-i18nextReact Hook FormSupabase (Postgres)TypeScriptSanity (headless CMS, GROQ)next-sanityZod validation gateedge-tts-universal (streamed TTS)Microsoft ClarityGitHub Actions CI
Delivery story

CareLingua: structuring complex learning into a usable product

01

Challenge

CareLingua turns preparation for the Fachsprachprüfung Pflege — the language exam internationally-trained nurses need to get licensed in Germany — into a structured, bilingual training platform, built on a content platform that cannot silently break. The main delivery challenge was to give users structured progress, useful feedback, and content that can evolve without rebuilding the app, while keeping Üben — Practice, Prüfung — Exam simulation, and Embedded Sanity Studio consistent across the complete journey. We framed the engagement around the smallest production-worthy flow first, then expanded the scope without weakening the underlying component and data model.

02

How we built it

We began with the page hierarchy, content priorities, and the conversion path, then translated those decisions into reusable layout and style primitives. The team delivered Üben — Practice, Prüfung — Exam simulation, and Embedded Sanity Studio in reviewable sections, checking responsive behaviour, content editing, forms, and browser edge cases before final polish. The build used Next.js 16 (App Router, RSC), React 19, Tailwind CSS, and Radix UI + shadcn/ui, with the structure kept simple enough for the client team to maintain after handoff.

03

Delivery

The delivered scope brought Üben — Practice, Prüfung — Exam simulation, Embedded Sanity Studio, and Text-to-speech (/api/tts) into one coherent production-ready product experience. Live updates, recovery states, and operational feedback are part of the core flow rather than late-stage patches. For CareLingua, the practical result is a product that communicates its value quickly while giving the team a maintainable base for continued delivery in learning & edtech.

Challenges

Each constraint, and what we did about it.

Constraint

CMS as system of record, code as system of truth for structure — the product owner owns content values, code owns keys and schema.

What we did

The content pipeline runs Sanity (GROQ projection) → Zod validation gate → canonical TypeScript types → exercise players. Every fetch is validated against correctness invariants: exactly one correct answer per question, collocation sets with at least one correct verb and one distractor, complete required fields. A CMS edit that violates one of these throws a labeled error at build time — and is caught live in Studio’s own validation before the product owner can even publish.

Results

Measured outcomes.

12
Thematic practice modules, each independently activatable without a code change
4
Exercise types per module — flashcards, collocation matching, register-switch, and guided chat
2
Fully parity-checked languages — German canonical, English a second language
Showcase

How the system fits together.

2 of 2 views
carelingua-fsp-exam-prep.example
CareLingua guided-chat exercise — a scenario prompt with an AI-voiced patient dialogue in German and three reply options to choose from
carelingua-fsp-exam-prep.example
CareLingua matching exercise “Was passt zusammen?” — selecting the verbs that collocate with the noun “der Blutdruck”
Roadmap

Estimated delivery sequence.

6 months
Weeks 1–4

Discovery & architecture

12 thematic modules → module detail → exercise chooser → 4 exercise players.

  • Üben — Practice
Weeks 5–13

Core build

Exam-part selector → difficulty → guided-chat exam run → scored result card, mirroring the real exam’s format rather than teaching in the abstract.

  • Prüfung — Exam simulation
Weeks 14–17

Integrations & data

Content management for the product owner: modules, exam sims, UI copy, and a JSON bulk-import tab for LLM-assisted authoring — no engineering time required.

  • Embedded Sanity Studio
Weeks 18–22

Hardening & QA

Server-streamed German neural text-to-speech for any exam-relevant term or dialogue line, cached with a long immutable header since (text, voice) pairs are deterministic.

  • Text-to-speech (/api/tts)
Weeks 23–26

Launch & handover

Signature-verified webhook that pushes a CMS publish live in seconds, no rebuild — selectively invalidating only the affected cache tags.

  • Live-publish webhook (/api/revalidate)

More work like this.

Every case study covers a product Coralsoft designed, built, and shipped for a client.