0.3.1
0.3.0 closes the gap between what's happening and what you know. Monitoring tools are full of quiet blind spots. Blank while a monitor warms up. Silent while your certificate runs out. Rounding 99.9942% to something prettier. Locked behind one login. This release closes them: expiry warnings weeks before the browser warning, real uptime from minute one, four decimals of truth, a CLI that answers in one keystroke, and your whole team on one source of truth.
What's new in 0.3.0
- Bring your team. Multiple users with admin and viewer roles. Mint a single-use invite link from the new Team settings page, valid for 7 days, and the recipient lands signed in with the role you chose. Admins run the system, viewers see everything without the keys. Ships across dashboard, API, and
pulsectl userscommands, with full OpenAPI coverage. - Catch expiry before your users do. Pulse now watches the two clocks every site is racing against, domain registration and TLS certificate. An amber chip appears on the monitor the moment either enters its warning window, and a new Domain & Certificate card shows the expiry dates, issuer, registrar, and how each fact was verified, the certificate by TLS probe and the domain by RDAP. Facts are shared assets deduplicated by root domain, so fifty monitors on one domain cost one lookup, and they refresh every 10 minutes.
- Content checks. Monitors can assert the response body contains expected text, with a distinct content mismatch failure state. A page that answers 200 with the wrong content is now a caught failure, not a silent one.
- A CLI you can live in. Type
pulsectland get a full interactive menu covering every feature, monitors through diagnostics, walkable with arrow keys. The Dependencies menu lists what you have installed first, and browsing the catalog flows straight into adding. Scripts keep the flag-driven interface and clean TSV, humans get a menu. - Tables that hold their shape. Every CLI table stays aligned and never wraps, whatever the terminal width. Uptime shows four decimals between 99% and 99.9999% with trailing zeros trimmed, and monitors still collecting their first day show real observed uptime instead of a blank.
- A timeline that only shows what happened. Dependency history no longer paints unknown state over periods with real evidence, so the dark squares that could appear after installing a provider are gone.
- Hardened in public. Custom status page CSS is served as a real stylesheet behind a nonce-based Content Security Policy and can no longer inject markup. Token revocation is race free, Next.js moves to 16.2.11, and a crash-on-304 in dependency polling is fixed. Existing installs upgrade in place, migrations run on deploy.
Fixes and improvements in 0.3.1
- Expiry monitoring that actually collects. Every domain and certificate check in 0.3.0 silently rolled back at its final cleanup step, leaving the new expiry data empty in production. The cleanup is fixed and covered by a regression test against real Postgres, so the Domain & Certificate card fills in from the first check after upgrading.
- Honest run accounting. Domains that RDAP simply has no data for now count as unknown instead of failures, so a TLD without coverage can never mask a real probe regression. Certificate probes that cannot complete a handshake remain failures, because they are.
- Sign-in that survives a bad connection. A network failure during sign-in or invite acceptance no longer strands the button at Signing In forever. Both forms recover with a clear message, keyboard focus is restored for a retry, and the button holds its busy state through the redirect instead of flickering back to idle.
- Sharper auth flows. Native form validation runs before any server round trip, join errors focus the field they are about, the invalid-invite screen ends in a real button instead of a footnote link, and the already-signed-in state offers an actual sign-out action.
- Polish everywhere else. Roles read Admin and Viewer in every picker, visitors with a stored light or system theme no longer see a dark flash on first paint, incident detail explains an undetermined cause instead of rendering blank, and small tap targets across incident and invite screens now clear the accessibility minimum.