--- immediate (blocks revenue or production safety) ---
stripe: create product + price, set price-id in stripe-keys secret
stripe: create webhook endpoint (my.irc.now/billing/webhook), set webhook-secret in stripe-keys secret
trust + safety: apply sql/006_trust_safety.sql + pics/txt hidden migrations, set is_admin=true on admin user
trust + safety: create photodna-credentials secret, set PHOTODNA_ENDPOINT + PHOTODNA_API_KEY on pics deployment
trust + safety: deploy web-api + pics + txt with T&S changes, verify admin panel at /admin/reports
alertmanager: add cert-manager + CNPG metrics (needs ServiceMonitors in other namespaces)
alertmanager: add IRC delivery via bot webhook relay
deploy bouncer watcher: build + rollout web-api, verify existing bouncers get annotated + SASL set
verify NS SAPASSWD works on ergo (if not, adjust ensure_ergo_account to use correct oper command)
shared bouncer: oc login, rebuild + deploy soju-operator (gamja sidecar + migration module)
shared bouncer: rebuild + deploy web-api (plan gating for bouncers + networks)
shared bouncer: build + deploy bouncer-webhook (oc new-build, apply deploy/bouncer-webhook/)
shared bouncer: end-to-end test free user flow (chat.irc.now -> soju-shared)
shared bouncer: end-to-end test pro upgrade + dedicated bouncer + gamja sidecar
shared bouncer: wire up migration trigger in bouncer create handler (connect to soju tenant DBs)
shared bouncer: implement soju-level upstream network limit for free tier (1 network)
shared bouncer: implement downgrade flow UI (network picker for reverse migration)

--- next up ---
status.irc.now: deploy Upptime on GitHub Pages, monitors all endpoints
argocd: finish app-of-apps rollout
network management tab: deploy to cluster, verify wildcard DNS *.irc.now, test create/delete flow
custom domains: CNAME endpoint for user subdomains (not default router FQDN)

--- backlog (features) ---
log search add-on ($2/mo, full-text search across scrollback)
bots use irc.bot cloak / own bouncer
keep me logged into chat (session persistence)
fix text contrast dark grey on black
username + pw for irccloud migration: maybe use api key instead? also migration fails
backup upsell
opensource operators + pastebin + pics

irc.bot align landing page with product
net.irc.now landing page: deployed at network.irc.now, needs DNS CNAME in Cloudflare
link stats.irc.now from dashboard
add proper tests to ensure metrics in dashboards stay private to user

--- backlog (metrics ideas) ---
per-network message volume (which networks are most active across all bouncers)
peak concurrent downstream connections (soju connection count gauge)
onboarding funnel: signup -> bouncer create -> first message -> first week active
time-to-first-bouncer (latency from signup event to bouncer_create event)
feature adoption: % pro users with content_expires=false, % users who migrated from irccloud
error rates by service (HTTP 4xx/5xx split in Grafana)
storage growth rate prediction (linear extrapolation from timeseries)
bot execution metrics: script runs, errors, avg execution time (Phase 6)
retention by acquisition channel once attribution tracking exists

--- backlog (infrastructure) ---
faster builds
mTLS / secure connections service to service
email sending infra for transactional emails
security audit

--- business/marketing (non-code) ---
imprint magickly llp uk
blog
support email
sticker ideas
merch shop (print-on-demand, stickers + apparel)
legal stuff: review draft terms/privacy/aup pages, get legal sign-off
search console
promo ugc, reddit, tiktok etc
