Skip to content

feat: System status signaling — declare outages without taking site down #546

Description

@tompscanlan

Summary

We need a way to signal technical difficulty or maintenance to users without taking the whole site down. An admin/ops person should be able to set and clear a status message that appears in the platform UI.

Requirements

  • Manual trigger (admin/ops initiated)
  • Free-form message with severity level (info / warning / critical)
  • Visible as a banner in the platform app (openmeet-platform)
  • CLI/kubectl workflow to set and clear
  • Must be fast to activate in an emergency

Suggested approach: ConfigMap + API endpoint

Simplest approach that leverages existing infrastructure:

  1. ConfigMap — Store status message and severity in a Kubernetes ConfigMap (or a simple JSON file for non-k8s deployments)
  2. API endpointGET /api/status returns the current status message (if any)
  3. Platform polling — Frontend polls /api/status periodically (every 60s + on tab focus) and shows a banner when active

API

// GET /api/status
{
  "active": true,
  "severity": "warning",  // "info" | "warning" | "critical"
  "message": "We're experiencing intermittent issues with event publishing. Working on a fix.",
  "since": "2026-03-02T14:00:00Z"
}

Setting status

# Via ConfigMap (k8s)
kubectl create configmap system-status \
  --from-literal=active=true \
  --from-literal=severity=warning \
  --from-literal=message="Maintenance in progress" \
  -n prod --dry-run=client -o yaml | kubectl apply -f -

# Clear
kubectl delete configmap system-status -n prod

Platform UI

  • Use Quasar's QBanner component
  • Color by severity: blue (info), yellow (warning), red (critical)
  • Dismissible but reappears on next poll if still active

Existing building blocks

  • Platform already has a version polling system (10 min + tab focus events)
  • Quasar Notify/Banner components available

Trade-offs

  • ~60s propagation delay (ConfigMap volume mount refresh) — acceptable for most scenarios
  • For instant propagation, could use Redis pub/sub or a direct API write endpoint instead of ConfigMap

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions