Skip to main content

Product

Healthcare software, designed and built by the same team.

Meridian is invented, so we can show it. Client work stays under NDA.

Designed in the file. Built in the codebase.

The same team does both, so there is no handoff for decisions to fall through. Every screen on this page is real React, the components a production build would use. Change the row below and watch the code change with it.

Status
schedule.tsxvisit-row.tsx
<VisitRow
  time="09:20"
  patient="Priya Raghunathan"
  clinician="Dr. Okonjo"
  room="3B"
  status="waiting"
  restricted={false}
/>

// visit-row.tsx
export function VisitRow({ restricted, status, ...visit }: VisitRowProps) {
  if (restricted) return <RestrictedRow clinician={visit.clinician} />;
  return (
    <Row>
      <Time>{visit.time}</Time>
      <Patient truncate>{visit.patient}</Patient>
      <StatusPill status={status} />
    </Row>
  );
}

Every state, not just the happy path

Six states of one screen. A production build of this has closer to thirty, and every one is a decision somebody makes, in the design file or at 2am in the codebase. We make them in both.

  • The happy path

    Full schedule, everything loaded, every name a comfortable length. This is the state that gets designed, presented, and signed off.

  • Loading

    The record system answers in about a second on a good day. Something has to hold the layout for that second, and it should be the shape of what is coming, not a spinner in the middle of an empty page.

  • Nothing here yet

    The first screen a new customer ever sees, and usually the last one anybody designs. It should say what goes here and how to put something in it.

  • It broke

    The upstream call failed. The screen has to say what broke, what it means for the person reading it, and what to do next. And it has to do that without losing the work already on screen.

  • Not yours to see

    Not everyone on a floor may read every record. Permission is not an error, so it cannot look like one: the row stays, the identifying detail does not.

  • Real data

    Real names are long, real lists do not stop at six, and real clinics run past the bottom of the screen. A layout that only holds at three short rows is a layout that has never been used.

What we build

From the first screen to the API behind it.

Built with

  • Next.js
  • React
  • TypeScript
  • React Native
  • Expo
  • APIs & backends

Easy. Fast. Quality.Pick Three.

Tell us what you’re building and we’ll help you make it real.