Multi-signal health intelligence — woven from your biometrics by AI.
VitalWeave is a Streamlit app that takes your wearable data (Luna Ring / NoiseFit), mood logs, food diary, and blood reports, then uses Claude to find cross-signal patterns, forecast health risks, and answer natural-language questions about your data.
| Tab | What you get |
|---|---|
| 💍 Luna Signals | HRV, sleep score, readiness, SpO₂, skin temp — charted across every day |
| 🧬 The Tapestry | Multi-signal timeline chart with HRV reference lines calibrated to your age/sex |
| 🔗 Correlations | AI-detected cross-signal patterns (e.g. "low HRV → worse mood next day") |
| 📈 Risk Forecasts | 30/90/180-day risk cards with one concrete action per domain |
| 🧬 Health Master | Personalised deficiency risks, biomarker targets, cycle guide (female), test recs |
| 💬 Ask VitalWeave | Chat with Claude about your data — ask anything, get answers grounded in real values |
git clone <repo-url>
cd vitalweave
pip install -r requirements.txtCreate a .env file in the vitalweave/ directory:
ANTHROPIC_API_KEY=sk-ant-...
Pre-builds 4 realistic demo sessions (19M / 24F / 35M / 45F) with full analysis — so you can demo without waiting for Claude to run:
python create_demo_sessions.pystreamlit run app.pyClick any session in the Sessions dropdown in the sidebar and hit ▶ Load. Full analysis loads in under a second.
Use the 💍 Load Luna Demo Data button in the sidebar, or upload your own NoiseFit .json export.
| Signal | Format |
|---|---|
| Sleep | .json or .csv |
| Mood | .csv (date + mood_score columns) |
| Food | .json (date + nutrient fields) |
| Blood report | .txt or .pdf |
- Load at least sleep + mood data
- Set your health profile (age + biological sex) in the sidebar — this calibrates every chart and Claude prompt to you specifically
- Click 🧬 Weave My Health Story — takes ~15–30 seconds (uses Claude Haiku)
- Session auto-saves after every weave run
vitalweave/
├── app.py # Streamlit UI — all tabs, sidebar, session state
├── weave_engine.py # Claude API — main health analysis (JSON schema)
├── chat_engine.py # Claude API — streaming chat with full data context
├── visualiser.py # Plotly charts — tapestry, correlation cards, risk gauges
├── profile_engine.py # Static health knowledge — deficiency risks, HRV targets, biomarker ranges
├── data_parser.py # File parsers — Luna Ring JSON, CSV, PDF blood reports
├── session_store.py # Local JSON session persistence (save/load/delete)
├── ethics.py # Ethics panel + doctor PDF export
├── create_demo_sessions.py # One-time script to pre-build 4 demo sessions
├── sample_data/ # Sample files for instant demo loading
└── sessions/ # Auto-created — saved session JSON files
| Profile | Pattern baked in |
|---|---|
| 19M | Exam week stress (days 9–13, 23–27) — HRV crashes, sleep collapses |
| 24F | 28-day menstrual cycle — skin temp +0.45°C luteal, HRV dips in follicular |
| 35M | Work-week HRV cycle — gradual burnout trend across 30 days |
| 45F | Perimenopause — hot flash nights (8 days), HRV 14–40ms, temp spikes >0.9°C |
| Variable | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY |
Yes | Your Anthropic API key |
- Frontend — Streamlit 1.32+, Plotly, custom CSS (Inter + IBM Plex Mono)
- AI — Anthropic Claude (
claude-haiku-4-5for analysis,claude-sonnet-4-6for chat) - Storage — Local JSON files in
sessions/(zero external dependencies) - PDF export — ReportLab + PyMuPDF