Submission for Dialogue's challenge at Concordia's 2026 Hackathon. BooBooBuddy addresses the need for agentic healthcare beyond a chatbot; BooBooBuddy consider's the user's comprehensive health background and goals to suggest immediate care aligning with the user's preferences. BooBooBuddy utilizes past health data and the nature of the user's current conversation to determine the proper protocol: call immediate care for the user from a local healthcare clinic, or continue advising.
sequenceDiagram
participant U as π€ User
participant B as π€ BooBooBuddy
participant T as π Twilio
participant C as π₯ Clinic
U->>B: "My throat hurts and I have a fever"
B->>B: Assess symptoms & severity
B->>U: Find nearby clinics
U->>B: Click "Call with Buddy"
B->>T: Initiate inquiry call
T->>C: "Patient has sore throat & fever..."
C-->>T: "Appointments available 2-5 PM"
T-->>B: Transcribe response
B->>U: Show available time slots
U->>B: Select "3:30 PM"
B->>T: Initiate booking call
T->>C: "Book appointment for 3:30 PM"
C-->>T: "Confirmed!"
T-->>B: Transcribe confirmation
B->>U: β
"Appointment booked for 3:30 PM"
OpenRouter API (GPT-4o-mini)
- Powers the conversational interface with context-aware responses
- Progressively assesses symptom severity through natural dialogue
- Synthesizes raw conversation into clear medical summaries for clinic calls
- Analyzes call transcripts to extract availability, time slots, and booking confirmations
Google Places API
- Finds nearby walk-in clinics and medical centers based on user location
- Retrieves clinic details: name, address, phone, ratings, hours
- Supports browser geolocation with localStorage caching
Twilio Voice API
- Makes real outbound calls to clinics on behalf of the user
- Uses text-to-speech to communicate patient symptoms and booking requests
- Records clinic responses and transcribes them automatically
- Supports two call types:
- Inquiry calls: "Do you accept walk-ins or appointments?"
- Booking calls: "I'd like to book for 3:30 PM"
| Component | Description |
|---|---|
| Chat Interface | Conversational UI with message history and typing indicators |
| Voice Input | Microphone button using Web Speech API for hands-free input |
| Triage Indicator | Visual progress bar showing assessment stage (25% β 100%) |
| Clinic Carousel | Horizontal scrollable cards with embedded Google Maps |
| Call Status Modal | Real-time feedback during calls (calling β waiting β analyzing β complete) |
| Time Slot Grid | Clickable buttons for available appointment times |
GREETING β COLLECTING_SYMPTOMS β ASSESSING_SEVERITY β SEARCHING_CLINICS
β PRESENTING_OPTIONS β CALLING_CLINIC β BOOKING_AVAILABLE
β TIME_SLOT_SELECTION β BOOKING_CALL β BOOKING_COMPLETE
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π FRONTEND β
β Next.js 14 + React + TypeScript + Tailwind β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β π¬ Chat Interface β π€ Voice Input β π₯ Clinic Carousel β
β (Message history, β (Web Speech API, β (Google Maps embed, β
β typing indicators) β hands-free input) β call buttons) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β π Triage Indicator β π Call Modal β π Time Slot Grid β
β (Progress bar, β (Status updates, β (30-min intervals, β
β severity levels) β transcript display)β one-click booking) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ REST API (JSON)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β βοΈ BACKEND β
β Next.js API Routes β
ββββββββββββββββββββββ¬ββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ€
β /api/chat β /api/twilio/* β /api/test-places β
β β’ LLM orchestrationβ β’ call-clinic β β’ Clinic search β
β β’ State management β β’ get-transcript β β’ Location resolution β
β β’ Symptom synthesisβ β’ analyze-transcript β
β β β’ transcription-callback β
ββββββββββββββββββββββ΄ββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββ
β π€ OpenRouter β β π Twilio β β πΊοΈ Google APIs β
β (GPT-4o-mini) β β Voice API β β β’ Places API (clinic search) β
β β β β β β’ Maps Embed (clinic cards) β
β β’ Conversation β β β’ Outbound callsβ β β’ Geocoding (location lookup) β
β β’ Transcript β β β’ Recording β β β
β analysis β β β’ Transcription β β β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ
β ποΈ Prisma + β
β SQLite β
β β
β β’ User profiles β
β β’ Health data β
β β’ Sessions β
ββββββββββββββββββββ
| Layer | Technology |
|---|---|
| Frontend | Next.js 14, React 18, TypeScript, Tailwind CSS |
| Voice Input | Web Speech API (browser-native) |
| Backend | Next.js API Routes (Node.js) |
| LLM | OpenRouter API β GPT-4o-mini |
| Telephony | Twilio Voice API (calls, recording, transcription) |
| Location | Google Places API, Maps Embed API, Geocoding API |
| Database | Prisma ORM + SQLite |
| Auth | NextAuth.js (Google OAuth) |
- Clone the repository using the HTTP link.
- Create a
.local.envfile in the root directory, and populate it with necessary API keys. - Install necessary dependencies by running
npm install - Build using
npm build - Run using
npm run dev
Built during ConUHacks X at Concordia University, January 24-25th 2026.
MIT