Inspiration

Most surgical wound infections show up after the patient has gone home. A systematic review of 1,432,293 operations across 55 studies found that 60.1% of surgical site infections appeared after discharge (Woelber et al., Surgical Infections, 2016). In England, UKHSA surveillance for April 2024 to March 2025 puts the median time to infection at 9 days without an implant and 19 days with one, well after a stay of a day or two. The follow-up questionnaire goes out about a month after the operation, and only 44.5% of operations got a completed one.

The cost is readmission and, sometimes, death. Across 498,875 operations at 346 US hospitals, infection was the most common reason for unplanned readmission, at 19.5% of readmissions (Merkow et al., JAMA, 2015). A SHEA/IDSA/APIC compendium reports that patients with a surgical site infection have a 2 to 11 times higher risk of death.

It also reaches court. In Haywood v University Hospitals of North Midlands NHS Trust [2017] EWHC 335 (QB), a woman was discharged two days after an emergency caesarean despite earlier signs, a deep wound infection developed at home, and she had a stroke 14 days after discharge. The judge found that no reasonable body of doctors would have discharged her without further tests.

I wanted to build the check-in that is missing in the days between discharge and that questionnaire: something that belongs to the patient, compares today with their own wound, and says when to call.

What it does

Day 14 is a post-operation recovery check-in. The patient enters what operation they had, how many days ago, how the wound looked when they left hospital, their pain from 0 to 10, their temperature, the colour of any discharge, and any of four warning signs (bad smell, spreading redness, edges apart, feeling very unwell). Then they pick a photo of the wound.

The result is one of four answers: no change from your baseline, watch closely, call your surgical team today, or go to A&E now. Under the answer the page shows what to do in plain steps, every sign it checked marked as concern or no concern, the wound photo cropped and credited, a message for the surgical team written in the patient's voice with a copy button, and a "what Day 14 did" log of the steps behind the answer.

Five worked check-ins are on the front page: port sites at day 10, an abdominal incision at day 4, a bypass leg wound at day 6, a calm-looking photo with a patient who feels worse, and a groin incision at day 30. Together they cover all four outcomes.

How I built it

The backend is FastAPI. The frontend is a serif, parchment-and-ink light interface, with top navigation and a decision chip that carries an icon and words, not colour alone. Every model call goes through Nebius Token Factory.

The decision is a ladder, and each rung has one job:

  1. Qwen/Qwen3.8-27B reads the wound photo. No NVIDIA model reads images on Nebius Token Factory, so a vision model does it. It only describes the wound in words and never decides anything.
  2. A written-warning-sign floor sets a minimum level. Fever of 38 C or more, spreading redness, edges apart, bad smell and feeling very unwell are rules in code. They set the lowest level the answer can have, so the model cannot talk its way below them.
  3. Nemotron 3 Super decides. It compares today's answers and the photo description with the patient's baseline and returns the decision, the signs checked, the steps and the message to the surgical team. If the photo looks calm but the patient reports warning signs, the symptoms win.
  4. Nemotron 3 Ultra double-checks any "call today" or "emergency". It can raise the level and can never lower it.

Photos are saved per image after the first reading, and the worked examples are pre-computed, so opening one costs no tokens. "Run it live" on a result calls the models again, and a changed form always runs live.

What makes it agentic

Perception Decision Action
The photo shows redness past the incision; the patient reports no fever warn, but not alarm Super returns "call today" with the redness as the concern, and Ultra reviews the alarm
The photo looks calm; the patient reports fever and a bad smell do not trust the photo the warning-sign floor and the symptoms-win rule raise the level; the log records the disagreement
A written sign sets the floor at "call today" and Super answers lower the model went under the floor the floor stands; Super cannot go below it
Super says "call today" or "emergency" a false alarm sends someone to the ED for nothing Ultra double-checks, and can only escalate

A fixed pipeline would read the photo and print a label. Here the photo is one input among several, and the agent weighs it against the patient's own baseline and what they say they feel.

Accomplishments

  • The ladder behaves as designed on the five worked check-ins, with all four outcomes appearing: no change (1), watch closely (1), call today (2) and go to A&E now (1). Ultra double-checked all three escalations and agreed with each.
  • The wound photos are real, cropped clinical images from SurgWound (Ohio State, CC BY-SA 4.0), the Kaggle post-op set (CC BY 4.0) and PMC case reports (CC BY), each credited under the photo. None shows a face.
  • It informs and does not diagnose. It never says there is no infection; the best it says is "no change from your baseline".
  • It is honest about its limits on screen: the photos I could secure show mostly light skin, and the published work I read reports that redness and wound separation are harder to read on darker skin. Day 14 says so.
  • Uploads are off, on purpose. The demo uses a fixed set of photos so nobody's own wound picture is sent anywhere.

What's next

  • A dated daily series for one patient, so the baseline moves day to day instead of staying at discharge.
  • Run the pipeline on the SurgWound test split and publish the agreement with the Ohio State surgeons' urgency labels, with the misses listed, before anyone relies on it.
  • Messaging channels (Telegram, WhatsApp, SMS) so the check-in comes to the patient.
  • Photos from more skin tones, once an open set exists.

Built With

  • fastapi
  • nebius-token-factory
  • nvidia-nemotron-(ultra
  • python
  • qwen3.8-27b
  • react
  • super)
Share this project:

Updates

Submission history