Skip to content
Aayush Thakur
All work

Case study · Built in 1 day

PrelimsDaily

A 10-minute daily habit for UPSC Prelims, from empty repo to tested app in a day.

Role
Solo: product, design, code
Timeline
1 day · Oct 2026
Platforms
Android and web (Expo)
Stack
Expo, TypeScript, Zustand, Reanimated
PrelimsDaily Today screen: a one-day streak, a completed 5 of 5 target ring and week dots
PrelimsDaily quiz: a statement-style question on the Financial Emergency, answered correctly, with its explanation
PrelimsDaily result: a 60% ring, +40 XP and a one-day streak
Problem
UPSC aspirants don't fail for lack of material, but for lack of consistency.
Built
An offline daily-practice app with streaks, XP and reminders that adapt, in one day.
Result
72 passing tests, every trade-off written down, and an installable Android build.

01 — The brief

A habit, not a question bank.

Most aspirants don't fail for lack of material. They fail for lack of consistency.

I built PrelimsDaily in a single day as part of a startup application: one focused question set a day, streaks with freezes, a daily target ring, XP and levels, and reminders that adapt to your streak. It runs fully offline on Android and the web.

The rules live in pure, unit-tested functions, state is persisted with a versioned schema that falls back safely if anything is malformed, and a root error boundary means a render crash shows a Retry screen, never a white screen.

  • PrelimsDaily profile screen: 25 answered, 56% accuracy, best streak 1, level 3, and accuracy bars by subject

    Profile

    Accuracy, best streak, level and per-subject stats.

  • PrelimsDaily settings: daily target selector, daily reminder toggle and a note that today's reminder is skipped because the set is done

    Smart reminders

    Reminders that skip the days you've already finished.

02 — Decisions

Small app, real engineering.

Every trade-off is written down in the README.

  1. 01

    Local dates, never UTC

    Days come from the device's local calendar. With UTC, an Indian student practising before 5:30 AM would land on “yesterday” and could lose their streak.

    Trade-off: All day maths goes through small helpers, tested across month, year and leap-year boundaries.

  2. 02

    A deterministic daily set

    The set is seeded by the local date (FNV-1a → mulberry32), so it's identical all day, even after a reinstall. Once there's enough data, about half the picks come from your two weakest subjects.

    Trade-off: With a small bank, repeats come back eventually, in a predictable order.

  3. 03

    Reminders that know you're done

    A repeating trigger can't skip today or change its copy, so the app re-schedules seven one-off reminders on every relevant change. Offline, no server.

    Trade-off: The app has to be opened at least once a week to top up the queue.

  4. 04

    60fps on the UI thread

    Reanimated drives the ring with animated props and the XP bar with scaleX instead of width, so animations skip layout and the JS thread.

    Trade-off: A little more setup than plain layout animation.

03 — Quality

72 tests in a one-day build.

72tests

Unit tests in 5 suites, covering local-date maths, streak transitions (continue, freeze, reset, earning freezes), XP and level curves, the daily set’s determinism, weak-subject weighting and recency rules, and loading saved state safely. Strict TypeScript and lint on top.