Inspiration
Inspiration
Some decisions cannot be undone — resigning, leaving, ending something you built for years. After the choice is made, many people get stuck in a loop: Did I make a mistake? What if I had stayed?
ChatGPT and similar tools amplify that loop. They will debate your decision forever, offer second opinions, and never enforce a boundary. We asked: what if AI existed not to re-open the choice, but to help someone live inside it?
That question became Living With It — a bounded, nine-week reflective instrument for people who already decided and cannot stop re-litigating.
What it does
Living With It is not a chatbot. It is a ritual chamber with four phases:
- Void — enter the instrument
- Commitment — lock an irreversible, past-tense decision (no hypotheticals)
- Chamber — receive weekly letters from your future self across nine temporal vantage points
- Terminal — arc complete; export your Living Record; begin again
Before any AI runs, client-side input gates enforce the product's philosophy in code:
- Commitment Gate — rejects "I'm considering…" (must be already decided)
- Re-Litigation Gate — rejects "Did I make a mistake?" / "Should I go back?"
- Anti-Compare Gate — rejects "What if I had stayed?"
- Depth Gate — rejects shallow one-word prompts
If a gate rejects input, no API call is made. The user rewrites; the instrument does not negotiate.
Each accepted check-in generates a single contemplative letter block — first-person future-self voice, no chat bubbles, no avatars. Every reflection ends with: "One possible internal experience. Not a prediction. Not advice."
Users can export a .md Living Record (decision + all nine weeks + disclaimers) and view completed arcs in a read-only archive.
Live demo: https://living-with-it.vercel.app
How we built it
Frontend: React + Vite + TypeScript, mobile-first dark ritual UI exported from Figma Make. A strict useReducer state machine makes illegal phase transitions impossible — the decision is immutable after Week 1 with no edit UI in the DOM.
The moat — gates in code: Pure functions in gates.ts return { ok } or { ok: false, label, reason, hint }. These run client-side before any network request. This is the differentiator judges cannot get from a generic chat wrapper.
AI layer: Supabase Edge Function relays to Groq Llama 3.3 70B with a strict system prompt enforcing: future-self voice, tone arc by week (disorientation → emerging costs → integration), and absolute bans on advice, predictions, and validation/invalidation. The server stores nothing for reflections — pure ephemeral relay.
Fallback: Local template engine generates tone-arc reflections if the network or API fails, so demos never break silently.
Optional email delivery: Resend API sends sealed weekly letters; subscriber data lives in Supabase KV and is erased after nine weeks.
Deploy: Vercel (frontend) + Supabase (edge functions).
Challenges we ran into
- Making constraints feel like product, not frustration — gates had to explain why they reject input without breaking the ritual tone
- Preventing generic AI voice — engineering prompts that echo the user's own words for cost and fear, with concrete sensory details
- State machine integrity — ensuring the locked decision cannot be edited anywhere in the UI, not merely disabled
- Demo vs. production — all nine weeks unlock in one session for judges; production would gate one week at a time
- Email deliverability — Resend test mode limits recipients until a sending domain is verified
Accomplishments that we're proud of
- Input gates that refuse re-litigation before the model runs — enforced in code, not copy
- A working live prototype with real AI-generated reflections and template fallback
- Zero server-side storage for reflection content — aligned with "no cloud profiling" philosophy
- Mobile-first ritual aesthetic that feels like a chamber, not a chat app
- Full arc export as a clean markdown Living Record
- Human-only lock on the irreversible decision — AI never decides whether the choice was right
What we learned
The best AI for high-stakes personal decisions may be one that refuses to decide. Guardrails belong in architecture, not disclaimers. When you name a specific user (post-decision doubters) and a specific constraint (the choice is locked), the design becomes obvious: block re-litigation, narrate one fixed future, end with humility.
We also learned that demo reliability matters — a silent API failure kills trust faster than a template fallback ever could.
What's next for Living With It
- Production weekly unlock (one week per seven days, not all nine in one session)
- Deeper archive features while keeping session-scoped privacy defaults
- User testing with people who recently made irreversible career or relationship decisions
Built With
- css
- figma
- groq
- react
- resend
- supabase
- tailwind
- typescript
- vercel
- vite
Log in or sign up for Devpost to join the conversation.