AirOut — Respiratory & Wellness Platform
Full Stack Developer

AirOut — Respiratory & Wellness Platform

The Architecture

AirOut operates at the intersection of respiratory health and emotional wellness — a space where clinical precision and empathetic UX must coexist. The platform needed to serve two distinct user types simultaneously: patients seeking guided self-care tools, and clinicians needing a professional scheduling and profile layer.

The architecture decision that defined the entire project was the decoupled frontend-backend split. The Next.js (TSX) frontend and the NestJS backend run as independent services — communicating via a typed REST API. This separation allowed each layer to scale, deploy, and be maintained independently. The NestJS backend handles authentication (JWT-based), doctor profile management, appointment CRUD, symptom log persistence, and care plan delivery. The Next.js frontend consumes these via API routes, keeping the client lean and fast.

Doctor discovery was built as a search-and-filter system — users can locate verified lung specialists by specialty, availability, and location. Each specialist has a structured profile page with credentials, availability slots, and the ability to book directly. Appointment state is managed server-side in the NestJS layer with real-time slot conflict prevention.

The breathing and wellness session module required careful UX architecture — sessions are progressive, gamified with subtle engagement mechanics, and trackable over time. Symptom logging is structured (not free-text) to allow pattern detection and care plan alignment.

Frontend performance was maintained via Tailwind CSS utility-first styling — zero runtime CSS overhead — and Next.js App Router for granular loading and streaming. The health data sensitivity meant all API communication was secured with HTTPS and role-based access control enforced at the NestJS guard layer.

Strategic Methodology

Architecture-first. The decoupled NestJS + Next.js split was the strategic anchor — it gave the client a backend that could eventually power a mobile app without rebuilding the API. Frontend was designed patient-first: every flow (discovery → booking → session → tracking) was mapped as a user journey before a single component was written. Clinical data was treated as a first-class concern — typed DTOs, validated inputs, and role-based guards from day one.

Engineering Challenges

  • Designing a decoupled architecture where the Next.js frontend and NestJS backend are independently deployable — including handling CORS, environment-specific API base URLs, and JWT token flow across the boundary.
  • Building real-time appointment slot conflict prevention on the NestJS side — concurrent booking attempts for the same doctor slot required atomic DB operations to avoid double-booking without a WebSocket layer.
  • Structured symptom tracking with enough flexibility to support multiple respiratory conditions (asthma, COPD, anxiety-linked breathing) while keeping the UI non-clinical and approachable for non-medical users.
  • Implementing role-based access control (RBAC) in NestJS guards to differentiate patient, doctor, and admin permissions — all within a single API surface without route proliferation.
  • Delivering gamified breathing sessions that feel progressive and engaging without introducing JS-heavy animation libraries that would compromise Lighthouse performance scores on a health platform.

Project Impact

"Engineered a production health-tech platform from the ground up — decoupled frontend and backend, real-time doctor discovery, appointment booking, and guided breathing experiences that bridge clinical care with emotional wellness."

Core Arsenal

Next.jsTypeScriptNestJSTailwind CSSMongoDBJWT AuthREST APIVercelRBACReact
STATUS: DEPLOYED
Check Live
Intelligence Unit

Technical Log.

A high-fidelity breakdown of the build's architectural achievements and performance markers.

Synthesis

"Built a production health-tech platform — Next.js TSX frontend decoupled from a NestJS REST API backend with guided sessions, verified doctor discovery, appointment booking, symptom tracking, and care plans for respiratory and mental wellness users."

Hard Evidence

NestJS RBAC guards enforcing 3-tier permission model (patient / doctor / admin)
JWT + HTTP-only refresh token auth flow
MongoDB aggregation-backed doctor search with SWR client-side caching
CSS keyframe breathing sessions with zero third-party animation library dependencies
Next.js App Router with streaming for sub-second perceived load on session pages
Marker 1

First project in the portfolio with a fully decoupled frontend-backend architecture — Next.js on Vercel, NestJS as a standalone REST API service.

Marker 2

Role-based access control (RBAC) implemented at the NestJS guard layer — patients, doctors, and admins operate on the same API with zero route duplication.

Marker 3

Appointment booking engine with server-side slot conflict prevention — concurrent requests handled atomically to eliminate double-booking.

Marker 4

Symptom tracking module structured as typed, condition-aware forms — enabling pattern detection and alignment with doctor-issued care plans.

Marker 5

Gamified breathing sessions designed for retention — progressive difficulty, session history, and subtle engagement mechanics without heavy animation libraries.

Query Archive

01Why NestJS for the backend instead of Next.js API routes alone?
Scale and separation of concerns. NestJS gives you a proper module system, dependency injection, guards, interceptors, and DTO validation out of the box — none of which Next.js API routes provide. It also means the backend can power a future mobile app without any refactoring. It also gave an independent backend to create a Mobile App along with the website
02How was sensitive health data protected across the frontend-backend boundary?
JWT-based auth with short-lived access tokens and HTTP-only refresh tokens. All API calls are HTTPS-only. Role guards on every protected NestJS route ensure a patient token can never access doctor management endpoints.
03How were breathing sessions made engaging without heavy JS animations?
CSS keyframe animations driven by Tailwind's animation utilities + a lightweight state machine in React. No GSAP, no Framer Motion — keeping the bundle lean while still delivering smooth, responsive session experiences.
04How does the doctor discovery system work technically?
A filterable search powered by NestJS query DTOs — specialty, availability, and location filters map directly to MongoDB aggregation queries. Results are paginated and cached on the Next.js side using SWR for near-instant repeat searches.