The Problem
Everyone's guessing.
Sensitive people — those dealing with histamine intolerance, MCAS, eczema, IBS, anxiety, chronic fatigue, or general reactivity — live in a constant guessing game. A symptom appears and they try to mentally trace back 24–48 hours of inputs: what they ate, what they put on their skin, what they were exposed to.
Memory is unreliable, the lag between cause and effect varies by reaction type, and multiple inputs interact in ways that aren't obvious in the moment.
Existing tools don't solve this. Food diaries, symptom trackers, and skincare logs are all siloed. None of them connect inputs to outputs across categories, and none surface patterns over time.
The Idea
One log. Everything in it.
WholisticHuman captures both inputs — food, drinks, supplements, medications, topicals, environmental exposures — and outputs — mood, energy, skin state, congestion, pain, digestion — in one unified timeline.
The value isn't in the logging. It's in what the data eventually reveals.
Who It's For
The person who suspects something.
Someone who believes that things they consume, apply, or encounter are affecting how they feel — but can't reliably identify what, when, or why. They may or may not have a formal diagnosis. They are motivated to track but have likely tried other apps and quit due to friction or lack of insight.
Design Principles
How it has to feel.
Low friction above everything
If logging takes more than 30 seconds, the habit breaks. Quick-add, severity sliders, and voice input all serve this.
Inputs and outputs are distinct
Outputs are what you're trying to explain. Inputs are the candidates. Structural separation makes correlation possible.
Honest about limitations
The app surfaces hypotheses, not diagnoses. "X appeared before your worst days" is useful. Claiming causation is not.
Personal first
Built for one real user. Data model is solid from day one, but UX complexity is deferred until the habit is validated.
Core Features — V1
What ships first.
-
Voice Logging
Speak a log entry naturally. Claude parses it into structured data. User confirms before saving.
-
Quick-Add
Personal item library built over time. Frequent items surface for one-tap entry.
-
Unified Timeline
All entries chronological, with inputs and outputs visually distinct from each other.
-
Library
Add, edit, and categorize personal items: food, drink, supplement, medication, topical, environment.
-
Basic Insights
Symptom heatmap by day. A foundation for the correlation engine to come.
-
Time-Aware Voice
Voice entries support retroactive logging — "breakfast earlier" or "dinner yesterday" are parsed into inferred timestamps relative to now. Low-confidence times are flagged for user confirmation before saving. Inferred timestamps are visually marked in the timeline.
-
Ambient Environment
Daily pollen and air quality data auto-pulled by location (Open-Meteo pollen API + AirNow AQI — both free, no key required). Appears as a passive context card at the top of each day's timeline. Not manually logged — always there. Stored in the data model for future correlation use.
Out of Scope — V1
Intentionally deferred.
Kept out to keep V1 buildable and the habit testable before adding complexity.
Correlation engine
Pattern summaries
Push notifications
Data export
Multi-user support
Elimination diet mode
Histamine load scoring
Tech Stack
How it's built.
React + Vite
PWA — home screen app on iPhone via Safari
Tailwind + shadcn
Component library and styling
Supabase
Persistent data storage, free tier
Claude API
Voice transcript parsing into structured entries
Web Speech API
In-browser voice capture, no third-party cost
Open-Meteo
Free pollen API — grass, birch, ragweed, oak and more by lat/lng
AirNow API
Free EPA-backed AQI feed — PM2.5, ozone, pollutant breakdown
Vercel
Hosting and deployment
Next Steps
What happens from here.
- Create Supabase project and define database schema
- Write Cursor build prompt from this spec
- Build and deploy V1 to Vercel
- Hand to real user — observe logging behavior for 30 days
- Evaluate whether correlations surface anything meaningful before scoping V2