Technical Stack — Central Membership & SSO Hub
1. Stack yang disepakati
| Layer | Teknologi | Fungsi |
|---|---|---|
| Frontend | Next.js 16+ (App Router), TypeScript | Web member/admin dan halaman publik. |
| UI | Tailwind CSS, Base UI, Lucide | Design system yang aksesibel. |
| Backend | NestJS 11+ (TypeScript) | REST API, OAuth2, webhook, dan business rules. |
| API contract | REST /api/v1, Swagger/OpenAPI |
Kontrak frontend-backend dan dokumentasi. |
| Database | PostgreSQL 15+ | Source of truth yang ACID. |
| ORM | Prisma | Schema, migration, dan query type-safe. |
| Cache/queue | Redis 7+ + BullMQ | Queue, retry, scheduling, dan rate-limit support. |
| Authentication | Passport, JWT RS256, OAuth2 Authorization Code + PKCE | Hub login dan SSO antar SaaS. |
| Payment | Midtrans Snap, Xendit Invoice | Pembayaran Indonesia dan webhook settlement. |
| SMTP provider / Resend | Email transaksional melalui BullMQ. | |
| Deployment | Docker + Coolify pada VPS | Deploy service, domain, TLS, environment, dan rollback. |
| Test | Jest, Supertest, Playwright | Unit, integration/API, dan end-to-end. |
2. Backend dependency utama
| Kebutuhan | Paket NestJS/Node yang direkomendasikan |
|---|---|
| HTTP, config, validation | @nestjs/common, @nestjs/config, class-validator, class-transformer |
| Prisma | prisma, @prisma/client |
| Auth | @nestjs/passport, passport, passport-jwt, jose |
| Queue | @nestjs/bullmq, bullmq, ioredis |
| Schedule | @nestjs/schedule |
| API docs | @nestjs/swagger |
| Security | helmet, @nestjs/throttler |
| Test | jest, supertest |
Versi pasti dikunci di package.json backend. Gunakan LTS Node.js aktif saat backend dibuat.
3. Keputusan teknis
| Keputusan | Pilihan | Alasan |
|---|---|---|
| Arsitektur awal | Modular monolith NestJS | Operasional sederhana, modul tetap jelas dan dapat diekstraksi kelak. |
| Database | PostgreSQL + Prisma | Mendukung transaksi billing dan relasi data dengan kuat. |
| Queue | Redis + BullMQ | Retry, delayed jobs, dan scheduler yang tahan kegagalan. |
| Token | JWT RS256 | SaaS dapat memverifikasi token menggunakan public key Hub. |
| OAuth flow | Authorization Code + PKCE | Aman untuk aplikasi web. |
| Deployment | Coolify pada VPS | Satu platform untuk frontend, API, worker, Postgres, dan Redis. |
| Payment | Midtrans + Xendit | Sesuai kebutuhan metode pembayaran Indonesia. |
4. Struktur repository
membership/
├── project/frontend/ # Next.js (repo sendiri)
├── backend/ # NestJS + Prisma (repo sendiri)
└── docs/ # spesifikasi sistem
Backend minimal memiliki api process dan worker process dari image yang sama. API menerima traffic HTTP; worker memproses BullMQ dan scheduled job.
5. Konfigurasi environment inti
NODE_ENV=production
PORT=3001
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
APP_URL=https://api.hub.domain.com
FRONTEND_URL=https://hub.domain.com
JWT_PRIVATE_KEY=...
JWT_PUBLIC_KEY=...
MIDTRANS_SERVER_KEY=...
MIDTRANS_CLIENT_KEY=...
XENDIT_SECRET_KEY=...
XENDIT_CALLBACK_TOKEN=...
EMAIL_FROM=no-reply@hub.domain.com
SMTP_HOST=...
SMTP_PORT=587
SMTP_USER=...
SMTP_PASS=...
Tidak ada secret yang masuk ke Git atau NEXT_PUBLIC_*. Coolify menyimpan environment terpisah untuk staging dan production.