secondthoughts / README.md
jostlebot's picture
Claude Opus 5
Second Thoughts: confidential space for second thoughts about a vote
570a433
|
Raw History Blame Contribute Delete
2.7 kB
metadata
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 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.