# irc.now Platform Roadmap High-level vision and phase overview. Detailed implementation plans are written per-phase as work begins. ## Vision irc.now is a hosted IRC services platform. Sign up, get a bouncer. Upgrade to pro, get a dedicated bouncer with a custom hostname. Host your own IRC network. Run bots with Lua scripts. Share images and pastes. Everything connected through one account with SSO. ## Completed Phases ### Phase 1: Foundation -- done Core platform: Rust workspace, CNPG, Keycloak at auth.irc.now, soju-operator, account portal at my.irc.now, landing page at irc.now. ### Phase 1.5: Fill the Gaps -- done Auth guard, users table, bouncer CRUD, Stripe checkout, content pages, profile, favicons/OG images. Remaining ops tasks: replace placeholder stripe-keys, Upptime deployment, remove znc.josie.lol DNS. ### Phase 2: Observability -- done Prometheus (OCP user workload monitoring), Grafana at stats.irc.now (Keycloak SSO), ServiceMonitors for all services, Alertmanager (email delivery). ### Phase 3: Supporting Services -- done chat.irc.now (gamja), txt.irc.now (pastebin), irc.pics (image host), content expiry synced to Keycloak claims. Remaining: log search add-on ($2/mo). ### Phase 5: Analytics -- done Events table, business metrics (MRR, signups, conversion, churn), per-user stats dashboard, Grafana admin dashboards. Remaining: retention cohorts, onboarding funnel, feature adoption metrics. --- ## Active / In Progress ### Phase 4: Network Hosting Let users run their own IRC networks. Starter: $12/mo (50 users, 1 server, 3 bots). Growth: $24/mo (200 users, 3 servers, 10 bots). | Item | Description | Status | |------|-------------|--------| | ergo-operator | kube.rs operator managing ErgoNetwork CRDs, OAuth2, IP cloaking | done | | ErgoNetwork CRD | Reconciles into Deployment, ConfigMap, Service, Route, Certificate | done | | net.irc.now | First ErgoNetwork instance, upstream auto-configured via bouncer watcher | done | | IRCCloud migration | `/migrate` flow: import servers + channels from IRCCloud into soju | done | | Portal integration | Network management tab (list, create, detail, delete, status polling) | done | | DNS | Wildcard `*.irc.now` or per-tenant subdomain creation | planned | **Architecture note:** ergo is MIT licensed, so if you need to patch it for multi-tenant features (custom MOTD, connection limits, telemetry hooks) there are no license constraints. --- ### Phase 6: Bots Managed IRC bot runtime. The differentiating feature. Standalone: $2/mo per bot. Network hosting plans include bot quotas. | Item | Description | Status | |------|-------------|--------| | Bot runner | Rust service, manages bot instances in-process, one mlua (Lua 5.4) VM per bot | done | | IRC connectivity | Bots connect through user's soju bouncer to any network | done | | Built-in modules | Moderation (anti-spam, flood, pattern ban), utility (URL titles, !seen, stats), feeds (RSS, webhook relay, reminders) | planned | | Lua sandbox | Event-driven API: on_message/on_join/etc, IRC commands, KV store, timers, rate-limited http_get | done | | Portal UI | Bot CRUD, module toggles, Lua script editor, live log viewer, KV browser | planned | **Runtime model:** All bots run in a single Deployment, multiplexed on async IRC connections via tokio. No per-bot CRD -- configs live in the database. **Sandbox boundaries:** No `os`, `io`, `require`, `loadfile`. Scripts can only call the IRC API and KV store. `http_get` is allowlisted and rate-limited. --- ## Cross-Cutting Concerns ### Auth All services authenticate via Keycloak OIDC. The `common` crate provides Axum middleware that validates tokens and extracts `UserClaims` (sub, email, plan, stripe_customer_id). ### Design System Newsreader/Outfit/JetBrains Mono fonts, green-on-dark palette, IRC-native component patterns. Shared via static CSS files. ### Deployment Everything runs on OCP. Container images built via `oc builds` (multi-stage Rust builds to UBI9-minimal). OCP Routes handle TLS termination per subdomain. cert-manager issues certificates via LetsEncrypt. CNPG manages PostgreSQL. platform-operator manages WebService/ChatService/MinioInstance CRDs. ### Database Strategy Single CNPG cluster. Separate databases per service (keycloak, accounts, paste, pics). Per-tenant databases for operators (soju_*, ergo_*). Operators hold master credentials and create scoped roles per tenant.