Getting started
How it's built
Under the hood, CiVQ is three services behind one web server, sharing one multi-tenant database. You rarely think about this — but it explains why deploys, tenants, and the admin panel work the way they do.
Visitors · residents · staff
Browsers on civq.us and every
tenant.civq.us▼
nginx + Cloudflare
TLS, routing, and which tenant a request belongs to (by subdomain)
▼
Web · Next.js
Marketing site, resident portal, and the staff dashboard UI
API · NestJS
All business logic, auth, and the partner API
Admin · AdminJS
Internal back-office service for the platform operator
▼
PostgreSQL · multi-tenant, row-level security
One database; every row tagged to an entity; tenants can't cross the wall. Redis backs sessions & queues; object storage holds uploads.
Why subdomains matter:
www.civq.us is the marketing site. tsc.civq.us is a tenant — its public portal and its staff dashboard. The same code serves every tenant; the subdomain tells the system whose data to show.