Skip to content
PT
All projects
Web platformLive · staff sign-inSep 2026 – present

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.

DCL landing page: logo, 'DCL', and live member counts.
The public landing page, which reads live counts from Discord.

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