Inspiration

This was my first solo hackathon project, and I wanted to build something that dealt with real, messy data instead of a clean toy dataset. Health metrics (like lab panels, Apple Watch numbers, and wearable exports) usually just get dumped on people as raw numbers with no context. I wanted to see if I could build an agent pipeline that reads that data the way a clinician would: catch what's off and explain what it means, in plain English. I also wanted to push past the "one patient" case and see if the same tool could handle a whole population's data, since that's a much harder problem statistically.

What it does

You upload a CSV of health data, and PulseAI runs it through an agent pipeline that outputs a plain-English brief. A routing agent first checks whether the data is for one patient or a group, then picks the right pipeline:

Individual mode checks 20 biomarkers (including Apple Watch metrics) against sex-stratified clinical reference ranges, flags what's low, normal, or high, and writes a brief addressed directly to the patient.

Group mode has a hypothesis agent look at the population and propose statistically testable hypotheses. It then runs t-tests, ANOVA, Pearson correlation, and chi-squared tests with effect sizes to check them, clusters patients into low/moderate/high risk with K-Means, and surfaces demographic health disparities. It writes up a narrative summary of what it found.

The app is built in Streamlit with Plotly charts, so you can actually explore the output instead of just reading a paragraph.

How we built it

I built this alone, so I was doing every layer myself: agent logic, statistics, frontend, reference data. I used Google Gemini 2.5 Flash for the reasoning: one call for routing and hypothesis generation, another for turning statistical output into readable text. SciPy runs the hypothesis tests (t-test, ANOVA, Pearson r, chi-squared), scikit-learn handles the clustering (K-Means, PCA, silhouette scoring), and pandas/NumPy do the data wrangling. I picked Streamlit for the frontend because it let me move fast without splitting my time between a backend and a separate UI, and used Plotly for the charts.

Challenges we ran into

Working alone meant every bug was mine to find, from the routing logic down to reference-range edge cases. Getting the routing agent to reliably tell a single patient's row apart from a group dataset, across different CSV shapes, took a lot of trial and error. Building sex-stratified reference ranges by hand took longer than I expected, since a surprising number of biomarkers have genuinely different normal ranges by sex, and I had to look each one up. On the group side, I had to put real constraints on what the hypothesis agent could propose, or it would generate hypotheses that sounded reasonable but weren't actually testable with the data on hand. Turning p-values, effect sizes, and cluster labels into something a non-technical person could read, without losing the substance, took a lot of rewriting of the narrative agent's prompt.

Accomplishments that we're proud of

I shipped a full multi-agent pipeline solo, from data ingestion through statistical testing to a written brief, and deployed it as a live app. I'm proud that group mode does real analysis instead of eyeballing averages, creating actual hypothesis tests with effect sizes, and automatically surfacing demographic disparities, which is normally work for an analyst, not a single person on a deadline.

What we learned

I learned to work solo and split a big, vague goal ("give people insight into their health data") into narrow agent jobs like routing, hypothesis generation, and narration instead of asking one model to do everything at once. I also got a better feel for where an LLM should explain a finding versus where classical statistics should generate it, which matters to me given my interest in explainable AI. And building this solo meant making every decision end to end, from the data layer to the UI, with no one else to check in with.

What's next for PulseAI

  • More data sources beyond CSV, like EHR exports or wearable APIs
  • Longitudinal tracking, so people can see trends instead of one snapshot
  • More biomarkers and condition-specific reference ranges
  • Deeper explainability into why the model flagged something
  • User accounts, so people can build a running history instead of one-off uploads

Built With

Share this project:

Updates

Submission history