DocFind
Inspiration
When brainstorming ideas, we overheard our friend Alex trying to get a new family doctor since his old one just retired. It took him about 30 minutes of searching on Google and making phone calls to finally be put in queue to be booked to possibly be assigned to a new family doctor. As we overheard this happening, all three of us realized that we've had a very similar problem. We wanted to find out, why is it so hard? Long story short, it's because Ontario's simply does not have a modern healthcare management system. Neither patients nor clinics have any form of easy access to a modern way of contacting each other. We know that millions of people in Ontario are experiencing the same problem, they neither have no access to a family doctor, and a large proportion of them don't have the time or technical knowhow to navigate to book themselves an appointment.
After speaking to a family friend who's a doctor, we got all of the details of what they're missing on the doctor's end. By combining both patient-side and clinic-side knowledge, we created DocFind to solve and streamline the processes all around.
In the context of generative AI, this is the first usecase that we know of that's actually geared towards the patient: our models don't try to replace the doctor, create prescriptions, or diagnose the patient. Instead they help humans connect with humans.
Stack
The entire project is built on a Next.js full-stack architecture, written purely in TypeScript on both the frontend and backend - no separate server process needed.
Languages
- TypeScript - entire web application (frontend UI, API routes, server logic, database layer)
- Python - offline data pipeline scripts for geocoding used to enrich the CPSO doctor registry with latitude/longitude coordinates
Frameworks & Libraries
- Next.js 16 (App Router) - full-stack React framework handling routing, server components, and API routes
- React 19 - UI rendering with server and client components
- Tailwind CSS v4 - utility-first styling
- Radix UI - accessible, unstyled component primitives (dialogs, dropdowns, tabs, forms, etc.)
- Leaflet / react-leaflet - interactive map rendering for the clinic discovery view
- Three.js / @react-three/fiber / @react-three/drei - 3D model viewer on the landing page
- Vercel AI SDK - streaming AI chat integration with structured tool responses
- Zod - runtime schema validation for API payloads and AI-extracted search intent
- react-hook-form - form state management and validation
- Recharts - data visualization components
- Lucide React - icon library
- Sonner - toast notification system
Platforms
- OpenAI API (GPT-4.1-mini) - natural language understanding powering the clinic search chatbox; extracts location, specialty, and patient preferences from free-form conversation
- OpenStreetMap / Nominatim - free geocoding API to resolve user-typed locations (city names, street addresses) into coordinates
- Overpass API - supplementary real-world clinic data pulled from OpenStreetMap community tags
- Vercel Analytics - lightweight usage analytics
Tools
- Node.js built-in SQLite (
node:sqlite) - embedded database with zero external dependencies; auto-seeded from the full CPSO doctor registry on first boot - pgeocode (Python) - offline postal-code-to-coordinates lookup used in the data pipeline to geocode Ontario doctors from the CPSO public registry
- pnpm / npm - package management
The project is production-ready and robust enough to already handle heavy loads.
Feature Summary
The product serves the following options:
Gives a platform for healthcare providers and patients to interact to:
- Message each other
- Book appointments
- Exchange documents
- Communicate critical details such as urgency, health details, and more through a private, secure service.
The majority of Ontario clinics are already in a "signed up" state: this will include specific details about them, such as patient capacity, the specifics of their doctors' specializations, and appointment schedule.
Clinics that aren't signed up still show up but without these details.
Documents (such as rostering forms) are filled in automatically by an agent.
Over 60 languages supported both in typing and speaking form.
Built With
- gemini
- next
- openai
- react
- typescript

Log in or sign up for Devpost to join the conversation.