Skip to content
Carlo Miguel Dy
← Back to the specimen catalogue

Acc. XIX · Vitrea disciplina — offline study chamber, cultivated 2026

NMAT Reviewer — offline-first NMAT practice PWA

Technical founder · Product engineer · 2026 · Independent studio

A free, offline-first PWA for the Philippine National Medical Admission Test, with 448 original practice questions, four study modes, and progress that never leaves the device.

Vitrea disciplina — offline study chamber, cultivated 2026

Field notes

The context

NMAT review material for Philippine medical-school applicants is typically paid, server-dependent, or both, and existing tools rarely give students a way to study offline or keep their progress private on their own device.

Cultivation

What I built

  • Wrote 448 NMAT-style practice questions across eight subtests with verified references, and built four study modes — Practice, timed mock exams, Smart Review, and Leitner-box flashcards.
  • Built multi-profile, on-device progress tracking in namespaced localStorage with schema-versioned migrations and corruption quarantine, plus checksummed JSON export/import for backup.
  • Built a curated knowledge base of study articles per subtest and full offline operation via Workbox precaching with update notifications.
  • Built build-time content validation enforcing per-subtest question minimums, and WCAG 2.1 AA keyboard navigation with prefers-reduced-motion support.

Root system

How it works

A single static SPA (Vite + React Router data router) whose marketing and knowledge routes are prerendered through headless Playwright for crawlers, while study routes stay client-rendered. Content is typed JSON validated by Zod at both build and load time. There is no server, no account, and no analytics — progress lives only on the device, which is the privacy posture the product is deliberately built around — and it deploys to Vercel as a static site with SPA rewrites.

Harvest

Outcomes

  • Deployed and usable, with all 448 questions original NMAT-style material, unaffiliated with CEM.
  • No user numbers are claimed.

Herbarium

The work itself

Dark study dashboard greeting Maria Santos beside a 7-day streak pill, an overall readiness card showing a 72% ring with 162 questions attempted and 2 mock exams taken, and a mastery bar for each of the eight NMAT subtests.
Fig. 1The study home reads mastery, streak and readiness straight out of localStorage — there is no account and no server behind it.
Untimed Biology practice session on question 12 of 56, with a 56-dot progress rail, a cell-cycle checkpoint question, four lettered answer cards, previous and next controls, and an 11 of 56 answered counter.
Fig. 2Untimed practice runs the same session engine as the timed mocks — 56 original questions per subtest, 448 in all.
The same Biology question after answering: option A outlined green with a check, the other options dimmed, a Correct banner, and an open drawer with the full explanation, references to OpenStax Biology 2e and NCBI Bookshelf, and a Next question button.
Fig. 3Every item resolves into an explanation plus one to three vetted references from open sources.
Quick Mock Results screen with a 75% ring reading 30 of 40 correct, a per-subtest breakdown table covering all eight subtests, and a mock exam trend sparkline across five sittings.
Fig. 4A 40-question Quick mock scores per subtest and folds into the trend line; the Full sitting runs 160 questions.
Flashcard review on card 12 of 20 with a progress bar at 60 percent, the card flipped to its answer side explaining affect versus effect, and two grading buttons reading Didn't know it and Knew it.
Fig. 5115 flashcards graded into five Leitner boxes on 0/1/2/4/7-day intervals.
Mobile study home with a streak pill, a 72% readiness ring over 162 questions and 2 mock exams, mastery bars for Verbal, Inductive, Quantitative and Perceptual, and a fixed bottom tab bar for Home, Modules, Flashcards and Settings.
Fig. 6Installable as a PWA — shell and question content are precached, so the full study flow works with the network off.
Pressed leaf — what it taught
Committing to no server and no accounts turned a privacy preference into an architectural constraint that simplified everything downstream — no auth, no backend, no data-handling surface to secure. Prerendering only the crawlable routes while keeping study routes client-rendered kept SEO and offline-first from fighting each other.