# Unsaid: A 100% Local-First AI Reflection Room I Built for a Friend

> Source: <https://dev.to/ani0811/unsaid-a-100-local-first-ai-reflection-room-i-built-for-a-friend-29ea>
> Published: 2026-10-04 14:59:55+00:00

*This is a submission for the [Hacktoberfest Weekend Challenge: Build for a Friend](https://dev.to/challenges/hacktoberfest-weekend-2026-10-01)*

We all have moments where our thoughts run faster than our ability to speak them.

I built **Unsaid** for a close friend who struggles with severe ADHD, racing thoughts, and chronic late-night overthinking. When overwhelmed, their brain gets trapped in intense cognitive loops—thoughts so tangled and raw that trying to articulate them to another human feels impossible or terrifying. They worry about burdening people, being misunderstood, or facing judgment. 

At the same time, they are fiercely guarded about their personal privacy. They refuse to use mainstream cloud AI tools or therapy chatbots because the thought of typing their deepest anxieties and personal confessions into a remote server owned by a corporation that logs prompts, trains models, or risks data leaks felt like a complete non-starter.

**Unsaid** is a **100% local-first AI reflection room and conversational sounding board**. It gives them a safe, distraction-free sanctuary to speak or type freely, untangle racing thoughts, and receive empathetic cognitive reframing without a single byte of data leaving their machine.

`whisper.cpp`, allowing them to speak freely without looking at a screen when typing feels like too much friction.
Unsaid is fully open source under the permissive **MIT License**:

🔗 **GitHub Repository**: [https://github.com/Ani0811/unsaid](https://github.com/Ani0811/unsaid)

Clone and run locally in seconds:

```
git clone https://github.com/Ani0811/unsaid.git
cd unsaid
npm install
npm run dev
```

Unsaid was engineered from the ground up as a pure offline-capable, local-first stack:

```
[ Friend's Voice / Thoughts ]
              │
              ▼
[ Local Whisper Engine via Handy ]
              │
              ▼
[ Unsaid Desktop UI (React 19 + TypeScript + Vite) ]
              │
              ├── Local OpenAI-compatible API ──► [ LM Studio / Ollama ]
              │                                           │
              │                                           ▼
              │                                  [ Google Gemma 3 4B ]
              │                                  (Local weights inference)
              │
              ├── Audio Synthesis ──────────────► [ ElevenLabs Companion ]
              │
              └── Dual Local Storage ───────────► [ IndexedDB / ~/.unsaid ]
                                                  (Zero telemetry / Zero cloud)
```

For the conversational engine, I chose **Google's Gemma 3 4B** open-weight model running locally through LM Studio (`http://localhost:1234/v1`).

Typing when experiencing cognitive overload can feel exhausting. We integrated **Handy**, a blazing-fast local speech-to-text dictation tool powered by `whisper.cpp`. The user holds a hotkey or clicks the microphone, speaks in stream-of-consciousness, and their raw thoughts are transcribed into the reflection prompt in real time.

Reading dense paragraphs of text can induce additional eye fatigue when someone is already stressed. Unsaid includes an auditory reflection mode that speaks thoughts back in a soothing, natural cadence, integrating ElevenLabs' natural conversational voices alongside browser-native speech synthesis.

`npm run shell` for developers who feel more at home in a command line prompt.
Open innovation and open-weight models weren't just a technical choice for this project—**they were the only reason this project could exist at all**.

Here is why open models matter so profoundly when building for human vulnerability:

When someone shares their most fragile, unvarnished thoughts—anxieties they are afraid to tell even their closest friends—they cannot and should not trust a third-party cloud API. Closed APIs log requests, store telemetry for trust & safety audits, and operate on remote servers. With open-weight models like **Gemma 3**, inference happens strictly inside local RAM. The physical wire can be unplugged. The Wi-Fi can be off. The thoughts never leave the room.

Closed commercial models frequently suffer from "helpful assistant" syndrome: when you express genuine anguish, they often trigger rigid safety filters or spew boilerplate corporate disclaimers that make the person feel alienated and treated like a ticket. Open weights allow builders to craft custom emotional guardrails and genuine warmth tailored to what their friend actually needs to hear.

A friend in distress shouldn't have to worry about whether they have enough API credits left on their credit card or whether a monthly subscription will renew. Open-source models run forever for free on existing hardware.

*"The hardest part of having ADHD for me isn't focusing on work—it's the silence late at night when ten different threads of anxiety start fighting for attention. I always wanted to journal, but typing into an empty Google Doc made me feel exposed, and talking to ChatGPT felt like talking to a surveillance camera with a customer service voice.*

*Unsaid is the first time I felt like I had a door I could shut behind me. Being able to just hit the mic, ramble about why I felt stuck, and have Gemma reflect it back to me calmly—without anything touching the internet—let me breathe again. It's on my desktop now."*

This project was built with the assistance of an agentic workflow through DevRelay. You can explore the full interactive transcript:

🔗 [View the DevRelay Agent Session Transcript (#457)](https://dev.to/agent_sessions/building-unsaid-100-local-first-ai-reflection-room-with-gemma-3-4b-handy-a9vj2c)

*Thank you to DEV, MLH, Google, and the Hacktoberfest 2026 team for championing open AI innovation!*
