# 🔥❄️ 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 - **[Arbiter](services/arbiter/)** — Discord bot for subscription automation and role management - **[Whitelist Manager](services/whitelist-manager/)** — Pterodactyl Panel integration for Minecraft whitelist automation - **[Modpack Version Checker](services/modpack-version-checker/)** — Monitors modpack updates across game servers ### Experimental - **[Future](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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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: ```javascript 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 ```javascript // In your service import { logger, formatDiscordEmbed } from '@firefrost/shared'; logger.info('Service started'); ``` ### Running Tests (Future) ```bash # 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: ```ini [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: ```bash 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](https://git.firefrostgaming.com/firefrost-gaming/firefrost-services/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.**