Overview
Ginhawa is a full-stack telehealth platform that matches a patient to the right specialist from a plain-language description of how they feel, then carries them through to a secure video consultation. Built as an entry for a competitive builder-program round. It is two-sided: patients discover doctors, describe symptoms, and attend video visits; doctors manage schedules, patients, and consultations.
Context
Finding the right specialist is the first hard step in care — patients don’t think in medical categories, and referrals add friction. Ginhawa removes both: describe symptoms in plain language, an AI suggests the right specialist, and you book a secure video visit — no referral, no jargon. Built for the Philippine market.
My Role
I built the full stack end to end — a Next.js (App Router) frontend for both the patient and doctor experiences, and a NestJS API organized into distinct domain modules — plus the AI symptom router and the video-consultation integration.
Architecture & Key Decisions
A monorepo, split frontend/backend for type safety across the wire:
- Backend — NestJS, domain-driven. Around a dozen focused modules — appointments, consultations, slots/scheduling, medical records, doctors, patients, specializations, recommendations, reviews, notifications, auth, and users — behind a REST API with a health endpoint for the platform.
- Data. PostgreSQL via Prisma ORM; request payloads validated with class-validator DTOs; seeded with Faker for realistic demo data.
- Auth. JWT with Passport + bcrypt on the backend, NextAuth.js on the frontend.
- AI symptom triage. Plain-language symptoms map to a specialist recommendation, wired to two providers (Google Gemini and Groq) so the recommendation path has a fallback.
- Live video consultations. Daily.co integration for in-home visits, driven by the consultation module.
- Frontend — Next.js (React 19). App Router routes for discovery, appointments, consultation rooms, records, notifications, onboarding, and separate patient/doctor dashboards; Tailwind CSS, Radix UI, and Framer Motion.
- Infrastructure. Cloudinary for uploads, Docker Compose for the local database, Jest + Supertest on the API, deployed on Railway.
Hardest Challenge
Making a two-sided product cohere under a competitive round’s time limit. A dozen backend domains, real-time video, and AI triage all had to work together — while the patient flow stayed simple enough that someone with no medical vocabulary still reaches the right doctor. Keeping the domain-driven backend clean (one module per concern) is what made that breadth manageable instead of a tangle.
Outcome & Impact
- A working, deployed, two-sided telehealth platform: plain-language AI triage, live video consultations, appointment and slot scheduling, doctor discovery with reviews, medical records, and notifications.
- Production-shaped engineering — a domain-driven NestJS API, a typed Prisma data layer, JWT auth, automated tests, and a health-checked Railway deployment.















