Personal, 2026
Everything
Kasoti
A mock-test app for one exam candidate, built as a real monorepo anyway.
A Gujarati-first mock test app for the GSSSB CCE prelims, built for a single aspirant. The questions are not the product. The analysis after the paper is, which is why the scoring lives in its own package with no imports and its own unit tests.
A Turborepo with three apps and seven packages: the Expo app she sits papers in, a Hono API, and a TanStack Start admin panel for the question bank. A CI check enforces that the on-device schema stays a subset of Postgres, so the phone can never drift ahead of the server.
The supporting scripts matter as much as the apps: a CSV importer that rejects rather than warns, a command line tool that assembles and publishes a paper, and a Python extractor that pulls questions out of the commission own PDFs.
Surfaces
- nativeExpo 57, React Native 0.86
Where she sits the papers. Offline-first, because the exam hall has no signal either.
- Expo 57
- React Native 0.86
- Reanimated 4
- MMKV
- TanStack Query
- serverHono
Serves content and receives attempts. Better Auth mounted from a shared package.
- Hono
- Better Auth
- Zod
- Drizzle ORM
- webTanStack Start on Nitro
The admin panel: question bank, papers, accounts. Talks to Neon through server functions.
- TanStack Start
- Nitro
- Base UI
- shadcn
- Neon Postgres
Engineering notes
- scoring: a pure package with no imports and its own unit tests
- validation: one Zod layer shared by the CSV importer and the API boundary
- check-schema-parity: CI fails if the device schema drifts from Postgres
- Pooled and direct Postgres URLs kept apart, because PgBouncer cannot serve transactions