Inspiration
We visited a nursing home near Babson and talked with the staff. Many residents take a long list of medications, and the side effects overlap: dizziness, confusion, poor sleep, swelling. When a resident seems "off," it's hard to tell whether the cause is a new medicine, an interaction, or something else. Nurses are stretched thin, so these patterns often go unnoticed until a fall or a hospital visit.
The numbers are similar nationally. 43% of US adults over 65 take five or more prescription drugs, and fewer than half of older adults who fall tell their doctor. Families and care staff usually notice the change first ("she seems foggier since the new sleeping pill"). By the time of the appointment, though, it's a vague worry instead of a clear question. We wanted to turn those everyday observations into something a clinician can act on, without sending anyone's health data to the cloud.
What it does
Kinwise is a private, in-browser assistant for caregivers of older adults who take many medications. The patient checks in in her own words, such as "Felt woozy and nearly went over in the kitchen." Kinwise turns that into diary answers, highlights the words behind each one, and asks her to confirm every answer.
The caregiver then sees what changed around each medication change. In our demo, dizziness was recorded on 9 of 14 days after lorazepam started, compared with 2 of 19 days before. The app presents this as what was recorded, not as a claim about cause. Kinwise also reviews the medication list against the AGS Beers Criteria 2023, the anticholinergic burden scale, fall-risk drug lists, and prescribing cascades, where one drug's side effect leads to a second prescription. Every finding is framed as a question for the clinician, never an instruction. Before an appointment, the caregiver reviews and prints a one-page visit brief, which can also be exported in the HL7 FHIR R4 format that clinical record systems can import.
How we built it
Kinwise is built with React 19 and TypeScript and runs entirely in the browser with no backend. Our design rule was "rules decide, the model writes." At the core is a deterministic review engine that checks medications against a knowledge base we compiled with Python from sources including openFDA. It covers 427 medicines, 766 brand names, 89 Beers rules, and 26 prescribing cascades, each traceable to a source.
Timeline statistics (Fisher's exact and Mann–Whitney tests) compare symptoms before and after each medication change. Our clinical language processing understands negation and context, so "didn't fall" and "my sister was dizzy" aren't logged as the patient's symptoms. An optional AI model, Qwen2.5-3B, runs on the user's own GPU through WebLLM and only rewords evidence that has already been verified. A code-based checker removes any sentence with an unsupported number, an unknown medicine, or wording that implies cause or gives advice. We tested everything with Vitest, Playwright, and axe-core for accessibility.
Challenges we ran into
Our biggest challenge was keeping a small AI model honest. It sometimes said one drug "caused" a symptom or called something "safe," so we built checks that drop those sentences, and we accepted that a plain template is often the better output. False alarms were another problem. Comparing many symptoms across many medication changes produces signals that aren't real, so we measured how often that happens and show the rate in the app instead of hiding it.
Reading the medical criteria correctly also took care, because small misreadings change results. Oxybutynin, for example, matters through the anticholinergic rules rather than as a Beers "avoid" drug. Everyday language was hard too: phrases like "nearly fell," "no better," and "slept like a log" are difficult for software to interpret correctly.
Accomplishments that we're proud of
All 57 of our medication-review test cases pass, and we confirmed the tests fail when the underlying knowledge is removed, which shows they are actually checking something. Symptom extraction scored 0.942 (micro-F1) on 70 held-out patient stories that were never used during development. The project has over 1,200 passing automated tests, passed 20 of 20 end-to-end checks, and showed 0 accessibility violations across 46 scans. Our FHIR export passed a public validator with 0 errors.
What we learned
We learned how to work with the rules that govern medication safety for older adults, including the Beers Criteria, anticholinergic burden scores, and fall-risk drug lists, and how to pull drug data from openFDA. We also learned a lot about how medications work and interact with each other, especially how one drug's side effect can lead to a second prescription. On the technical side, we found that AI models are good at wording but unreliable at drug-safety judgments. Clear rules plus a verifier gave us something we could actually test.
What's next for Kinwise
Our next step is to pilot Kinwise in nursing homes and home health agencies to see whether catching medication-related problems earlier actually reduces hospitalizations. Before that, we plan to have geriatric pharmacists review the knowledge base and run a usability study with caregivers and nurses. After that, we want to add imports from pharmacies and patient portals, along with voice check-ins.
Built With
- indexeddb
- javascript
- localstorage
- medication-rules-engine
- node.js
- python
- react
- recharts
- typescript
- vite
- webgpu
- webllm
Log in or sign up for Devpost to join the conversation.