One of the problems that inspired Careousel was how difficult it can be to get an earlier medical appointment. Someone might need to see a specialist but find that the earliest appointment they can book is still months away. Looking for another option often means checking multiple clinic websites or calling different offices, with no guarantee of finding anything sooner. Meanwhile, patients sometimes cancel appointments at the last minute, leaving clinics with open time slots that other patients may never know about. We started wondering whether we could make better use of those openings while helping people who were still waiting.

That question led us to Careousel, a healthcare scheduling prototype that helps clinics fill canceled appointment slots by connecting them with eligible patients through a shared cross-clinic waitlist.

While cross-clinic waitlists were our main focus, we also wanted to make basic healthcare appointments easier to book. Someone who needs a vaccination or blood test may simply want to compare clinics in selected locations, explore simulated insurance compatibility, and find an available time. We built a search and booking interface to bring these options together, including available appointment times and estimated costs. If they cannot find a suitable opening, they can also join a waitlist.

For patients waiting to see a specialist, finding an earlier appointment can be especially important. They might already have a confirmed appointment at another hospital and want to look for something sooner without losing the date they have secured. Careousel allows patients to record outside appointments as unverified, patient-reported information, manage different medical needs independently, and join cross-clinic waitlists based on their preferences. Patients who do not have an appointment yet can also join. When a suitable opening becomes available and clinic staff approve the invitation, eligible patients can receive an in-app notification and decide whether to accept it. For a linked appointment booked within Careousel, the original remains confirmed until the replacement is successfully booked. Patients remain responsible for managing appointments made outside the platform, which Careousel cannot verify or cancel.

For this waitlist system to work, clinics also need a way to identify suitable patients when an appointment becomes available. The shared waitlist can include eligible patients across participating clinics, regardless of where they originally booked. Authorized clinic staff can review requests, assign P1–P4 priority levels using available clinician-approved information where applicable, select eligible recipients, and authorize grouped appointment notifications. A background scheduler can then send in-app invitations according to the approved sequence, while staff remain responsible for priority decisions. Once a patient successfully confirms the opening, the system stops future group invitations for that slot. This connects the patient’s search for earlier care with the clinic’s need to fill otherwise unused appointment slots.

We built Careousel using Next.js, React, TypeScript, PostgreSQL, and Prisma. Since our project has both patient and clinic workflows, one of our main goals was to make sure that actions on one side were reflected correctly on the other. We also added a demo quick-login feature and persona switching, making it easier to demonstrate the same scheduling workflow from both the patient and clinic perspectives.

Getting those workflows to work together was more challenging than we expected. We had to consider what would happen if two patients tried to book the same appointment, how to protect an existing booking when someone accepts an earlier invitation, and how to prevent unauthorized access and conflicting changes to shared data. During early development, we discovered that entering the demo could reset shared demo data. We changed the entry flow so that logging in or switching personas preserves existing information. Addressing these problems meant paying much more attention to database transactions, user sessions, access controls, and automated testing. We also learned that changes to one interface could affect several other parts of the application, especially as we continued adding features.

Building a healthcare-related platform also helped us understand how complicated appointment eligibility can be. Finding an open time is only part of the process; insurance compatibility, referral requirements, and clinical review can also affect whether someone can take that appointment. For this prototype, we used fictional patients, clinics, insurance plans, benefit assumptions, and medical information so that we could demonstrate the scheduling process without handling real patient data. Insurance and cost information are illustrative rather than verified coverage or guaranteed prices. Connecting Careousel to real healthcare systems would require additional integrations, permissions, privacy protections, and verification processes.

There are still things we want to improve, particularly how patients find suitable openings and how clinic staff manage reviews and notifications. We also hope to explore partnerships with healthcare providers in the future. What began as a question about long waiting times and unused appointments eventually became a project that helped us understand how much coordination is needed to make even a simple medical appointment work better.

Built With

Share this project:

Updates

Submission history