# Architecture Decisions ## ADR-001: Discord.js over Discord.py **Status:** Accepted **Context:** Node.js and Python both viable. Team has stronger Node.js experience. **Decision:** Use Discord.js for the bot runtime. **Consequences:** Faster development velocity; ecosystem rich with community plugins (command handling, modals, components). ## ADR-002: PostgreSQL over MongoDB **Status:** Accepted **Context:** Mileage data is relational (user → role → event → score). MongoDB adds flexibility but sacrifices query power. **Decision:** Use PostgreSQL with JSONB columns for extensible user metadata. **Consequences:** Schema migrations needed for new features; joins straightforward. ## ADR-003: Polling over Webhooks for Content Sources **Status:** Accepted **Context:** YouTube, Instagram, TikTok do not provide push webhooks to arbitrary third parties without approval. **Decision:** Poll public APIs on a CRON schedule (15-min interval). **Consequences:** ~5 min delay between publish and Discord post; API quota management required. ## ADR-004: Modular Monolith over Microservices **Status:** Accepted **Context:** Single-developer or small team; deployment complexity of microservices not justified. **Decision:** Single process with internal module boundaries (commands, events, mileage, syndication). **Consequences:** Simpler deploy, debug, and develop; can extract services later if needed.