Inspiration
Here's how brain injury care works today. You get hit, you go to the ER, someone says "come back in a month," and then you spend that time on hopes on prayers...
About 69 million people sustain a TBI every year (Dewan et al., 2019). Most are mild. And the follow-up is the part nobody talks about. In the TRACK-TBI study (831 mild TBI patients, 11 trauma centers), only 44% saw any health professional within 3 months, and only 27% got a follow-up call from the hospital. 279 of those patients still had 3 or more moderate or severe symptoms at 3 months. About half of them never saw a doctor about it.
"But what about the scan?" Good question. In ALERT-TBI (1,959 mild TBI patients), only about 6% of head CTs showed anything. A CT hunts for bleeds. It's great at that. It just doesn't care whether you're recovering, because it was never built to. So the only thing left between visits is a symptom questionnaire, which is self-reported, subjective, and a favorite of athletes who really want to play on Saturday :)
So we built something that scientifically measures it instead...
What it does
Synapshot is a platform that turns a weekly 14-minute phone check-in into a living 3D brain simulation. Machine learning tracks the injury, predicts recovery, and shows which brain networks a medicine actually targets.
Pipeline (what goes in → what comes out):
Drop in the paperwork. Data in: about 10 clinical documents (PDFs, scans, notes: ED visit notes, imaging reports, blood biomarker labs like GFAP and UCH-L1, injury history, medications). Out: a structured patient record, where every field carries a source quote so you can see exactly where it came from.
We build the brain. Data in: the injury details from the record (mechanism, severity, biomarker levels) plus real brain data: HCP wiring and resting-state connectivity, Allen gene expression, and PET/SPECT receptor maps. Out: a patient-specific whole-brain model with a damage estimate for each of 100 regions.
We text the patient. Data in: the patient's consented phone number. Out: a real iMessage with a link that opens in the browser, no app to install, with an honest delivery status.
The patient does a 14-minute check-in on their own phone. Data in (measured on the phone):
- Eyes: gaze position from the iris and head pose, plus response timing against a full-screen flash.
- Speech: voice recordings, turned into transcript, jitter, shimmer, HNR and CPP.
- Memory: task answers, accuracy and reaction time.
- Face: facial landmark movement.
- Quality checks: face visible, frame rate, brightness, iris size. Out: a set of measurements per task.
The video never leaves the phone. Data sent: numbers only (the features above). Anything that fails a quality check gets deleted, not reported.
The brain moves. Data in: the new measurements. Out: updated injury parameters with uncertainty, a 12-week recovery forecast with bands, drift flags when reality leaves the band two weeks running, and a banner naming exactly which regions changed.
The clinician gets a draft briefing from three agents (triage, briefing, outreach). Data in: the flags, charts and timeline. Out: drafts. A human reviews them.
The workspace has the 3D brain in the middle, flags and key facts on the left, and four tabs on the right:
- Data: every signal, with uncertainty bands.
- Analysis: region by region, which parts of the cortex are off.
- Treatment: a pathway viewer showing where each medicine's targets actually sit in the brain.
- Timeline: every check-in, in order.
There's also a Baseline vs Latest toggle, so you can flip between the brain as first built and the brain after the latest check-in.
How we built it
The brain. A Schaefer-100 cortical parcellation with real MNI coordinates. Real diffusion (SC) and resting-state (FC) connectivity from the Human Connectome Project, through the ENIGMA toolbox. Allen Human Brain Atlas gene expression turned into an excitation/inhibition map. On top of that, a reduced Wong-Wang dynamic mean field model with analytic feedback inhibition, where we grid-fit the one global coupling parameter. The surface you see is fsaverage6 (81,924 vertices), colored per region.
The learning. An ensemble Kalman filter with 200 members updates the injury parameters after every check-in:
$$\theta_i \leftarrow \theta_i + K\,(y_{obs} + \epsilon - y_i)$$
where $\theta = (\log k,\ \text{logit}\,p,\ \text{damage scale})$ and $K$ is the Kalman gain. A NumPyro hierarchical population model (50 synthetic patients) gives every new patient a sensible starting prior. A 1-D emulator compresses the network response so the filter stays fast.
The phone. MediaPipe Face Landmarker runs in the browser through WASM for face and iris. A 9-point gaze calibration (degree-2 polynomial on iris ratios and head pose) maps eyes to screen position. Our favorite trick: a full-screen white flash per trial, detected in the phone's own camera stream. The stimulus and the response share one clock, so latency cancels out. faster-whisper handles speech locally, and Parselmouth extracts jitter, shimmer, HNR and CPP. Every measurement passes quality gates (face share, fps, brightness, iris size, flash test), and bad ones get deleted, not reported.
The medicine tab. Hansen et al. (2022) PET and SPECT receptor atlases, parcellated to the same 100 regions (12 maps, including 5-HTT, DAT, NET, NMDA, SV2A, GABA-A). It shows where a drug's targets are dense. It does not claim the drug will help.
The plumbing. FastAPI backend, React + TypeScript frontend, three.js for the brain, Gemini for extraction (constrained JSON decoding plus pydantic validation), CREAO agents for the care-team layer, and Photon Spectrum for iMessage. 250+ Python tests, 77 frontend tests, and a make check that has to pass before we trust ourselves.
Challenges we ran into
- The call erased our patient. We ran a check-in on our test patient and the brain definitely changed, but it threw away the original history, charts and flags. Great model update, terrible patient. The fix: baselines are immutable, every call appends a timepoint, and nothing earlier gets rewritten. It now has its own test suite.
- "Face model not added." Our camera check was cheerfully reporting that the face model was missing, which is a hard thing to build a face-tracking product on. Now the model and WASM files are served from our own origin, and it works over a public tunnel.
- Getting a text to a real phone. The cloud iMessage route said "Target not allowed." Then our tunnel got blocked by the network, and we moved to another one. We got the local iMessage path working in the end, and the app tells you honestly whether a message was actually delivered.
- The brain turned entirely red. Normalizing damage to the maximum made every region look catastrophic. We switched to fixed absolute color scales and perceptually uniform colormaps (Crameri et al., 2020).
- Making it honest costs time. Every number in the Evidence drawer has a source and a verification tag. Only 2 of 27 citations are marked "verified," and the drawer says so. It's not a flattering stat. It's a true one.
Accomplishments that we're proud of
- A complete loop that runs end to end: documents in, text out, phone measures, brain moves.
- The honesty layer. Quality gates delete bad data. The 3D brain carries a "model output, not a scan" label. The medicine tab never says "this will help."
- The numbers, including the unflattering ones:
- Model FC vs real HCP FC: r = 0.205, untuned beyond one parameter. Published whole-brain fits reach 0.3 to 0.5 with per-subject tuning, and we say so.
- Filter coverage at week 8: 0.78 (our target range is 0.65 to 0.90).
- Posterior contraction of $\log k$ at week 6: 0.331.
- Global coupling recovered to within 0.3% on synthetic data.
- Document extraction: 21 of 21 fields, 20 exact against the answer key.
- Most demos tell you what they can do. We wanted one that also tells you what it can't.
What we learned
- A scan and a recovery tracker answer different questions, and the second one is mostly missing.
- Building a model is the easy part. Building one that tells you when to distrust it is the real work.
- Cutting a measurement is the right call more often than you'd think.
localhostand "a real phone over a tunnel" are two different products.
What's next
What's true today: every patient is synthetic. Our timing numbers are validated against the generator, not against real phones at scale. And Synapshot is a research prototype. It never diagnoses, and it never gives return-to-play clearance.
What we'd do next:
- Run it on real devices, in a real clinic, with real consent, and compare the phone measures to clinical assessments.
- Tune per-subject, to close the gap between our FC fit and published results.
- Replace the schematic pathway tubes in the treatment tab with measured projection data.
- Get an actual clinician to tell us which flag they'd act on.
Brain injury recovery shouldn't be invisible between appointments. Right now it is. We're working on that.
Built With
- creao
- enigma-toolbox
- fastapi
- faster-whisper
- gemini
- imessage
- jax
- mediapipe
- neuromaps
- ngrok
- nilearn
- numpyro
- parselmouth
- photon
- pydantic
- python
- react
- react-three-fiber
- recharts
- tailwindcss
- three.js
- typescript
- vite
- webassembly
Log in or sign up for Devpost to join the conversation.