Roadmap

note Plans change; this page shows intent and the architectural work each item needs, not dates.

flowchart LR
  subgraph NOW["Now"]
    A0[Hardening: 7 fixes]
    A1[App Store and Play Store launch]
    A2[Staging API]
    A3[DPDP privacy review]
  end
  subgraph NEXT["Next"]
    B1[More worlds opening]
    B2[Audio narration]
    B3[Friends and activity sharing]
  end
  subgraph LATER["Later"]
    C1[Learned feed policies]
    C2[More languages]
    C3[Second region]
  end
  NOW --> NEXT --> LATER

Hardening

note These came out of checking this report line by line against the code. Each is a gap between how the system should behave and how it behaves today. None is urgent at today's scale, and each is small.

#AreaTodayImprovementWhy it matters
1Feed plannerRules are deterministic, so every logged propensity is 1Add a small, logged amount of exploration (for example, swap one slot in ten for a ranked alternative)Without it, off-policy evaluation of a learned feed is impossible; this unblocks the learned-policy work below
2SyncRejected mutations are deleted from the outboxKeep rejections whose type or version is newer than the server in a parked table and retry after the next deploy; report rejection counts in the health eventA newer app talking to an older API never loses a learner's action
3SyncThe change feed is pruned after 180 days with no signal to devicesWhen a cursor is older than the oldest kept change, answer "reset" and have the device do a full snapshot pullA phone left in a drawer for half a year still catches up correctly
4SyncEach user-data mutation is its own transactionClaim ids and apply user-data mutations in one transaction per push, as analytics events already areFewer round trips per push; the first step of the scaling plan
5Deploys/readyz checks only the database connectionAlso check that the schema is at the migration level the build expectsA machine can never take traffic ahead of its schema
6Rate limitsThe per-person sync limit counts recent rows in sync_mutations on every pushMove the counter to a cheap per-user window (in memory or at the edge)Removes a query from the hottest path as traffic grows
7ExperimentsThe registry, assignment and holdout exist, but nothing is runningLaunch the first experiment (a question-style hook in the content layer) and its readout viewProves the whole loop end to end before a decision depends on it
flowchart LR
  H1[1 · feed exploration] --> C1[Learned feed policies]
  H7[7 · first experiment] --> C1
  H2[2 · park rejected mutations] --> S[Safer sync]
  H3[3 · feed reset signal] --> S
  H4[4 · batched transactions] --> SC[Scaling stage 1]
  H6[6 · cheaper rate limit] --> SC
  H5[5 · schema-aware readiness] --> D[Safer deploys]

Now

roadmap Store launch. Move from TestFlight and Firebase App Distribution to the App Store and Google Play. Builds already come from CI and carry signed release info; the remaining work is store listings, privacy labels and review.

roadmap Staging API. A separate API and database for pre-release testing, so app builds can be tested against a server that is not production. The content preview channel already covers content.

roadmap Privacy review. A formal review under India's Digital Personal Data Protection Act: notices, consent records, data requests and a retention schedule. Most mechanisms (export, delete, consent, pseudonyms) already exist.

Next

roadmap More worlds. Worlds now on a waitlist open as their topics are written. Waitlist sign-ups decide the order. Content-only: no app release needed.

roadmap Audio narration. Narrated layers for listening on the go. Audio files ship as content-addressed files through the same pipeline; the app adds a player and offline caching.

roadmap Friends and activity. Follow friends, see what they are learning, and challenge them. Builds on share links and deck sharing; needs a social graph table and privacy controls.

Later

roadmap Learned feed policies. Today the feed uses the rule policy feed.rank/rules@3. Once it explores a little (see Hardening), decision logs with real propensities make it possible to evaluate and train new policies offline (off-policy evaluation), using only lake rows from learners who gave research consent, then roll them out through the feed experiment layer.

flowchart LR
  L[(decision logs<br/>with propensities)] --> F[filter: research consent]
  F --> T[train candidate policy]
  T --> O[off-policy evaluation]
  O -- better than rules@3 --> E[experiment in the feed layer]
  E -- wins --> P[promote policy]
  O -- not better --> T

roadmap More languages. Captions already support English and Hinglish; more Indian languages follow the same content fields, with search and the planner language-aware.

roadmap Second region. See Scaling Plan, stage 2.

${sch.nav()}