
MedPrüf
MedPrüf is an AI-powered exam-prep platform for foreign-trained doctors taking the Austrian Kenntnisprüfung — the medical licensing exam in Vienna. The product surface is German. The engineering surface is the same as any production AI app: a question bank that mustn’t lie, a paywall that mustn’t leak, and a quota counter that mustn’t cost you a model bill.
The problem
Foreign-trained doctors arriving in Austria face the Kenntnisprüfung — a German-language medical exam that decides whether their existing degree gets recognised. Three exam types: Kenntnisprüfung Wien (the broad clinical exam), KMP Innsbruck (a regional variant), and Pharmakologie (drug knowledge as a standalone). The existing prep market was either expensive private courses (€2K+) or scanned PDFs of old exams photocopied on a forum.
The architecture decisions that mattered
- Multi-exam from day one with one schema. Each question carries
exam_type,topic,difficulty. A practice session is a query, not a separate codebase. Adding KMP Innsbruck after Wien was an evening, not a sprint. - SM-2 spaced repetition on top of the standard quiz loop. The user sees what they don’t know, more often. Anki users feel at home; non-Anki users don’t notice the algorithm and just see “due today: 14 cards.”
- AI explanations are pre-generated, not live. 1,615 questions have written explanations stored in Postgres. The user never waits on a model call. The cost is a one-time bill at content authoring, not a per-user-per-session bill.
- Telegram Mini App + bot for re-engagement. The Mini App is the same Next.js code surfaced inside Telegram’s WebView. The bot pings users with “3 cards due today” at 19:00 Vienna time. Open rate: better than email by an order of magnitude in this audience.
- Daily quota counter for paid users. When AI explanations went paid-only in Apr 2026, I shipped a feature-flag-gated quota counter (
AI_DAILY_QUOTA_PAID=15) so the kill switch is environment-only. No redeploy to disable AI in case of a model bill incident.
The pricing reset (Apr 2026)
Engineering is half the case study. The other half is whether the product earns — and what discipline went into the price grid. Live tiers as of Apr 2026:
- €27 first-3-months entry tier. Capped at one per account. Works out to ~€9/month — a thinner first ask for a market with crypto-payment friction and a long-tail conversion window.
- €19 single-month fallback. Demoted to fallback after the entry- tier reset; kept live for users who explicitly want monthly.
- €114 Founders’ / Cohort. Six months of full access — the lump sum that founders’ tier early-backers reach for.
- €29 / €79 / €149 / €229. Standard 1mo / 3mo / 6mo / 12mo tiers, waitlisted while Stripe Atlas (US LLC + EIN) clears. Crypto-only via NOWPayments in the meantime.
- Referral mechanic. €15 per starter / €25 per monthly+3mo / €50 per 6mo+12mo / €75 per Cohort. Stacks toward an exam-fee rebate when the referee passes — turns the existing cohort into a recruiting flywheel without paying paid-acquisition rates.
The Phase 1 reset shipped Apr 28, 2026 after a Researcher dispatch confirmed price wasn’t the conversion blocker — friction was. The discipline: test before rebuild. Phase 2 (€19/€49/€89/€149 across all tiers) is queued behind the Stripe Atlas approval and a survey of free users.
What I got wrong
Tried to ship the bot and the web app simultaneously
Wave 1 attempted both surfaces at once. Wave 1 shipped late. Wave 2 forced me to split: web first, bot second. Each surface needed its own QA loop. Trying to parallelise that on a one-person team meant neither finished crisp until I sequenced them.
Mistook ‘AI-powered’ for a product feature
Early copy on the landing page said “AI-powered exam prep.” Conversion was flat. Rewrote to lead with “10,993 active questions across 3 exam types” — the numerical proof — and put the AI explanations as a feature inside the paid tier. Conversion picked up. The AI is a feature; the question bank is the product.
Forgot the umlaut for two weeks
The product is MedPrüf, with the umlaut. GitHub README and llms.txt said “MedPrep” + “Germany” for two weeks. Caught in the Apr 2026 brand audit. Find/replaced. Drift Checker now flags any surface that says either.
The lesson
A medical exam-prep product is the inverse of a flashy AI demo: the model can’t hallucinate, the spaced-repetition math has to be reproducible, and the German translations have to be exact. The AI features are scaffolding around a question bank that has to be right. If the question is wrong, no amount of GPT-4 can save you. Most of the engineering went into the boring layer: editorial tools, the duplicate-question detector, the per-exam-type scoring rubric.
On feature flags
AI_FEATURES_ENABLED=false kills all AI calls in one env var. No code change. No deploy. Same pattern works for AI_PROVIDER_MODE=openai if Anthropic is rate-limiting. The kill switch is the feature.
// stack
- Next.js 15
- React 19
- Supabase
- GPT-4o-mini
- Telegram Mini App
// next case study
Want this kind of build for your business? Book the Audit Sprint — $1,500 or email omar@neurascale.org.



