--- title: Second Thoughts emoji: 🕊️ colorFrom: red colorTo: gray sdk: docker app_port: 7860 pinned: false short_description: A private space to say the complicated thing out loud. --- # Second Thoughts *For exploring the complicated feelings that come with second thoughts — and practicing how to put them into words.* A support space — not a debate bot — for people sitting with complicated feelings about a vote they cast: regret, shame, confusion, grief, ambivalence. It uses reflective, motivational-interviewing-style conversation to help people process their own experience at their own pace. It does not argue politics, does not diagnose, and does not push toward any conclusion. See [`DESIGN.md`](DESIGN.md) for the conversational approach, the guardrails, and the reasoning behind the product decisions. ## Setup 1. In **Settings → Variables and secrets**, add a secret named `ANTHROPIC_API_KEY`. 2. Push this repo to the Space. It builds and launches on its own. Without the secret the UI still loads and explains that it isn't connected to a model yet — it won't crash or leak a stack trace. ## How it's built - **Docker SDK**, not Gradio. The interface is a custom mobile-first page matching the design mockup; Gradio's chat components can't take that shape without fighting the framework. - **FastAPI** serves the static page and one streaming endpoint, `POST /api/chat`. The API key stays server-side and is never sent to the browser. - **Claude Opus 5**, streaming, with the system prompt marked for prompt caching (it's long and identical on every turn, so it's cheap to reuse). ## Privacy Conversations are never persisted. History lives in the browser tab's memory and is posted back with each turn so the model has context; closing the tab ends the conversation for good. There is no database, no logging of message content, and no analytics. Client IPs are held in memory only as rate-limit counters and are never written down. If you later add logging or persistence, anonymize it and disclose it clearly to users **before** they start typing — the whole premise here is that it's safe to say something out loud. ## Limits `POST /api/chat` is metered per client: 40 messages an hour, 4,000 characters a message, and the most recent 40 turns of history. The key is server-side on a public Space, so the endpoint is open to anyone who finds it. ## Safety If someone in crisis reaches this bot, it surfaces the 988 Suicide & Crisis Lifeline (US) proactively rather than waiting to be asked. A persistent footer carries the same number. This is not a replacement for 988 or for professional mental health support, and the interface says so.