Ginhawa Telehealth App

Case study
Next.js React NestJS TypeScript PostgreSQL Prisma Tailwind CSS Google Gemini Daily.co
Ginhawa Telehealth App — screenshot 1Ginhawa Telehealth App — screenshot 2Ginhawa Telehealth App — screenshot 3Ginhawa Telehealth App — screenshot 4Ginhawa Telehealth App — screenshot 5Ginhawa Telehealth App — screenshot 6Ginhawa Telehealth App — screenshot 7Ginhawa Telehealth App — screenshot 8Ginhawa Telehealth App — screenshot 9Ginhawa Telehealth App — screenshot 10Ginhawa Telehealth App — screenshot 11Ginhawa Telehealth App — screenshot 12Ginhawa Telehealth App — screenshot 13Ginhawa Telehealth App — screenshot 14Ginhawa Telehealth App — screenshot 15Ginhawa Telehealth App — screenshot 16
13
backend modules
2-sided
patient + doctor
AI + video
triage + consults

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.