Skip to content

πŸ† Winner @ uConcordia Hacks X: Submission for Dialogue's challenge at Concordia's 2026 Hackathon. BooBooBuddy addresses the need for agentic healthcare beyond a chatbot, it considers the user's comprehensive health background and goals to suggest immediate care aligning with the user's preferences.

Notifications You must be signed in to change notification settings

mchoi-cs/BooBooBuddy

Repository files navigation

BooBoo Buddy 🩹

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.

How It Works

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"
Loading

🧠 AI & LLM Integration

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

πŸ“ Location & Clinic Discovery

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

πŸ“ž Automated Calling

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"

πŸ’» User Interface

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

πŸ”„ Conversation States

GREETING β†’ COLLECTING_SYMPTOMS β†’ ASSESSING_SEVERITY β†’ SEARCHING_CLINICS
    β†’ PRESENTING_OPTIONS β†’ CALLING_CLINIC β†’ BOOKING_AVAILABLE
    β†’ TIME_SLOT_SELECTION β†’ BOOKING_CALL β†’ BOOKING_COMPLETE

High-level Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                              🌐 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      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tech Stack Summary

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)

Getting Started

  1. Clone the repository using the HTTP link.
  2. Create a .local.env file in the root directory, and populate it with necessary API keys.
  3. Install necessary dependencies by running npm install
  4. Build using npm build
  5. Run using npm run dev

Contributors

Built during ConUHacks X at Concordia University, January 24-25th 2026.

License

MIT

About

πŸ† Winner @ uConcordia Hacks X: Submission for Dialogue's challenge at Concordia's 2026 Hackathon. BooBooBuddy addresses the need for agentic healthcare beyond a chatbot, it considers the user's comprehensive health background and goals to suggest immediate care aligning with the user's preferences.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages