- Backend: Fastify with two listeners (public + internal), routes, services, DB migration + seed - client_app: Flutter with BLoC, all auth screens (welcome, display name, register, OTP, force-register) - mitra_app: Flutter with BLoC, OTP-only login - control_center: React + Vite, email/password login, mitra/user management, anonymity settings - Docs: phase1 plan, API contract, client app mockup - CLAUDE.md and shared memory for all subprojects Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.3 KiB
2.3 KiB
Halo Bestie — Project Root
Mental health chat platform connecting clients (users seeking support) with trained mental health professionals (mitra). Paid service with optional trial period.
Folder Structure
| Folder | Purpose |
|---|---|
requirement/ |
Requirement documents (phased) |
backend/ |
Fastify.js API server |
client_app/ |
Flutter app for clients (iOS + Android) |
mitra_app/ |
Flutter app for professionals/mitra (iOS + Android) |
control_center/ |
React + Vite SPA — internal management tool |
Tech Stack
- Backend: Fastify.js — single codebase, two listeners
- Public (port 3000) → serves
client_appandmitra_app - Internal (port 3001) → serves
control_centeronly
- Public (port 3000) → serves
- Database: PostgreSQL (GCP Cloud SQL)
- Auth: Firebase Auth — Google/Apple social login + phone OTP (native Flutter UI, no WebView)
- Payment: Xendit
- Mobile: Flutter (iOS + Android)
- Control Center: React + Vite SPA
- Infra: GCP — Cloud Run (backend), Cloud SQL (PostgreSQL), VPC private networking
Key Architectural Decisions
- One backend serves both mobile apps — routes namespaced as
/api/client/,/api/mitra/,/api/shared/ - Control center is internal-only — never expose its API routes to the public internet; protected via Nginx allow/deny + VPN
- Firebase Auth tokens are verified on Fastify via JWT — user data lives in PostgreSQL, linked by Firebase UID
- Horizontal scaling (Cloud Run) handles load — do not split into microservices prematurely
- Real-time features (chat) are deferred to requirements phase
Current Progress
- Phase 1 (Authentication) — fully scaffolded
- Backend routes, services, DB migration + seed script
- client_app: all auth screens (welcome, display name, register, OTP, force-register)
- mitra_app: OTP-only login
- control_center: email/password login, mitra management, user management, anonymity settings
- Docs:
requirement/phase1-plan.md,requirement/phase1-api-contract.md,requirement/client_app_mockup.html
- Phase 2 (Sessions, Chat, Payments) — not yet started, requirements not yet written
Domain Concepts
- Client — end user seeking mental health support
- Mitra — trained mental health professional (partner)
- Sessions are paid; Xendit handles payment and subscription/trial logic