Claude (Chronicler #63) e36b20d06e docs(modpackchecker): Comprehensive developer documentation
Added professional-grade documentation throughout the codebase so any
developer can pick up this project and understand it immediately.

PHILOSOPHY:
'Hand someone the repo and say: here's what we built, here's WHY we built
it this way, here's where it's going. Make it better.' — Michael

NEW FILES:
- blueprint-extension/README.md
  - Complete developer onboarding guide (400+ lines)
  - Architecture diagram showing cron → cache → badge flow
  - Installation steps, configuration, usage
  - API reference with example responses
  - Troubleshooting guide
  - Design decisions with rationale

ENHANCED DOCUMENTATION:

ModpackAPIController.php:
- 60-line file header explaining purpose, architecture, critical decisions
- Detailed docblocks on every method
- Explains WHY dashboard reads cache-only (rate limits)
- Documents all four platform APIs with links
- Example request/response for each endpoint

CheckModpackUpdates.php:
- 50-line file header with usage examples
- Recommended cron schedule
- Example console output
- Documents rate limiting strategy
- Explains relationship to dashboard badges

UpdateBadge.tsx:
- 50-line file header explaining the 'dumb badge' architecture
- Detailed comments on global cache pattern
- Documents the fetch-once deduplication strategy
- Explains render conditions and why each exists
- Brand color documentation (Fire/Frost)
- Accessibility notes (aria-label)

WHAT A NEW DEVELOPER NOW KNOWS:
1. The 'why' behind every architectural decision
2. How the cron → cache → badge flow prevents rate limits
3. Which methods call external APIs vs read cache
4. How to add a new platform
5. How to troubleshoot common issues
6. The relationship between all components

This codebase is now ready to hand to a contractor with the words:
'This was made great. Make it awesome.'

Signed-off-by: Claude (Chronicler #63) <claude@firefrostgaming.com>
2026-04-06 09:05:48 +00:00

🔥❄️ Firefrost Services

Monorepo for Firefrost Gaming backend services

This repository contains all custom Node.js services that power Firefrost Gaming's subscription automation, game server management, and community tools.


📋 Services

Active Services

Experimental

  • Future — Experimental services and proof-of-concept tools

🏗️ Architecture

This monorepo uses npm workspaces for dependency management and service-prefixed Git tags for versioning.

Repository Structure

firefrost-services/
├── package.json              # Root workspace configuration
├── services/                 # Production services
│   ├── arbiter/
│   ├── whitelist-manager/
│   └── modpack-version-checker/
├── shared/                   # Shared utilities (@firefrost/shared)
└── future/                   # Experimental services

Versioning Strategy

Each service versions independently using Git tags:

  • Arbiter releases: arbiter-v2.1.0, arbiter-v2.2.0
  • Whitelist Manager: whitelist-v1.0.0, whitelist-v1.1.0
  • Modpack Checker: modpack-v1.0.0

This allows Service A to be at v2.1 while Service B is at v1.0.


🚀 Quick Start

Initial Setup

# Clone repository
git clone https://git.firefrostgaming.com/firefrost-gaming/firefrost-services.git
cd firefrost-services

# Install all dependencies (services + shared)
npm install

Deploying a Service

# Fetch latest tags
git fetch --all --tags

# Check out specific service version
git checkout arbiter-v2.1.0

# Install dependencies
npm install

# Create .env file (copy from .env.example)
cd services/arbiter
cp .env.example .env
# Edit .env with actual credentials

# Start service (systemd)
sudo systemctl enable arbiter
sudo systemctl start arbiter

Updating a Service

# Return to main branch
git checkout main

# Pull latest code
git pull origin main

# Check out new version
git checkout arbiter-v2.2.0

# Install any new dependencies
npm install

# Restart service
sudo systemctl restart arbiter

Rolling Back

# Check out previous version
git checkout arbiter-v2.1.0

# Restart service
sudo systemctl restart arbiter

📦 Shared Code

The @firefrost/shared package contains utilities used across multiple services:

  • Database helpers
  • Discord formatting utilities
  • Pterodactyl API wrappers
  • Logging infrastructure

Services import shared code like any npm package:

import { logger } from '@firefrost/shared';

🔐 Environment Variables

IMPORTANT: Never commit .env files to Git.

Each service has an .env.example file showing required variables. On the server:

  1. Copy .env.example to .env
  2. Fill in actual credentials
  3. Ensure .env is in .gitignore (it is by default)

🛠️ Development

Adding a New Service

  1. Create directory: services/my-new-service/
  2. Add package.json with service name
  3. Develop service
  4. Create .env.example with required variables
  5. Add systemd service file to deploy/ directory
  6. Document in service README
  7. Tag initial release: git tag my-service-v1.0.0

Using Shared Code

// In your service
import { logger, formatDiscordEmbed } from '@firefrost/shared';

logger.info('Service started');

Running Tests (Future)

# Run all service tests
npm test

# Run specific service tests
npm test -- --workspace=services/arbiter

📋 systemd Configuration

Each service includes a systemd unit file in deploy/. Example for Arbiter:

[Unit]
Description=Arbiter Discord Bot
After=network.target

[Service]
Type=simple
User=arbiter
WorkingDirectory=/var/www/firefrost-services/services/arbiter
ExecStart=/usr/bin/node src/index.js
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Copy to /etc/systemd/system/, then:

sudo systemctl daemon-reload
sudo systemctl enable arbiter
sudo systemctl start arbiter

🎯 Deployment Targets

Services run on different servers based on their purpose:

Service Server Location
Arbiter Command Center Dallas, TX
Whitelist Manager Panel VPS TBD
Modpack Checker TX1 Dallas Dallas, TX

Each server clones the entire repo but only runs its designated services.


📚 Documentation

  • Architecture Decision: See operations-manual/docs/reference/architecture-decisions/firefrost-services-monorepo-decision.md
  • Service-specific docs: Each service has its own README in services/[service-name]/
  • Shared package docs: See shared/README.md

🤝 Contributing

This repository is maintained by:

  • Michael "Frostystyle" Krause (The Wizard) — Technical lead
  • Meg "GingerFury" (The Emissary) — Community manager
  • Holly "unicorn20089" (The Catalyst) — Lead builder
  • Claude (The Chronicler) — AI partner

Contribution Workflow

  1. Create feature branch from main
  2. Develop and test changes
  3. Update service version in package.json
  4. Create PR to main
  5. After merge, tag release: [service]-v[version]

🏷️ Version History

See Git tags for complete version history.


📄 License

Proprietary — All rights reserved by Firefrost Gaming.

This codebase is private and not licensed for public use or distribution.


Fire + Frost + Foundation = Where Love Builds Legacy 💙🔥❄️

For children not yet born.

Description
Monorepo for Firefrost Gaming backend services (Arbiter, Whitelist Manager, Modpack Checker, and future tools)
Readme 1.5 MiB
Languages
JavaScript 52.3%
EJS 17.7%
Python 17.2%
PHP 5.2%
Shell 2.8%
Other 4.8%