Inspiration

A 42-year-old walks into a clinic with rectal bleeding and walks out with "probably hemorrhoids." Three years later, it's stage IV colon cancer

What it does

Meridian catches the patient everyone will miss: the young adult with rectal bleeding written off as hemorrhoids, even when early-onset colon cancer is increasing 3% a year in young people. Meridian turns a scanned referral or a phone call into a booked colonoscopy with prior authorization handled immediately, and it doesn’t overshoot itself by diagnosing patient symptoms. We built a trustworthy design where the model turns faxed referrals into structured facts; There’s a versioned, unit-tested rule engine that determines whether a case is urgent. Every verdict points at a line of config with a citation, not a prompt, and so a clinician can audit it, replay it, and never wonder if the model made something up.

How we built it

We built Meridian around one rule we never broke: the model reads patient info, but never diagnoses. A scanned referral comes in as a PDF, gets OCR'd, and Fireworks turns it into structured facts like age, bleeding, duration, and weight loss, and nothing more than that. A versioned, unit-tested rule engine with zero model calls takes those facts and sets the urgency, running ten rules whose thresholds we measured against 2,093 real patient information from CAPER and NICE NG12, and we cite those thresholds right In the UI for clinicians' reference. Every verdict carries its own rule version and the exact list of rules that fired, and so the whole chain is auditable and replayable. We wrapped all of it in hard invariants that fail the build if they're violated: urgency can only ever go up and never down, a fail-closed filter blocks any diagnostic language before it reaches a patient or a Slack channel, and any timeout or uncertain extraction routes to a human instead of a guess. We parse every untrusted fax inside an internet-blocked Daytona sandbox that we destroy after each use, ElevenLabs handles both phone legs, and Braintrust traces every live decision and holds our evals.

Challenges we ran into

The hard part was never the model. It was everything that happens when the patient input is garbage, the extraction is uncertain, or a service times out, and making all of that into fail safe product took more work than the option where patient input is clean. Our most annoying painpoint was calendar booking on Slack. We tried to route it through Slack's Workflow Builder and lost real time before we realized the Google Calendar connector simply cannot run from a webhook, and so we chose to build a standalone .ics generator instead, which ended up cleaner anyway. The challenge we're proudest of is one we caught in ourselves. Late in the build we red-teamed our own CopilotKit copilot, and it produced a differential, then we gated it behind a fail-closed flag.

Accomplishments that we're proud of

We're proud of the scoreboard, because it's real. We have 100% escalation recall, no false reassurance, no diagnostic language, our work is backed by 108 passing tests and a live evals dashboard. We're proud that when a clinician disputes a verdict, Meridian can point at a line of config with a citation instead of disregarding the verdict. We're proud that we chose our extraction model with a measured A/B on verdict preservation and logged in Braintrust. And honestly, we're proudest of the moment we found our own copilot slipping and turned it off, because choosing safety over a flashier demo is exactly the discipline this problem asks for.

What we learned

We learned that in anything touching patient care, the interesting software engineering is never the model, and it's always the failure that leads to bad patient care. We learned to be deeply suspicious of letting a model make a decision a plain rule can make instead, because a rule is testable and can't hallucinate a threshold. We learned that fail-closed has to mean us too, and so our own copilot got held to the same bar as everything else. And we learned that the boring, replayable, cited path isn't a compromise you make for a demo, but the best version that only true clinicians would ever trust.

What's next for Meridian

Three things. First, the escalation loop: a nurse can already send a case back for review, but the review queue itself is still a stub, and so we want to build the destination so escalations actually land somewhere where a human can continue their revisions. Second, real calendar and records integration, because the .ics path proves the booking works, and a Google Calendar service account or a FHIR write would put the event on the provider's calendar automatically and hand back an ID for the audit trail later on. Third, widening the rule set beyond lower-GI with clinician review, and re-enabling the copilot only once it clears the same red-team bar we hold everything else to. The north star doesn't move: we simply don't diagnose, and we make sure the right people get scoped as fast as we can.

Built With

Share this project:

Updates