Why I built WebKeeper after a decade of running an agency
Posted in Pet-projects
By Dušan Dželebdžić
I've owned and run Symbiotica for over ten years. One question keeps coming back, usually at a bad moment: "Is this still our responsibility?"
There's a spreadsheet, of course. Client name, domain, hosting, a column called notes. Half the cells are empty and the other half were true in 2022.
A domain is about to expire. Whose card is on the registrar account? The client's? Ours? Did we agree to renew it, or just build the site? Everybody is fairly sure somebody else knows.
These questions keep coming up long after a website goes live. The answers are somewhere in an old conversation, or in the head of whoever last dealt with it. Neither is much help when someone else has to take over.
So I built WebKeeper, a shared record of the client websites you look after and who handles what.
Who handles what
For each site, you record who the client is, who controls the registrar account, and who handles the renewal. Those can be three different people. WebKeeper keeps the answers separate and makes the gaps visible.
WebKeeper can look up the registrar. It still needs you to say who has the account and who's agreed to handle the renewal.
You invite the team into the same workspace, set defaults for the common case ("we renew everything unless noted"), and record the exceptions. The next person looking after that site has a place to find the arrangement. They don't have to remember who to ask first.
Adding the sites
You paste in what you've got: domains, URLs, a column copied out of that spreadsheet. WebKeeper sorts out the duplicates and starts checking from the outside. No provider credentials and no plugin to install on anyone's website.
The checks collect HTTP responses and redirects, nameservers and DNS provider, registrar details, and domain and certificate expiry dates where available. Those facts sit alongside the responsibilities you've recorded. The Domains view follows a registration across all the sites that share it, so you can see when several client sites depend on the same domain.
Today, each website is checked every hour, with 30 days of response-time history. A desktop screenshot is taken once a day and kept for a week.
Every collected fact comes with a source and a timestamp. When a lookup fails, WebKeeper says so. A registry refusing a query hasn't told you the domain is unregistered. It's told you nothing, and unknown is a perfectly respectable answer. I spent a surprising amount of time making sure the product never turns "I couldn't check" into "there's nothing there."
When something changes
A nameserver change or an approaching certificate expiry lands in Attention, where issues are ordered by urgency. The technical warning and the responsibility record are in the same workspace, so you can work out who needs to act.
When a check first detects a change, it appears as unconfirmed. WebKeeper requests another check instead of waiting for the next scheduled one. If the change holds, it's confirmed and the old and new values go into the history. If it was a DNS hiccup, the item resolves itself.
Later, when somebody asks "when did the nameservers change?", there's a record to look at.
The boring details
A Go collector does the DNS, TLS, HTTP and RDAP/WHOIS work. PostgreSQL uses row-level security to keep workspaces separate, and it all runs on AWS.
The work also produced a marketing analytics debugging story and an argument with the local SQS setup. Building a product is a reliable way to generate blog posts.
In development
Email alerts, webhooks for Slack, Mattermost and Discord, and bots for messaging apps are in development. The aim is to get the things that need attention into the places where the team already talks.
Higher subscription tiers will let you choose more frequent website checks, down to once a minute. That will be the limit. The client's server has other work to do.
Email configuration checks (MX, SPF, DMARC) and a view of the servers behind the sites are also planned.
Try it
There's a 30-day trial at webkeeper.io, with no credit card required. Paste in the sites you already look after and start recording who handles what.
See how many of those answers you have without opening an old email thread.
Previous: Biro