Inspiration

What it does

How we# Stillpoint

For the moment before you're ready to talk to someone.

Inspiration

Stillpoint started from a simple, personal observation: the hardest part of getting support isn't the support itself — it's the gap right before you reach out. That gap is where people spiral, freeze, or just close the laptop and go back to scrolling.

As someone who is legally blind and has spent real time navigating support systems myself, I've felt that gap firsthand — the moment where you know something is off, but you don't have the words yet, or the energy to explain it to another human. I wanted to build something that could sit in that exact moment: not a replacement for a therapist or a friend, but a bridge to get you there when you're ready.

Privacy was non-negotiable from day one. Emotional data is some of the most sensitive data a person has, and most tools that "help" quietly build a profile of you in the process. Stillpoint is built to do the opposite.

What it does

Stillpoint is a privacy-first emotional grounding app. It helps someone understand what they're feeling in the moment and surfaces real, vetted next steps — without ever inventing a resource, overriding a safety boundary, or building a permanent picture of who you are.

Two things happen when someone talks to Stillpoint:

  1. It searches the NOPE Signpost API for real, vetted support resources relevant to what the person described.
  2. A separate, structured Gemini call evaluates and ranks those resources for the person's specific context.

The AI can reason about relevance — but it cannot invent resources, bypass the crisis-safety system, or decide its own boundaries. Those boundaries are owned by the application, not the model.

Conversations don't need to be permanent to be useful. Chats stay in the browser — session-only by default, or saved locally if the user opts in — and are never stored in our database.

How we built it

Architecture

  • A dual-layer crisis gate: checked client-side first (independent of any API key), then server-side, then once more immediately before any local AI generation — so a person in crisis is never more than one layer away from real resources like 988, Crisis Text Line, or 911.
  • A Backend-for-Frontend (BFF) pattern that proxies Gemini server-side, removing the need for users to bring their own API key.
  • A fully on-device local AI mode via WebLLM (WebGPU) or Hugging Face Transformers (WASM), running in a Web Worker with downloadable, pausable model tiers — for people who want zero server contact at all.

Stack

Next.js, MongoDB (Mongoose), JWT-based auth, Upstash Redis for rate limiting, Tailwind v4, shadcn/ui, and pnpm. Text-to-speech runs on Kokoro, an open-weight TTS model, deployed as its own Hugging Face Space.

Team

What started as a solo project in early August grew into a small team: a primary/backend developer stabilizing the codebase, a backend contributor, and a collaborator helping with ideation. We validated our BFF architecture decision directly with mentors at two Arm/Hack for Humanity office hours sessions before committing to it.

Challenges we ran into

  • The crisis gate had to be bulletproof, not just correct. Getting a safety-critical feature right under hackathon time pressure meant resisting the urge to ship a "good enough" version — a skipCrisisGate fix, for example, sat ready for a full stabilization pass rather than going in hot.
  • Balancing local AI ambitions with real device constraints. WebGPU support and model size tiers had to be handled carefully so the app degrades gracefully instead of breaking on lower-powered devices.
  • Team coordination across time zones and roles, with a one-week stabilization window carved out deliberately so the codebase wouldn't fracture as more people touched it.
  • Keeping scope honest. It was tempting to keep adding features to a tool meant to help people in a fragile moment — the discipline was in cutting scope back toward the core promise: real resources, real privacy, no invented safety net.

What we learned

Building something meant to hold space for someone else's hard moment changes how you think about every technical decision. A rate limiter isn't just infrastructure — it's part of keeping the app affordable to run so it can stay free. A crisis gate isn't a feature — it's the whole point. And "we don't store your data" only means something if it's true at every layer, not just in the privacy policy.

Stillpoint isn't trying to replace the people in someone's life, and it isn't trying to know them better than they know themselves. It's just trying to make the moment right before reaching out to someone a little less lonely. built it

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for Stillpoint

Built With

Share this project:

Updates

Submission history