← All projects Case study Retrospective
Community platform
Backend for a modded-Minecraft network
Modpack voting with Stripe sponsorship and Discord entitlements, a stale-tolerant server list, and unattended publishing — run in production for a community of public game servers.
Problem
A community network of roughly forty public game servers needed modpack distribution and voting, a live server list, donor sponsorship, and a public site that stayed fresh — built on upstream game APIs that failed without warning.
My contribution
Working alongside a frontend partner, I built and operated the backend, automation, and operations layer for about two years, from the Stripe and Discord entitlement flow to the unattended site publisher.
Outcome
Players who were not its author used it daily. The retained log shows 231,109 completed publishing cycles, and a retained snapshot shows 41 servers with 54 players online mid-week.
For about two years I built and operated the backend of a modded-Minecraft community network — software that real players used daily across roughly forty public servers: modpack distribution and voting, the live server list, donor sponsorship, and the automation that kept the public site fresh.
Design
- Failure is never cached. The server-list API’s memoizer refuses to store an empty result, so when the upstream game API broke, the cache kept serving the last good answer instead of a blank page. A transient upstream outage could therefore leave downstream on retained state rather than erase the list.
- Individual page replacement is atomic. An unattended worker rendered the public site into a temporary directory, then swapped files into place with atomic renames — 231,109 completed cycles in the retained production log, with no partial file exposed by the rename step. This is file-level atomicity, not a transaction across the complete site.
- Money and entitlements stay separated. Donor sponsorship ran through Stripe webhooks; what a donor was entitled to resolved through a Discord bot acting as the authorization oracle, with TTL-cached role lookups — the community’s own membership system remained the source of truth.
- Votes fan out through a queue. Server-list votes entered a RabbitMQ reward pipeline with configured thresholds, so reward delivery could lag, retry, or burst without blocking the voting path.
What it delivered
This was shipped software with users who were not its author: community members uploaded 319 modpack thumbnails through it, a retained snapshot shows 41 servers with 54 players online mid-week, and the deployment ran under versioned nginx configs on community infrastructure. A frontend partner built the player-facing interfaces; the work claimed here is the backend, automation, and operations layer. A final piece of player-statistics tooling shipped in mid-2025 as the engagement wound down.
Status & limits — the engagement concluded in 2025 and the services were handed off. Community-size headline numbers (registered users, vote totals) are deliberately not claimed: no primary record was retained, and a number without a record does not go on this site.
Built with
- Python
- Flask
- RabbitMQ
- Stripe webhooks
- Discord OAuth
- nginx (versioned production configs)