serial-fork

A Discord bot + web registry for assigning serial numbers to 3D printer builds. Your BBP-0042 is officially official.

Documentation

You finished your printer. You documented the build, you suffered the cable management, and now you deserve a real serial number — not just a sticker you made in Microsoft Paint. Serial Fork is a Discord-native system that lets community members request serials directly from a forum thread, get them approved by a moderator with a single button click, and have the result logged in a public searchable registry. No spreadsheets. No DMs. No chaos.

How It Works

  1. A builder posts their completed build in the community's Discord forum
  2. They run /request in the thread — the bot picks up their post and opens a request
  3. A moderator approves or rejects it via Discord buttons or the web admin panel
  4. On approval, a serial number is assigned, a role is granted, and the build lands in the public registry
  5. The builder gets a DM, bragging rights, and the knowledge that BBP-0042 is theirs forever

Features

  • Forum-thread-native workflow — everything happens where your community already lives
  • Multiple serial sequences per printer type (BBP-001, CC-001, etc.) each counting independently
  • One-click moderator approval and rejection via Discord buttons
  • Rejection and resubmission workflow — no need to start over from scratch
  • Serial number reservations with CSV bulk import (great for grandfathering legacy builds)
  • Serial rescission for when things go sideways
  • Discord OAuth2 login — no passwords, no separate sign-up
  • Automatic role assignment on approval
  • Full audit log of every action taken
  • Themeable UI — BabyBelt, Printcepts, and Wave themes included out of the box

Tech Stack

  • Bot: Python 3.12 + discord.py — modular cog architecture
  • Web: FastAPI + Jinja2 templates — server-rendered, no build step required
  • Database: SQLite with WAL mode, managed by SQLAlchemy 2.0 (async) and Alembic migrations
  • Auth: Discord OAuth2 via Authlib; session cookies signed with itsdangerous
  • Deployment: Docker Compose for dev, Helm chart for Kubernetes in production

Quick Start

Copy the example configs and fill in your Discord credentials:

cp config.toml.example config.toml
cp .env.example .env

Then spin it up:

docker compose up -d

Bootstrap your first owner account by Discord user ID:

python scripts/create_admin.py --discord-id 123456789012345678

Roles

  • Owner — full control; manages admins, printer types, and site config
  • Admin — manages mods, reservations, and can download database backups
  • Mod — approves and rejects serial requests
  • User — submits requests, views their own history
Roles are stored in the database, not Discord — so a Discord server outage won't accidentally promote your most enthusiastic newbie to admin.

Deployment

A full Helm chart is included for Kubernetes deployments, with ConfigMaps, Secrets, PersistentVolumeClaims, and Ingress templates ready to go. Database migrations run automatically at startup — no manual intervention needed between versions.

helm install serial-fork ./helm -f values.yaml
Links