Sarthi

OpenAI Build Week · Track: Apps for your life · Coded end to end with Codex

Inspiration

For a while I was running my life across four different apps. One for food, one for money, one for habits, and a spreadsheet for study hours. None of them talked to each other, and logging the same day four times got tedious enough that I stopped opening all of them. The problem was never motivation, it was friction. I think about my day in one messy sentence, but every app wanted a separate form. Sarthi started as a fix for that gap.

What it does

You say or type one messy sentence, like "spent ₹340 on lunch, 2 rotis and dal, 90 minutes of system design, woke at 5:10," and Sarthi turns it into typed entries across four life domains at once: Health, Money, Habits, and Skills. Explicit values file on their own. Anything the AI had to estimate, like the calories in that lunch, becomes a card you confirm before it is saved, so nothing estimated is ever written silently. Photos work too, read for meal macros or parsed as receipts. On top of that, a coach reacts to each capture, briefs you in the morning, reflects weekly, and adapts your plan in the open: every change shows before, after, and the reason, and you can revert it.

How we built it

It is one capture pipeline feeding four separate typed stores, all behind a repository layer that runs on SQLite in development and Postgres in production. Every model call (parse, coach, vision, voice) sits behind an interface that has a deterministic fake version, so the entire loop runs with no API keys. Real calls route through the Vercel AI SDK and can point at Gemini, GPT-5.6, or Claude by changing one line of config. The coach is a hand-rolled tool loop over that same data, with a two-layer memory that keeps a short buffer and a longer store ranked by how recent and how often something matters. Built with Next.js and TypeScript, coded end to end with Codex and GPT-5.6 Sol and Terra models.

Challenges we ran into

The trust rule was the hard constraint everything bent around: a wrong number written without asking is the worst thing this kind of app can do, so estimates had to be impossible to save by accident, not just unlikely. Getting one loose sentence to become clean, typed data across four domains took real work on the parse and the schemas. The agentic coach fought back the most. LLMs kept guessing wrong field names for its tools, so its reads failed quietly and it looked like it had no data. Tightening those tools into a strict typed union fixed it. There was also a day-boundary bug where Today showed the wrong day for a few hours, because writes used local time and the read used UTC.

Accomplishments that we're proud of

One spoken sentence genuinely fanning out into four typed domains in a single shot, which is the whole point. The glass-box trust model holding all the way through: estimates get confirmed, plan changes stay revertible, and everything is undoable. The fact that the full capture loop runs keyless on the fake stack, so anyone can try it end to end without an API key. And a coach that stays grounded in real data, refuses to make numbers up, and remembers your goals across conversations.

What we learned

The model is only ever as reliable as the guardrails you put around it. Most of the work that made Sarthi trustworthy was not the prompting, it was the typing, the confirmation step, and the undo. Putting every provider behind a fake adapter also paid off more than expected: it kept the whole thing testable, fast to iterate on, and free to run.

What's next for Sarthi

Shipping the native mobile app, whose shared core is already extracted. Teaching the coach to nudge you at the right moments and to compound what it learns about you over weeks. And adding new domains, which the architecture makes cheap, since each one is just a schema plus a lens.

Built With

  • agent
  • chagpt
  • codex
  • llm
  • nextjs
  • postgresql
  • react
  • speech
  • supabase
  • vercel
  • vision
  • vision-model
Share this project:

Updates