It's our belief that the hardest part of healthcare is staying active and engaged. Normally, Americans have around 1-2 checkups with their doctors per year, and research estimates that many people drop healthy habits (8 hours of sleep, jogging) after just a few days. We have both experienced the deficits surrounding existing healthcare platforms. Gavin suffered from skin cancer, and hoped that he would have reminders to put on sunscreen every time he went outside if the UV index was above a certain amount. My grandparents suffer from high blood pressure, and I wish that they would have reminders to rest or take action every time that was the case. Current wearables can detect health trends, but none of them are aware of your schedule and life, and none of them can tell you straight via SMS what's wrong.
What it does
Pulse is a personal AI health agent that texts you first. You connect a wearable (Fitbit through the Google Health API, or in this case a simulated Apple Watch), your health record through FinchNode, and your Google Calendar. Pulse builds a digital twin from your record (conditions, medications, recent labs) and your own baseline, and uses it to set personal thresholds. Hypertension, for example, tightens the blood pressure alert to 130/80.
When your live vitals cross a threshold, Pulse texts you in imessage. If it suggests a change, like blocking tonight for sleep because your resting heart rate is up, you slept 5 hours, and there's a midterm tomorrow, nothing happens until you reply YES. Then the event lands in your google calendar.
There are also features for every alert: "Why Pulse alerted you". The dashboard contains today's numbers against your baseline, what changes there were compared to past trends, and other analytics packaged into a simple platform.
You can also generate a printable 1-page summary of conditions, medications, labs, and 30/90-day charts against normal range containing vitals and other alerts.
Daily, it also generates a 7 am briefing (or whenever you decide) read aloud by ElevenLabs, a 9pm evening check, and a daily planner that fits up to three focus areas into your free time.
The one agent is standardized everywhere. You can ask "How did I sleep?" in iMessage, on the web, or in ASI:One through our Fetch.ai agent.
How we built it
The data ingestion from Fitbit comes from the Google Health API through Oauth, including collection of heart rate, steps, sleep stages, etc... Health records come through FinchNode for sample patients for testing, and FinchNode Connect for a person's own record. Google Calendar is linked through the Google Calendar API via Oauth.
Live pool is SpacetimeDB, while the long-term data pool is Neon Postgres.
Digital twin is built on Python, as well as the rules engine, and all other general infrastructure.
Gemini writes the wording for the chat agent, and APScheduler is the tool used to connect to the scheduler.
iMessage is powered through a small Node and TypeScript gateway using Photon, and sends alerts out and streams replies back to the agent. The same agent runs as a Fetch.ai uAgent in Agentverse (ASI:One)
Voice for morning briefing is powered by ElevenLabs.
Next.js on Vercel
Challenges we ran into
Our first design looked too generic, so we rebuilt the design system on the Apple Health UI kit.
We found out that Photon's free shared line only works after the user texts first, and only as a blue iMessage, not SMS. Our first "nothing happens" but was a green bubble. Each tester also has to be registered and gets their own line.
Google OAuth "scope has changed" errors in production were fixed by requesting only the calendar scope on that client.
Vercel renders in UTC, so we fixed it by going through one time-zone-aware formatter.
We ran into a problem where alert cooldowns would be blocked for 24 hours during a demo rehearsal, so we built a "reset demo" control that clears cooldowns without deleting history.
Accomplishments that we're proud of
The full loop works on a real phone, including live vitals, an alert in iMessage, a texted yes, and a real google calendar event with confirmation.
We ran about 690 automated tests (501 agent, 180 web, 9 gateway) run in CI on every pull request. We also ran a 141-case live evaluation of Gemini to create boundaries for the agent in the conversation loop and perfected its responses.
And the fact that we were able to implement one agent across three channels: iMessage, web, and ASI:One
What we learned
We were able to learn a lot about the new tools provided by our sponsors. For example for SpacetimeDB, we had to figure out how to write a database module in TypeScript. Same for FinchNode, we had to determine how to manage signed webhooks, import, and handle revoke and delete requests correctly. This was the same across every other tool weused, including Neon, Photon, ElevenLabs, and Gemini.
We also significantly enhanced our skills in Next.js, TypeScript, Tailwind, Python, Vercel, and other tools needed for full-stack development, which was developed through the process of debugging.
What's next for Pulse
- Hopefully a dedicated iMessage number instead of the shared line currently used on Photon.
- Being able to test on a real Apple Watch through health Auto Export.
- Potential implementation of ML to learn rules from your own history and trends in your calendar that tend to reappear
- More conditions shaping thresholds, we can determine this by working with hospitals.
- Read-only sharing links for clinicians.
- Live deployment and hopefully traction with more users.
Built With
- asi:one
- elevenlabs
- fastapi
- fetch.ai
- figma
- finchnode
- fitbit
- gemini
- github-actions
- google-calendar
- google-health-api
- imessage
- neon
- next.js
- node.js
- oauth
- photon
- postgresql
- python
- railway
- react
- spacetimedb
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.