DCL: Discord Love
StaffHub, forked and isolated for a second 180K-member community.
Public landing page. The tools need staff sign-in.
- Community
- 180K+ members
- Isolation
- Own DB, OAuth app, process
- Forked
- Sep 2026
- Hosting
- Same VPS as The Camp
Discord Love (DCL) is a Discord community with more than 180,000 members. Its staff run on a fork of StaffHub, the platform I built for The Camp.
Forking meant making one codebase safe to run twice: each community gets its own database role, Discord OAuth application, PM2 process and nginx site with its own certificate, so a deploy to one cannot touch the other.

What it does
The parts worth talking about
Isolated by design
Separate Postgres database and role, separate Discord OAuth app, separate PM2 process and a separate nginx site and TLS certificate. Every deploy takes its own `pg_dump` first and only reloads after the build exits 0.
Its own organisation model
Departments were re-modelled for DCL (People & Culture, Appeal Council, Partnership Manager). The migrations renamed enum values in place and were run only after confirming nobody held the old values, so no data moved.
Features ported and re-tuned
The sticker draw economy came across from The Camp and was re-priced for DCL: single draws went from 30 to 20 points, with refunds scaled to match.
Mobile fixes and appeals back on
The fork shipped with the appeals flow re-enabled and a round of mobile layout fixes.
What went wrong
Incidents that changed how I work
Each of these reached production. Each one is now a rule or an automated check.
Every login failed overnight
Discord began returning an `iss` parameter that Auth.js rejected against its placeholder issuer, so every sign-in ended in a generic "Configuration" error. The pm2 log showed ten `unexpected "iss"` errors. The fix was naming Discord's issuer on the provider. Before deploying I tested the related redirect on a private dev server with forged session cookies, then built, reloaded and confirmed `/` and `/login` returned 200.
Stack
Built with
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
- Prisma 7
- PostgreSQL
- Auth.js (Discord OAuth)
- PM2
- nginx