Skip to content
← vishwa moraCase study · iOS product

A tax on the scroll.

Every time you open Instagram or TikTok, three questions from your own coursework appear first. Answer them and the app opens, right or wrong. The ones you get wrong come back tomorrow.

The real app, recorded on a phone. Twenty seconds, no edits.

The bet
Will a masters student answer three questions on their coursework every single time they want to open a social app, when the alternative is not opening it at all?

That is the only question the build exists to answer. Everything in it serves that test and nothing else was allowed in until it had one.

The audience was chosen for the same reason: business school masters students carry a heavy study load, heavy social media use, and enough guilt about the second to consider the first. They also sit in a tight enough social graph that one group chat reaches most of a cohort.

How it works
  1. 01

    You reach for the app

    Instagram or TikTok. The tap is intercepted before the app opens, using the phone's own shortcuts layer rather than anything that needs special permissions.

  2. 02

    Three questions, from your own coursework

    Not trivia. Questions generated from the lecture notes and readings you uploaded, so the thirty seconds you spend is thirty seconds of revision.

  3. 03

    Right or wrong, it opens

    This is the part people expect to be a punishment and it deliberately is not. Blocking breeds workarounds. The wrong answers simply come back tomorrow.

Three decisions worth defending

The model key never ships in the app

Question generation runs server-side in an edge function, not on the device. Anyone can unpack a mobile app bundle and read what is inside it, so an API key shipped in the binary is a key you have given away. The app asks the server; the server holds the secret.

Your notes are yours, enforced by the database

People upload their actual coursework, which is personal. Row-level security means the database itself refuses to return another person's rows. It is not a filter in the app that a bug could bypass.

It works with no account and no signal

Offline-first local storage with a bundled question bank, syncing up when a connection exists. You can try it as a guest and it works immediately. Asking for a signup before showing value is how student apps die.

Honest status

On TestFlight, third build, being handed to a single cohort rather than launched. There is no retention data yet, and retention is the only number that would mean anything here. A screen-time app people delete in a week is not a product, it is a guilt trip with an icon.

So the next thing is not more features. It is finding out whether the same person answers on day nine.

Built with
  • App Expo, React Native, TypeScript
  • Data Supabase Postgres, Storage, row-level security
  • Questions Gemini, called only from a server-side edge function
  • Offline Local-first storage with a bundled question bank
  • Gate The phone’s own shortcuts layer, no special permissions

Building something
and want it to actually ship?

vishwahithhmora@gmail.com

The AI systemsHow I work with clientsBack to everything else