SAGE is an AI strategist for the conversations you're dreading. Describe the situation — a raise you need to ask for, a message you've been avoiding for a week — and it reads the power dynamics, maps what's happening against The 48 Laws of Power, and drafts your reply in eight different tones.
| Year | 2026 |

I didn't build Sage to ship an AI app. I built it because I kept losing the same kind of conversation: I'd send the honest, emotionally transparent message, then find out later what the other person was actually doing. Then I read The 48 Laws of Power and realised I'd been running Law 3 — Conceal Your Intentions — exactly backwards, over and over. I wanted something that checked my decisions against the laws before I hit send. Not a chatbot that agrees with me. A strategist that tells me I'm about to be outplayed.












Challenge
Advice is cheap and generic. The hard part is getting a model to reason about one specific, messy human situation and return something structured enough to act on — hidden motivations, who holds leverage, which laws apply, what to actually say — without hallucinating the parts a reader can go and check.
Action
Building for myself
Sage is the only project I've built that already had a user before it had a name — me. I was running my own conversations through it while it was still a text field and a prompt. Every feature exists because I needed it mid-argument: the live coach that reads the other person's message, the simulator that rehearses how they might respond, the journal that reviews how a conversation actually went.
Technical foundations
React Native + Expo with Expo Router and TypeScript. The AI layer talks to Gemini over raw REST instead of an SDK, wrapped in an 8-key rotation system that marks dead keys and locks the quota window when the free tier runs dry. Voice input runs two transcription engines — Gemini's native audio understanding first, Groq Whisper as failover — picked specifically so a rate limit on one doesn't take the whole feature down. Every AI response is validated against a zod schema where each field degrades to a safe default rather than failing the payload. State persists to AsyncStorage behind a single context provider. The UI is a custom dark design system — my own colour, spacing, type and motion tokens — built on Reanimated and Gesture Handler.
Problems while building
Three shaped the app. First, free-tier rate limits are constant, and one API key made the product feel broken — so I built key rotation with dead-slot tracking and a 60-second quota lock that stops requests entirely instead of hammering the API and digging the hole deeper. Second, the model kept citing the wrong laws, numbering its own list instead of the book, so I stopped trusting it: every law title is scored against a keyword index of all 48, and a weak match falls back to a generic label rather than asserting a false citation. Third, structured output fails partially, not completely — so every schema field carries a default, and one missing array collapses a section instead of blanking the screen.
Result
Sage turned a book I'd read twice into something I use before every hard conversation. It's taught me more about shipping AI than anything else I've built: the prompt is the easy part, and everything that makes it feel reliable — key rotation, schema defaults, citation checks — is ordinary engineering wrapped around an unreliable component. It's also the most personal thing I've made, because the first user was me.