Back to projects

Pulse

A single-binary, self-hosted uptime monitor with a built-in status dashboard.

GoBBoltDockerSystemdREST API

What it is

Pulse is a self-hosted uptime monitor that ships as a single binary. Drop it on any server, point it at your endpoints, and get alerted when something goes down. No runtime, no database server, no containers required.

What it does

Pulse checks HTTP endpoints, TCP ports, and WebSocket connections on configurable intervals. On state change it fires alerts through Slack, Discord, email, or any generic webhook. A failure debounce threshold stops noise from flaky networks. There's a built-in dark-mode status dashboard at / and a JSON API at /api/status for integrations. All state lives in an embedded BBolt key-value file — no Postgres, no Redis.

Why I built it

Most uptime tools are SaaS products that phone home to a third party, or open-source projects that drag in a full database and a dozen services just to watch a couple of URLs. I wanted something I could drop on a cheap VPS, point at my own projects, and forget about — a single binary, a single config file, done.

Architecture

The repo is split into focused packages: checker (health probe logic), scheduler (interval management), store (BBolt wrapper), notifier (alert delivery), and api (HTTP handlers + embedded dashboard). Each package has its own tests. A single main.go wires them together and compiles to a binary for Linux, macOS, Windows, and ARM64.

Deployment

Ship it as a systemd service, a Docker container, or via Docker Compose. A --init flag generates a starter config.yaml and --validate checks it before you restart. An optional api_key protects the API and dashboard from public access.