Operations HQ

ModReady Operations HQ

Workflow Architecture · Updated 2026-03-18 · Generated 2026-03-22 06:21
Active / Running Partial / In Progress Planned / Not Started
📋
Contribute: This dashboard covers business, growth, and analytics flows. Product, platform, and infrastructure processes need to be added to complete the full picture. Edit data/ops_status.yaml — instructions and templates are at the top of the file.
💰
Revenue & Marketing Ad spend tracking, billing, financial dashboards, tax reporting
3 FLOWS
Google Ads → Performance Analytics 0h agoUpdated within 24h — healthy. File: data/costs/adwords_daily.csv
How ad spend data gets from Google to our dashboards, daily and fully automated
Google AdsWhere we run paid search ads to acquire customers. All spend is in SEK.
Apps ScriptA Google Apps Script runs daily at 06:00 CET. It pulls campaign data (impressions, clicks, cost, conversions) via Google Ads Query Language and writes rows to a Google Sheet.
Google SheetsStaging area — data lands in the 'Adwords_Daily' tab. The sheet is published as a CSV so scripts can download it.
sync_ads_from_sheet.shA shell script that downloads the published CSV from Google Sheets to a local file. Runs in GitHub Actions.
adwords_daily.csvLocal CSV file with columns: Date, Campaign, AdGroup, Impressions, Clicks, Cost_SEK, Conversions, ConversionValue_SEK, CPA_SEK.
Dashboard + ROAS ReportTwo scripts consume this: analyze_roas.py (generates a markdown report) and generate_dashboard.py (builds the visual dashboard).
Stripe → Financial Dashboard 0h agoUpdated within 24h — healthy. File: data/stripe_subscriptions.json
All subscription data pulled daily, turned into KPI dashboard, auto-deployed
Stripe APISource of truth for all billing. Contains subscriptions, customers, invoices, payment events.
export_stripe_subscriptions.shShell script that fetches all ModReady subscriptions (filters out non-ModReady products like VIP). Handles multi-item subscriptions.
generate_dashboard.pyPython script that calculates MRR, churn rate, ARPU, at-risk MRR, ROAS, and builds an interactive HTML dashboard with charts.
GitHub ActionsRuns daily at 06:00 UTC. Commits updated data files and dashboard to the repo.
dashboard.modready.ggPassword-protected dashboard deployed via GitHub Pages (separate repo: werket/modready-dashboard).
VAT Liability Reporting
EU tax calculations — ~55% of customers are EU-based, requiring ~21% VAT
stripe_subscriptions.jsonContains currency (EUR/USD) and region data for each subscription.
generate_vat_report.shAnalyzes EU vs non-EU revenue. EU = currency EUR or region Europe. Applies 21% VAT rate.
VAT ReportMonthly report in reports/vat/ with breakdown by region, currency, and total liability in EUR and SEK.
👥
Customer Operations CRM, email automation, support, customer lifecycle
4 FLOWS
Stripe Webhooks → CRM → Automation
When a customer pays, fails to pay, or cancels — our systems react automatically
Stripe EventReal-time events: subscription.created, invoice.payment_failed, subscription.deleted, charge.dispute.created, etc.
CRM Webhook HandlerFastAPI endpoint at /api/webhooks/stripe. Validates HMAC-SHA256 signature, routes events to handlers.
Database UpdateCreates/updates Customer + Subscription records in PostgreSQL. Tracks cancellation reasons, metadata.
Automation EngineMatches the event type to automation rules. If a rule matches, it enqueues an email sequence with scheduled delays.
Email via ResendQueue processes every 2 minutes. Renders Jinja2 template with customer data. Sends via Resend API. Tracks delivery.
Email Automation Sequences
Automated email campaigns triggered by customer lifecycle events
Trigger EventExamples: subscription.created → welcome flow, payment_failed → dunning flow, subscription.deleted → win-back flow.
Automation RuleDefines a sequence of steps with delays. E.g., Step 1: immediately send welcome email, Step 2: send tips after 24 hours.
Email QueueItems scheduled for future delivery. Processed every 2 minutes by the CRM scheduler. Idempotent — won't re-send.
Resend APIHandles actual email delivery. Returns tracking data: opens, bounces, clicks.
AnalyticsOpen rates and clicks are tracked in the CRM but not yet surfaced in a dashboard. Planned improvement.
Discord Support System
Customer support tickets handled via Discord bot running on Node 1
Customer opens ticketCustomer clicks the create-ticket button in the ModReady Discord server.
Bot triagesCategorizes ticket type: purchase, setup, technical, billing, other. Creates a private channel.
Staff notifiedSupport staff (cxtides, fonzie1984, picklecord) get notified in the ticket channel.
Resolution & closeStaff resolves the issue, ticket is closed. Transcript saved.
CRM Daily Data Sync
Stripe subscriptions and trial leads synced into CRM every morning
Stripe APIPaginated fetch of all subscriptions (100 per page). Filters out non-ModReady products.
CRM Stripe SyncRuns daily at 08:00 UTC via APScheduler. Creates/updates Customer + Subscription records. Detects status changes.
Trial DatabaseTrial leads from /var/www/modready-api/trials.db synced at 07:00 UTC into CRM.
PostgreSQLCRM database with full customer history, event timeline, subscription details.
Customer Journey iThe customer lifecycle from discovery to retention. Green = fully automated, amber = partially automated, gray = not yet built.
Discovery
Customer finds ModReady via Google Ads, Reddit, or word of mouth
Trial
Free trial signup on website — server auto-provisioned
Purchase
Stripe Checkout creates subscription, server activated
Onboarding
Welcome email sequence + setup tips via CRM automation
Active
Customer using their server, support available via Discord
At-Risk
Payment failed (dunning emails) or cancel_at_period_end set
Churned
Subscription ended, server suspended, data kept safe
Win-back
Re-engagement email campaigns to churned customers
🚀
Development & Deploy Website, CI/CD, staging, Git workflow
2 FLOWS
Website Deployment Pipeline
Code changes go from local development through staging review to production at modready.gg
Local devNext.js 16 + TypeScript + Tailwind CSS 4. Work on the 'staging' branch.
Push to stagingGit push to staging branch triggers Coolify auto-deploy.
Coolify buildsDocker build + deploy to staging server on Node 1 (port 3000).
Staging reviewTest at staging URL. Verify changes work before production.
Merge to mainCreate PR, get approval, merge. Never push directly to main.
Production liveCoolify auto-deploys from main branch → modready.gg (port 80).
Dashboard Auto-Deploy
GitHub Actions pipeline: sync data → generate dashboards → commit → deploy — runs daily
Trigger (06:00 UTC)GitHub Actions cron schedule. Can also be triggered manually via workflow_dispatch.
Sync ads CSVDownloads latest Google Ads data from published Google Sheet.
Generate dashboardsRuns generate_dashboard.py (financial) + generate_ops_dashboard.py (this dashboard).
Commit to repoAuto-commits updated HTML files + data to the main repo.
Deploy to GH PagesPushes to werket/modready-dashboard repo via SSH deploy key. Serves dashboard.modready.gg.
🏗️
Infrastructure & AI Servers, services, agents, scheduled automation
2 FLOWS
Game Server Management
Pterodactyl Panel on Node 1 managing game servers across all 20 nodes
Pterodactyl Panelpanel.modready.gg — web UI for managing game servers. Runs on Node 1 with MySQL backend.
Wings DaemonRuns on all 20 nodes. Manages Docker containers for game servers. Communicates with Panel via API.
Customer PanelCustomers log in to panel.modready.gg to start/stop servers, manage files, install modpacks.
Auto-Suspend / Unsuspend
Servers automatically suspended when payment fails, unsuspended when payment succeeds
Payment failsStripe sends invoice.payment_failed webhook. Subscription enters past_due status.
CRM processesWebhook handler updates subscription status, triggers dunning email automation.
Server suspendedPterodactyl API suspends the game server. Customer can't access it.
Payment succeedsCustomer pays (or card retried successfully). Stripe sends invoice.payment_succeeded.
Server unsuspendedServer automatically reactivated. Customer regains access.
Server Providers iHosting companies running Pterodactyl Wings nodes. Multi-provider = less single-vendor risk.
12
Hetzner
EU
5
OVH
EU
2
HostHatch
US
1
PebbleHost
EU
Services iKey software running on the fleet. Most on Node 1 (management server). Hover (i) for details.
Pterodactyl PanelNode 1iGame server management UI at panel.modready.gg
Pterodactyl WingsNode all 20iGame server daemon running on every node
CoolifyNode 1iContainer orchestration — auto-deploys website and CRM
MySQLNode 1iPterodactyl panel database
PostgreSQLNode 1iCRM database (Docker container)
Discord BotNode 1iSupport ticket system at /var/www/modready-discord-bot/
CRM API (FastAPI)Node 1iCustomer management + automation engine
Website (Next.js)Node 1imodready.gg served via Coolify
DashboardNode externalidashboard.modready.gg on GitHub Pages
AI Agents (2/5 active) iAI agents handling work autonomously. Part of the AI-first operating model.
CFO Strategic FinanceiRunning in production. Owner: adam. Config: agents/cfo-strategic-finance/.
Financial analysis, SaaS metrics, forecasting, board reports
adam
stripenotion
Discord Support BotiRunning in production. Owner: jonathan. Config: /var/www/modready-discord-bot/.
Ticket triage, auto-responses, customer support
jonathan
discord
Operations AgentiIn development or design phase. Owner: adam. No config yet.
Infrastructure monitoring, node health checks, auto-remediation
adam
sshpterodactyl
Marketing AgentiIn development or design phase. Owner: adam. No config yet.
Ad copy generation, campaign analysis, Reddit scouting
adam
google-adsslack
Onboarding AgentiNot yet started. Owner: jonathan. No config yet.
New customer setup guidance, modpack recommendations
jonathan
none
Scheduled Jobs Everything that runs automatically on a schedule
7 JOBS
JobScheduleSystemDescription
Google Ads Data ExportDaily 06:00 CETGoogle Apps ScriptPulls campaign metrics from Google Ads API → Google Sheets
Dashboard Generation + DeployDaily 06:00 UTCGitHub ActionsSyncs ads data, generates financial + ops dashboards, commits and deploys to dashboard.modready.gg
CRM Trial SyncDaily 07:00 UTCCRM SchedulerImports trial leads from trials.db into CRM database
CRM Stripe SyncDaily 08:00 UTCCRM SchedulerFetches all Stripe subscriptions, creates/updates CRM records, detects status changes
Email Queue ProcessorEvery 2 minutesCRM SchedulerFinds pending automation emails due for send, renders templates, sends via Resend API
Campaign SchedulerEvery 5 minutesCRM SchedulerChecks for scheduled email campaigns due for batch send
Churn InsightsWeekly (Mon 08:00 UTC)CRM SchedulerGenerates weekly churn analysis, retention metrics, stores as ChurnInsight record
📋 Improvement Roadmap iItems from the March 2026 architecture report + identified gaps. Click any item to expand details — what needs to happen, the value it provides, and implementation risks.
2 complete, 4 in progress, 6 not started — click items to expand
Establish branch protection rules high
What: Prevent direct pushes to main branch. Require pull requests for all changes.
Value: Prevents accidental breaking changes in production. Creates audit trail.
Risk: Low — Git/GitHub configuration only.
Implement staging environment for website high
What: Separate staging deployment on Coolify that mirrors production for pre-release testing.
Value: Catch bugs before they reach customers. Safe place to test new features.
Risk: Low — Coolify supports multiple environments natively.
Create unified runbook for incident response medium
What: Step-by-step procedures for common incidents: node down, database issues, payment failures, DDoS.
Value: Faster incident resolution. Enables anyone (or an AI agent) to respond consistently.
Risk: Low — documentation effort, no infrastructure changes needed.
🔶 Set up structured task management high
What: Move from ad-hoc Claude conversations to Notion or Linear with priorities and deadlines.
Value: Clear visibility into what's being worked on, what's blocked, and what's next.
Risk: Low — tooling choice. Small risk of over-engineering process for a small team.
🔶 Automate deployment pipeline (CI/CD) high
What: Add automated tests, build verification, and post-deploy health checks to the deployment process.
Value: Catch errors before deployment. Enable confident, frequent releases without manual verification.
Risk: Medium — bad CI config could block all deployments. Start with non-blocking checks.
Centralize monitoring and alerting high
What: Set up Uptime Robot or similar for service monitoring. Alert to Slack/Discord on downtime.
Value: Know when things break before customers report it. Reduce downtime and response time.
Risk: Low for setup. Risk of alert fatigue if too many noisy alerts configured.
🔶 Document all manual operations medium
What: Identify and document every manual task (server setup, customer migrations, billing adjustments) as future automation candidates.
Value: Foundation for the AI-first model. Can't automate what isn't documented.
Risk: Low — documentation only. Requires ongoing discipline to keep updated.
AI agent coordination framework low
What: Framework for multiple AI agents to collaborate, share context, and hand off tasks between each other.
Value: Enables scaling automation without human coordination overhead.
Risk: High complexity. Premature if current individual agents aren't mature yet.
Add error tracking (Sentry or similar) high
What: Integrate error tracking in website, CRM, and Discord bot. Real-time alerts for unhandled exceptions.
Value: Catch bugs that users don't report. Understand error frequency and patterns.
Risk: Low — SaaS integration. Small performance overhead from tracking SDK.
Add uptime monitoring for critical services high
What: Monitor: modready.gg, panel.modready.gg, dashboard.modready.gg, CRM API, Discord bot.
Value: Immediate notification when any service goes down. Track uptime SLA over time.
Risk: Low — external service, no infra changes. Cost: ~$5-10/month.
Automated backup verification medium
What: Verify backups are complete and restorable. Test recovery procedure monthly.
Value: Confidence that we can actually recover from data loss. Customer trust.
Risk: Medium — recovery testing must be done carefully to avoid affecting production data.
🔶 Build unified customer view in CRM medium
What: Link Stripe billing, Pterodactyl server data, and Discord tickets into a single customer profile.
Value: Support sees full customer context in one place. Enables smarter automation triggers.
Risk: Medium — requires API integrations across 3 systems. Data consistency challenges.
33%