Statusnook is a self-hosted status page and endpoint monitoring tool built in Go, designed for DevOps teams and SaaS providers who need to publicly display service health while privately receiving incident alerts. It solves the problem of fragmented monitoring tools by combining a clean status page, customizable HTTP monitors, and multi-channel notifications into a single, easy-to-deploy application. Whether you’re running a $5 VPS or a dedicated server, Statusnook gives you full control over your data and infrastructure.
Built with Go and powered by SQLite for lightweight persistence, Statusnook uses HTMX for dynamic UI updates and supports deployment via standalone binaries, Docker, reverse proxies (Caddy, NGINX), or one-click cloud templates on DigitalOcean, Vultr, Railway, and Zeabur. It includes automatic TLS certificate management via Let’s Encrypt and in-app updates to eliminate manual maintenance.
What You Get
- Automatic HTTPS - Automatically provisions and renews TLS certificates via Let’s Encrypt when you point a domain to your server, eliminating manual SSL configuration.
- Customizable HTTP Monitors - Create monitors with configurable HTTP methods, headers, request bodies, timeout settings, and status code expectations for any endpoint.
- Multi-channel Notifications - Send incident alerts to Slack and multiple SMTP email providers, with support for mail groups to route alerts to different teams.
- Private Alerts, Public Status - Receive incident and maintenance alerts privately via Slack/email while displaying only public status updates to visitors.
- In-App Updates - Upgrade Statusnook with a single click in the UI; no SSH, scripts, or manual container pulls required.
- SQLite Backend - Lightweight, file-based database for storing monitor history, notifications, and configuration without requiring external databases like PostgreSQL or MySQL.
Common Use Cases
- Running a SaaS status page - A SaaS company uses Statusnook to publicly display uptime metrics and incident timelines while privately alerting their on-call team via Slack during outages.
- Monitoring internal APIs - A DevOps engineer deploys Statusnook on a $5 VPS to monitor internal microservices and notify the team via email when endpoints return 5xx errors.
- Open-source project transparency - A maintainer of a popular open-source tool uses Statusnook to show real-time API health to contributors and users, reducing support tickets.
- Multi-team incident communication - A product team configures mail groups to send status updates to customers via email while sending detailed alerts to engineering via Slack.
Under The Hood
Architecture
- Monolithic structure with HTTP routing, database operations, cryptographic functions, and DNS logic all tightly coupled within a single main package, violating separation of concerns
- Direct SQL execution and hardcoded schema migrations embedded in the main binary, with no dedicated data access or migration layer
- Absence of dependency injection or service registry, leading to rigid component coupling and poor testability
- Business logic intermixed with HTTP handlers, lacking clear controller-service-repository boundaries
- Static assets and migrations bundled directly into the binary, reducing configurability and extensibility
- Certificate management logic hardcoded with no abstraction for pluggable backends or policy enforcement
Tech Stack
- Go 1.22 backend compiled into a static binary with CGO-enabled system integrations
- Embedded SQLite database managed via inline SQL migrations from bundled files
- Minimalist HTTP server built with standard net/http, avoiding external web frameworks
- Docker multi-stage builds optimize deployment size by isolating build and runtime environments
- All templates, schemas, and assets embedded directly into the binary for zero-dependency deployment
- Reliance on Go’s native toolchain for building and testing, with no external build or test frameworks
Code Quality
- Limited testing with no meaningful assertions, rendering test suites non-functional
- Inconsistent naming conventions and poor error handling with no custom error types or structured recovery
- Absence of type safety mechanisms and static analysis tooling, increasing risk of runtime failures
- No linting or code style enforcement, resulting in inconsistent and unmaintainable code
- Components lack modular boundaries, with utilities and business logic intermingled without clear separation
What Makes It Unique
- Fully automated TLS certificate issuance via embedded ACME client and DNS-based validation, eliminating manual cert management
- Self-contained SQLite database with embedded, versioned migrations that require no external tooling
- Slug-based data model with migration-safe column renaming to ensure URL stability without routing dependencies
- Custom PKIX certificate generation for trusted self-hosted TLS environments
- Integrated DNS server logic to handle ACME challenges without external API dependencies