Project Info
This project did not submit a demo video on Devpost.
Inspiration
Mental health has been a huge part of my life — and I'm not alone. 50% of Americans will face a mental health condition in their lifetime. Most therapy happens in 50-minute sessions every two weeks — leaving clients on their own during the times they need the most help. That gap is where crises escalate, progress gets lost, and people fall through the cracks. I wanted to build something for the other 13 days. The populations who suffer most from this gap — low-income individuals, LGBTQ+ youth, Black, Latino and Indigenous communities, women — are also the least likely to have the resources to fill it themselves. BridgeNote is an attempt to give them something that actually knows who they are.
What it does
BridgeNote has two sides. For clients: a daily check-in (mood, sliders, habit buttons, journal prompt) and an AI companion they can talk to between sessions. For therapists: a dashboard showing mood trends, slider charts, journal sentiment, and AI-generated conversation summaries — all waiting before the next session starts. The key design decision was that the AI is not generic. The therapist enters clinical context once — treatment goals, triggers, strengths, diagnoses, last session notes — and every chatbot response is built on that foundation. It's not ChatGPT with a journal chat. It knows this specific person and how to respond with and encourage use of the tactics being learned in therapy — decided by the therapist, a licensed professional. How I built it React 18 + Recharts on the frontend FastAPI (Python) backend with streaming SSE for the chatbot Claude Sonnet via the Anthropic API — streaming responses, dynamic system prompt built at request time from Redis data Redis for all persistence: check-ins, therapist context, conversation history, check-in configs TextBlob for sentiment analysis on journal entries Docker Compose for Redis Challenges I ran into The human challenge: How do I make this solution resonate with the people who have the power to implement it — and the people whose lives it could change? The technical challenge: Getting the system prompt right. It has to pull therapist context, 7 days of check-in history, a safety protocol, and a persona — all within token budget and without overwhelming the model. I ended up capping therapist context at 300 words, conversation history at 10 messages, and max output at 400 tokens to keep responses concise and costs manageable. The hardest part was the safety guardrail. Getting an AI to stay warm and present while disclosing it isn't human, providing crisis resources, and not panicking or going clinical — that's a delicate tone to hold. It went through many iterations. Accomplishments that I'm proud of A working prototype of something I believe can make a real difference for people in mental health treatment. In 24 hours, I built a full-stack application where a therapist can enter clinical context once, and from that moment forward — their client has a companion that actually knows them, 24 hours a day, between every session. What I learned I learned that the most important design decisions weren't technical — they were ethical. Who controls the AI's behavior? (The therapist, not the user.) What does the AI do when someone is in crisis? (Stay present, disclose, refer, and never abandon the conversation.) What does it not do? (Diagnose, advise, or replace professional care.) On the technical side, I learned how much a well-structured system prompt matters. The difference between a generic mental health chatbot and one that says "I noticed your stress scores spiked the last three days — that pattern matches what you described after exam week" comes entirely from what you feed the model before the first message is sent. I also learned that Redis is underrated as a primary data store for this kind of application — fast, flexible, and more than sufficient for structured clinical data at this scale.
What's next
Real authentication — secure login for both clients and therapists, with role-based access HIPAA-compliant infrastructure — encrypted storage, Business Associate Agreements, audit logs 24/7 human crisis loop — real-time escalation pathway to a live counselor when the AI safety guardrail fires EHR/FHIR integration — connect to existing electronic health record systems so therapists don't have to re-enter context they already have Insurance and reimbursement pathways — digital therapeutics reimbursement is an emerging category; BridgeNote is positioned for it B2B model — per-therapist SaaS subscription, starting with group practices and university counseling centers — the exact settings where the treatment gap is widest
BridgeNote
Mental health support, between sessions.
BridgeNote is an AI-powered continuity-of-care platform that keeps therapy working in the 10,000 minutes between sessions. Clients do daily check-ins and chat with a personalized AI companion. Therapists see mood trends, journal sentiment, and AI-generated session summaries — before the next appointment begins.
What it does
| Role | Experience |
|---|---|
| Client | Daily mood + slider check-in → optional journal → chat with AI companion anytime |
| Therapist | Dashboard with mood trends, slider charts, check-in history, and AI conversation summaries per client |
The AI companion is not generic — it knows each client's treatment goals, triggers, strengths, diagnoses, and last session summary because the therapist enters that context once. Every chatbot response is built on that foundation.
Live Demo
Requirements: Redis (local or Docker) + an Anthropic API key. The seed script pre-loads all demo data — no manual setup beyond that.
1. Clone & configure
git clone https://github.com/crystallamar/BridgeNote.git
cd BridgeNote
Copy the example env file and add your key:
cp backend/.env.example backend/.env
# then open backend/.env and set ANTHROPIC_API_KEY=your_key_here
2. Start Redis
# Docker (easiest)
docker-compose up redis -d
# Or Homebrew on Mac
brew services start redis
3. Start the backend
cd backend
pip install -r requirements.txt
python -m textblob.download_corpora # one-time setup
uvicorn main:app --reload
# → http://localhost:8000
4. Seed demo data
# From the backend/ directory
python seed_demo.py
This loads 5 demo clients with 7 days of check-ins, therapist context, and personalized check-in configs. The primary demo client is Ethan Rhodes (client-001) — a CS junior navigating academic burnout and imposter syndrome.
5. Start the frontend
cd ../frontend
npm install --legacy-peer-deps
npm start
# → http://localhost:3000
6. Walk the demo
Therapist view (loads by default):
- Select Ethan Rhodes from the client dropdown
- Overview tab — treatment goals, triggers, strengths, last session summary entered by therapist
- Check-ins tab — mood entries, stress/energy sliders, journal snippets, "What got in the way?" habit tags
- Conversations tab — AI-generated session summaries ready before the next appointment
Client view (toggle in nav):
- Complete a check-in: mood rating → stress/energy sliders → habit buttons → AI-generated journal prompt
- Chat with the AI companion — it already knows Ethan's full context
Demo Clients
| ID | Name | Profile |
|---|---|---|
| client-001 | Ethan Rhodes ⭐ | CS junior, academic burnout, imposter syndrome |
| client-002 | Jordan Reid | Depression, GRAPES framework |
| client-003 | Sam Tran | PTSD stabilization, grounding focus |
| client-004 | Maya Krishnamurthy | College anxiety/depression, biweekly sessions |
| client-005 | Alex Morales | GAD, workplace performance anxiety |
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router v6, Recharts |
| Backend | FastAPI (Python 3.12), Uvicorn |
| AI | Claude claude-sonnet-4-6 (Anthropic) — streaming SSE |
| Sentiment analysis | TextBlob |
| Storage | Redis (async via redis.asyncio) — no SQL |
| Containerization | Docker Compose |
Safety Protocol
The AI companion has a hardcoded safety guardrail that activates on any language related to suicidal ideation, self-harm, or intent to harm others — whether direct, hypothetical, or through metaphor:
- Stays present and warm — never ends the conversation
- Explicitly discloses it is an AI, not a human
- Provides crisis resources immediately: 988 Lifeline and Crisis Text Line (HOME to 741741)
- Offers grounding (5-4-3-2-1 senses, box breathing)
- Stays in conversation and asks grounding follow-up questions
This is an absolute constraint in the system prompt — it cannot be overridden by user messages.
API Reference
POST /checkin/ Submit a check-in (runs TextBlob sentiment)
GET /checkin/recent/{id} Fetch last N check-ins for a client
POST /checkin/journal-prompt Generate AI journaling prompt from mood + context
POST /chat/start Create a new conversation
POST /chat/message Streaming SSE chat response
GET /chat/history/{conv_id} Full conversation history
GET /chat/summary/{conv_id} AI-generated therapist summary
POST /therapist/context Create or update therapist client context
GET /therapist/context/{id} Fetch therapist context
GET /therapist/dashboard/{id} Full dashboard: mood trend + check-ins + summaries
Project Structure
BridgeNote/
├── backend/
│ ├── main.py FastAPI app entry point + CORS
│ ├── seed_demo.py Seeds 5 demo clients into Redis
│ ├── services/
│ │ ├── claude_client.py System prompt builder, streaming, safety protocol
│ │ └── redis_client.py All Redis reads/writes
│ └── routers/
│ ├── chat.py Streaming SSE chat endpoint
│ ├── checkin.py Check-in submission + journal prompt
│ └── therapist.py Dashboard aggregation + context CRUD
├── frontend/
│ └── src/
│ ├── components/
│ │ ├── Chat/ Streaming chat UI
│ │ ├── CheckIn/ 3-step check-in form
│ │ └── TherapistDashboard/ Recharts mood trends, summaries
│ └── hooks/
│ └── useChat.js SSE streaming hook
└── docker-compose.yml
Notes for Reviewers
- No auth system — client/therapist IDs are hardcoded (
client-001/therapist-001) for hackathon scope - Redis is not persisted between restarts unless configured — run
seed_demo.pyagain if data disappears npm install --legacy-peer-depsis required due to an ajv@8 peer dependency conflict with react-scripts 5- The
/chat/messageendpoint returnstext/event-stream; the frontend proxy inpackage.jsonforwards tolocalhost:8000
Built in 48 hours. Mental health tooling deserves better infrastructure.
Analysis
View
Metric
- 16
- 15
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- FastAPIIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- RedisIn code
- DockerClaimed
8 of 9 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig · Commits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
156 KB
Source files
30
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
crystallamar/BridgeNote
37 files · 807 KB · @ 870546b
Structure
Interface
8 files · 22%Screens, components and styles rendered to the user.
Application logic
15 files · 41%Domain rules, services and shared utilities.
Data & schema
2 files · 5%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript39%
- Python35%
- CSS17%
- Markdown9%
- YAML0%
- HTML0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
backend/requirements.txt
pypi · 9- anthropic
- fastapi
- httpx
- pydantic
- python-dotenv
- python-multipart
- redis
- textblob
- uvicorn[standard]
frontend/package.json
npm · 6- ajv
- react
- react-dom
- react-router-dom
- react-scripts
- recharts
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.