Skip to content

Nova

A diabetes companion you can text or call.

  • Next.js
  • React
  • Anthropic API
  • Hume AI
  • Vercel AI SDK
  • PostgreSQL
  • Drizzle ORM
  • Tailwind CSS

You can do everything right with diabetes and still see a high number at 3 a.m. Nova is for that moment. It's a web app you can text or call, and we built it for MUN Health between December 2024 and April 2025, for a study.

Before Nova says a word, it checks that it should be talking to you at all. Then it answers the feeling before the number.

The real call screen, with an invented line and a synthetic voice

Built on a chat template

We started from Vercel's open-source AI chatbot template. Streaming, history and sign-in worked on day one, so our time went into how Nova talks. The welcome screen says who it's for, starting with someone who needs "someone to talk to at 3 AM".

Nova's welcome screen on a phone. It shows three round icons, the heading Meet Nova, Your Wellness Companion, and two paragraphs. The second paragraph starts with Whether you need someone to talk to at 3 AM.
That 3 AM line was there on the first day

It went by Echo, then Bouy, then Echo again, before it became Nova in February. The heart favicon outlived three of the names.

How Nova answers

Nova writes at a 6th-grade reading level, so you can follow it half asleep. It asks more than it tells, in the style of motivational interviewing, a counseling method built on questions. It's warm, but it isn't your doctor.

A reply at 3 a.m. accepts the feeling first.1 Then it reframes the number ("one high number is one moment"), gives you one small thing to do tonight and points you back to your care team. On the next turn, it doesn't open with "that sounds frustrating" again. Hearing the same sympathy every turn reads like a form letter.

Some limits have no exceptions. Nova never gives medical advice or recommends medication, and it always says it doesn't replace a care team. If someone expresses thoughts of self-harm or severe distress, the reply gives crisis hotline information and tells them to contact emergency services right away. The model is Claude 3.5 Sonnet.

Who Nova turns away

Nova sends some people away before they ever reach the chat. In March, we rebuilt the way in for the study. Before you can talk to Nova, it asks whether any of five statements apply to you.

The Welcome to Nova screen. It asks: Before we proceed, do any of these statements apply to you? Five bullets list a medical or psychiatric emergency, diabetes as a secondary condition, being or planning to become pregnant, being under 18, and using the app for a child. Two buttons follow: At least one statement applies to me, and The statements do not apply to me.

If any of them apply, Nova doesn't open. The five describe the people Nova is not suited for. Nova is awake at 3 a.m., so getting this wrong means a chatbot is the first thing someone in an emergency talks to. So the exit page leads with the emergency number.

The exit screen, cropped. The heading reads If you are experiencing a medical or psychiatric emergency, please call 911! Below it are the buttons Back to Assessments and Logout.
The most important screen in the app is the one that says no.

Every page load checks three things in order. Are you signed in? Did you answer the statements in the last seven days? Have you done the intake? Miss one and you're sent to it.

That costs every user one screen a week. In return, the answer Nova relies on is never more than a week old, because a statement that was false in January can be true in March. The order matters too. Nobody types in their age or ZIP code before we know Nova is right for them, and someone who's been turned away stays on the exit page instead of being sent back around.

Questions you can tap

Under each reply are two follow-up questions you can tap. At 3 a.m., you shouldn't have to type.

The end of a reply that ends with the disclaimer. Under the label Suggested questions are two chips: Can you help me write down questions for my appointment? and What can I do when my mind keeps racing at night? Below them are the message box and its footnote.

At first, the model wrote them into the reply between [sug] markers, and a regex pulled them out. That meant the model had to get the markers right every time, while the reply was still streaming.

So the follow-ups became a tool call with one field, a list of questions, and the chips render straight from it. The questions are in your voice, because tapping a chip says it for you. A chip that says "how are you feeling?" would be Nova talking to itself.

Documents work the same way. Ask Nova to help you write down questions for your next appointment, and a panel opens beside the chat that you can download as a PDF, a Word file or a spreadsheet.

A document panel titled Questions for my appointment. A Download menu is open with PDF, DOCX and Excel. Below it are the heading How I've been feeling and two numbered questions.

The chat model gets back one line, "A document was created and is now visible to the user", so it has nothing to repeat. And Nova only makes a document when you ask for one. In a support chat, a document nobody asked for is the wrong move. Even the tool name says so: updateDocumentAfterUserRequest.

Talking instead of typing

The mic button records your voice and turns it into words in the text box. You can fix them before you send, so the model never gets anything you didn't see first.

The other way is a live call, on Hume. Hume runs the whole spoken conversation, and it scores emotion from how you said something, as well as what you said. A plain text-to-speech service never hears you at all, and Nova's job is to answer the feeling.

The browser never holds Nova's own credentials. For a call, the server fetches a short-lived token and hands only that over.

The listening bars

On a call, your words only appear after you finish saying them. While you talk, a row of bars is how Nova shows it's listening.

Each bar is the loudness of one pitch band of your voice, with the bands spaced the way the ear groups pitch. The loudness is squashed the way hearing is, so a quiet voice and a loud one both stay on the meter.2

There are 32 bars but only 24 bands, so the last eight bars show the first eight bands again. Go back to the recording at the top and you can see it. The bars on the far right move in step with the first eight.

Between appointments

The reel at the top tells the story Nova was built for. Ana, an invented person, sees a higher reading than she expected at 3 a.m. She talks to Nova, and the next morning is easier.

A pixel-art bedroom in morning light. Ana sits up in bed with a mug. A clock shows 7:30, and a chat bubble from Nova says Good morning, Ana! How are you feeling?

We gave up one screen a week to be sure who Nova was talking to. The rest went into listening, so Nova answers the feeling before the number and lets you reply in your own words.

  1. Every conversation on this page is invented, and no real participant appears on this page. ↩
  2. The meter uses Meyda's loudness feature, about 94 frames a second, each with 24 Bark bands. A band's value is its summed amplitude raised to the power 0.23, so 1,000 times the amplitude reads only 4.9 times higher. A bar is 32 × value ÷ 4 pixels tall, between 2 and 32. At 1.88 seconds into the recording, band 1 reads 1.87, so its bar is 15.0 px. ↩