MEDIQ
A hands-free clinical co-pilot prototype. Voice commands run only for a verified doctor, reports float and move under your hands, and AI-drafted visit notes can’t be saved until a clinician reviews the exact text.
2nd PlaceDigitalOcean (Hacktoberfest) × Google Developer Groups Hackathon, October 2026
- 2026
- Hackathon · Healthcare prototype
- Built with a team at Hack Day Guelph (Hacktoberfest × GDG on Campus).

The problem
Clinicians lose time to charting and to hunting through records, and in some settings they can’t touch a keyboard at all. An assistant that helps there has to be easy to drive by voice or gesture — and it must never be the one that decides what goes into a patient’s record.
My role
A team hackathon project. I built the clinical dashboard, the data layer — IndexedDB stores behind a validated repository, with the room and admission rules — and testing. Teammates built the voice, gesture and AI features.
How it works
- InputVoice, hands or typing
- VerifyOn-device speaker check
- RouteRule-based commands
- DraftSOAP note + safety audit
- ConfirmClinician reviews exact text
Everything runs in the browser except AI calls, which go through a small Node server that holds the keys. Voice, hands and AI can move around the app and prepare a draft, but every write — a note, an admission, a transfer — passes one confirmation dialog, and room rules are checked again inside the database transaction.
What it does
- Doctor-only voice
An on-device speaker-verification model (WeSpeaker ResNet34, ONNX in the browser) checks who is speaking before any command runs, and fails closed when nobody is enrolled.
- Deterministic commands
A rule-based router handles navigation and reports — “show me the patient report”, “close the report” — so no language model decides where you go.
- Touchless reports
MediaPipe hand tracking runs locally: point to aim, pinch to drag a report, pull two hands apart to resize, hold a fist to close.
- Drafts with a safety audit
A structured SOAP draft and an independent audit sit side by side. Local rules always run, so the whole workflow works with no API keys.

Decisions worth noting
- Nothing saves itself. Voice, gestures and AI can only navigate or prepare a draft. Saving goes through one dialog that shows the target, the source and the exact content, and needs an “I have reviewed this exact change” tick.
- Every result says where it came from. Outputs are tagged by source — model, local rule, record or simulation — so a warning from a local rule is never presented as an AI finding.
- Secrets stay on the server. Provider keys live only in a local Node process; a build step scans the browser bundle to confirm no key ships to the client.

In numbers
- 153tests
- Vitest unit and component tests
- 19tests
- Playwright, including real recorded speech
Limits, stated plainly
A hackathon prototype on synthetic data — not a medical device. Speaker verification has no anti-spoofing, browser storage isn’t tamper-proof, and real-room microphone and gesture behaviour still needs testing on real hardware.
Built with
- TypeScript
- React
- Vite
- Tailwind CSS
- Node.js / Express
- Zod
- IndexedDB
- onnxruntime-web
- MediaPipe
- Web Speech API
- Vitest
- Playwright