Real-time service status pages powered by user outage reports and baseline-aware scoring.
Live site: aretheyup.com
aretheyup helps answer a simple question: is a service down for everyone, or just me?
It combines:
- Crowdsourced user reports ("I am having issues")
- Historical baselines by time bucket
- Optional probe-failure signal (when probe data exists)
The result is a clear status for each service:
OperationalIssues Detected
- SEO-friendly status pages (
/,/:slug) - Fast, server-rendered UI with HTMX
- Report endpoint with abuse protection via rate limiting
- Background workers for baseline refresh and incident tracking
- Service management TUI for admins (
managemode)
- Go 1.25+
- Gin + GORM
- PostgreSQL + Redis
- HTMX + Tailwind + DaisyUI
- Go
1.25+ - Docker + Docker Compose
git clone https://github.com/novembersoftware/aretheyup.git
cd aretheyup
cp .env.example .env.localUpdate values in .env.local as needed.
docker compose -f docker-compose.dev.yml up -dgo run main.goServer runs on http://localhost:8080 by default.
The binary supports multiple modes:
# API server (default)
go run main.go
# equivalent:
go run main.go api
# Manage mode (service admin TUI)
go run main.go manage
# Seed mode
go run main.go seed --count 25 --clearSeed flags:
--countnumber of services to seed (default10)--clearclear existing data before seeding
See .env.example for full list. Most important values:
ENV(devorprod)API_PORTDB_DSNREDIS_URLSITE_BASE_URLALLOWED_PAGE_ORIGINS(comma-separated)TRUSTED_PROXIES(comma-separated CIDRs/IPs, optional)REPORT_RATE_LIMIT_MAX_REQUESTSREPORT_RATE_LIMIT_WINDOW_SECONDS
Status is calculated from a rolling 30-minute report window and compared to historical norms.
- Baselines are stored per service and hour-of-week bucket (
0..167, UTC) - Cold start behavior uses conservative hard thresholds
- Mature behavior uses z-score style anomaly checks
- Probe failures (if available) can independently trigger
Issues Detected
Reference implementation:
algorithm/status.goworkers/baseline.goworkers/incidents.go
GET /robots.txtallows public crawling and disallows/api/GET /sitemap.xmlincludes/and active/:slugpages- Absolute sitemap URLs are derived from
SITE_BASE_URL
- Set
TRUSTED_PROXIESto only your real edge/ingress proxy CIDRs - Keep
SITE_BASE_URLset in production /api/*routes require allowed website origin/referer checks
docker compose -f docker-compose.dev.yml downIssues and PRs are welcome. Please open an issue before you start working on larger changes.
MIT. See LICENSE.