Inspiration
I kept noticing the same small lie in everyday life. Someone asks how you're doing, you feel rough, and you say "nah, just tired."
That shrug is everywhere, and it turns out to be expensive. Nearly half the UK public delayed or avoided contacting their GP about a health concern in the last year, often hoping the problem would simply pass. Meanwhile the tools meant to catch illness early, like the NHS Health Check, only screen things once they're already measurable: blood pressure, cholesterol, BMI. They miss the genuinely early window.
But that window is real. Fatigue is among the first signs of conditions from type 2 diabetes to depression. In one review, an identifiable early symptom appeared in 93% of people later diagnosed with depression. The signal arrives long before the diagnosis. We've just been trained to dismiss it, because it's vague, it's individual, and there's never been a cheap way to connect a cause on Monday to an effect on Wednesday.
I built Hunch to give those dismissed signals somewhere to go.
What it does
Hunch turns the offhand notes you already make into a picture of your own patterns over time.
You log the way you'd text a friend, by voice or text: "ate late, slept badly, groggy all morning." Hunch turns each note into typed, timestamped events across sleep, focus, energy and mood, places them on a timeline, and links outcomes back to the actions that came before them.
When you ask a question like "what tends to interrupt my sleep?", it walks backward from your bad nights to nearby behaviours and shows you a frequency-framed pattern, not a verdict:
"Disrupted sleep on 5 of 7 nights you logged screens after 11pm. A pattern worth noticing, not proof."
Only then, and only if you tap to see them, does it offer a few low-cost things to try, each drawn from a reputable UK source (NHS, Mind, Royal College of Psychiatrists, The Sleep Charity).
It is safe by design, and it says so out loud:
- Associations, not diagnoses. Everything is frequency-framed. Never "you have," never "Y causes X."
- User-initiated. Suggestions only appear after you ask for them.
- Grounded, not invented. Every suggestion shows its source.
- Honest about limits. A visible on-screen reminder: this surfaces patterns to discuss with a clinician. It is not a diagnostic tool.
How I built it
The core is a small typed graph. Natural-language logs go through an extraction step that turns messy text into typed, timestamped nodes (action vs outcome; food, sleep, cognition, mood). Those nodes sit on a temporal layer, so the system can retrieve an outcome and walk backward to the behaviours that preceded it. That backward walk is where the pattern-finding happens.
The health logic is all built for this: the typed schema, the temporal edges, the backward-walk reasoning, the frequency framing, and the user-initiated, source-grounded suggestion step. A few low-level helpers, like clustering near-identical phrases ("pasta" and "big pasta") into one thing, came from generic utilities I already had, treated as plumbing.
The web frontend and backend evolved together, with a deployed landing and about page on Vercel grounded in three UK-sourced research reports I produced with Manus, plus a React Native / Expo build of the core log-and-retrieve journey.
Challenges I ran into
The safety framing was a design constraint, not a feature. The hardest line to hold was surfacing something useful without ever tipping into diagnosis or causing anxiety. I solved it by making the product structurally incapable of overclaiming: it can only ever report frequencies from your own logged dates, and it never speaks first.
Frame broad, demo deep. Hunch is built to work across sleep, focus, energy and mood, but a demo that tries to show all four shows none of them well. I made a deliberate call to keep one hero journey, sleep, running cleanly end to end, and to frame the wider range in words rather than half-build four flows.
The mobile app drifted. The web frontend and backend grew together fast, and the React Native build fell behind. Bringing it back to a usable state under the deadline, even as a focused log-and-retrieval surface, meant cutting scope hard and protecting the one journey that mattered.
Saying it without scaring anyone. Writing copy that conveys "this compounds into serious conditions" while staying calm and non-alarmist took as many drafts as the code did.
Accomplishments that I'm proud of
- A working end-to-end hero journey: log in plain language, see typed nodes, ask a question, get a frequency-framed pattern backed by your own dates, and choose to see sourced suggestions.
- A safety model that isn't bolted on. Four properties, all visible in the product, that map directly to "appropriate and safe use of AI."
- A genuinely original primitive: a personal temporal graph that connects cause and effect across days, which is the cheap feedback loop people have never had.
- Three UK-sourced research reports underpinning every claim I make, so the pitch holds up if a judge clicks through.
- A live, polished landing page and a coherent product story, built and shipped solo inside 24 hours.
What I learned
- The bottleneck is earlier than seeing a GP. Before someone decides to seek help, they have to notice something is worth attention. That noticing step is where the earliest, cheapest prevention lives, and it's almost completely unsupported.
- Individuality is the whole point. The same meal, the same late night, affects two people differently. The science on personal glucose response and chronotype is clear. Generic advice can't catch a pattern that only exists in your data, which is exactly why a personal graph is worth building.
- Restraint is a feature. The instinct in a health tool is to say more. Almost every good decision I made was about saying less: fewer claims, no diagnoses, no unsolicited advice. The product is more trustworthy for it.
- One strong journey beats four half-built ones. Protecting the sleep path was the single best scoping decision I made.
Built With
- claudeapi
- exa
- expo.io
- go
- next.js
- openai
- pgvector
- postgresql
- react
- render
- typescript
- vector
- with-claude
Log in or sign up for Devpost to join the conversation.