Inspiration

We kept seeing the same headline over and over: millions of Canadians can't find a family doctor. When we dug into the numbers, it hit hard. Nearly 6 million people in this country don't have access to primary care. In BC alone, that's over 880,000 people. And if you live in a rural or remote community, it's even worse. About a fifth of Canadians live in these areas, but less than a tenth of doctors actually practice there. People are driving hours just to see someone, waiting weeks for referrals, or giving up and going to the ER for things that shouldn't need an emergency room visit. Last year, 1.27 million people walked out of Canadian ERs without ever being treated. That really stuck with us. Where you live shouldn't decide whether you get healthcare or not, and we wanted to build something that could start closing that gap.

What it does

BridgeCare is a healthcare platform powered by AI that connects patients with doctors remotely. A patient opens the app on their phone, taps "Start an Intake," and has a conversation with an AI assistant. It asks all the right questions, the same way a triage nurse would in person: what are your symptoms, how long has this been going on, any allergies, what medications are you on. Once it has a full picture, it packages everything into a structured clinical summary and sends it to a doctor. The doctor opens their dashboard, reviews the summary and the full chat transcript, and then decides what to do. They can prescribe medication, write advice, or schedule a follow-up appointment. Whatever they choose, the patient sees it instantly on their end. No waiting room. No hour-long drive. No clipboard full of paperwork.

How we built it

The frontend is React with TypeScript, styled with Tailwind CSS. We designed it mobile-first because the whole point is that someone in a rural community should be able to use this from their phone. The backend runs on Express.js with a SQLite database, which kept things lightweight and let us move fast without worrying about setting up a separate database server. The AI intake interviews are powered by OpenAI's GPT-4o-mini. We spent a lot of time crafting the system prompt so the AI asks clinically relevant questions in a conversational, approachable way. For security, we used JWT tokens for authentication and bcrypt for password hashing. Doctors don't log in with a regular email and password. Instead, they use a last name and a healthcare ID that we assign to them, validated against a server-side whitelist.

Challenges we ran into

The AI was tricky to get right. If the system prompt was too clinical, the conversation felt cold and intimidating. If it was too casual, it missed important medical details. We went through a lot of iterations to find the right balance where a patient feels comfortable talking but the AI still captures everything a doctor needs. Building the dual-portal system was another challenge. Patients and doctors are looking at the same underlying data but from completely different perspectives, and we had to make sure each side could only access what they were supposed to. We also ran into a sneaky bug where a doctor could submit a "schedule appointment" action and the system would say it succeeded, but no appointment actually got created on the patient's side. Turned out the backend wasn't validating that a date was actually provided, so the intake status updated but the appointment row never got inserted. That one taught us to never trust the frontend and always validate on the server.

Accomplishments that we're proud of

We built a working, end-to-end healthcare platform during a hackathon. That still kind of blows our minds. A patient can open the app, tell the AI they have a headache, go through a full medical intake conversation, and end up with a real prescription from a doctor. The whole flow works. The AI generates structured clinical summaries that save doctors from manually writing up intake notes, which is huge when you consider that Canadian doctors collectively spend 18.5 million hours a year on unnecessary paperwork. We also got real security working, not just a demo login screen, but actual JWT authentication, role-based access control, hashed passwords, and a healthcare ID system for doctors. And it works on mobile. You can pull it up on your phone right now and walk through the entire patient or doctor experience.

What we learned

Healthcare is way more complicated than it looks from the outside. Even something as straightforward as a medical intake has dozens of edge cases. What if the patient has multiple symptoms? What if they don't know their medication names? What if their allergies are relevant to the prescription a doctor wants to write? We also learned a lot about integrating AI into an application where the output actually matters. This isn't a chatbot where a wrong answer is just annoying. The AI's summary is what a doctor uses to make clinical decisions, so it needs to be structured, consistent, and reliable. And probably the biggest lesson was that security has to be baked in from the start. In healthcare, you can't build the features first and figure out access control later. Every single API endpoint needs to know who's asking and whether they're allowed to see that data.

What's next for Bridgecare

There's a lot we want to do. On the compliance side, we need to meet PHIPA and PIPEDA standards for handling Canadian health data, add end-to-end encryption for patient records, and bring in multi-factor authentication for doctors. On the product side, we want to add real-time notifications so patients know the moment a doctor has reviewed their intake instead of having to check manually. Video consultations would be huge for cases where a doctor needs to actually see the patient. We'd also love to integrate with pharmacy systems so when a doctor writes a prescription, it goes straight to the patient's local pharmacy and is ready for pickup. The bigger vision is to pilot this with rural health authorities in BC and eventually make BridgeCare the front door to primary care for every Canadian who can't find a family doctor.

Built With

Share this project:

Updates