Why I Built an Uptime Monitor as a Solo Dev

Published: (February 6, 2026 at 07:09 PM EST)
5 min read
Source: Dev.to

Source: Dev.to

Last year, I was running three side projects

  • A SaaS tool
  • A landing page for a client
  • A small API I’d built for fun

None of them had monitoring.

I found out my API had been down for four days when a friend tried to use it and messaged me on Discord. Four days. No alert, no notification, nothing—just a silent 502, making me look like I’d abandoned the project.

That was the moment I decided to build my own monitoring tool.


The problem with existing solutions

I know what you’re thinking — “just use UptimeRobot” or “Pingdom has a free tier.” I tried them. Here’s what I ran into:

ServiceWhat workedWhat didn’t
UptimeRobotBasic uptime checks work fine.It only tells you if a page is up. I needed to know what changed on the page. My client’s landing page was modified by another contractor without telling me. The site was “up” the whole time, but half the content was wrong. No uptime tool caught that.
Betterstack, Pingdom, DatadogGreat products for teams with budgets.I’m a solo dev making between €0‑€50 /month. Paying $29 /month for monitoring is hard to justify when the project makes less than that.
Visualping, ChangeTowerMonitor page content, not just HTTP status.They pinged me for every CSS change, every ad rotation, every timestamp update. I got 15+ false alerts a day and turned off notifications within a week.

What I actually wanted was simple: tell me when something meaningful changes on a page, and explain what changed in plain language.


So I built ArkWatch

ArkWatch is a REST API that monitors any URL on a schedule. Instead of only checking for a 200 status code, it does the following:

  1. Fetches the page content on your schedule (every minute to every 24 hours).
  2. Diffs the content against the previous version.
  3. Sends the diff to Mistral AI, which analyses what actually changed.
  4. Emails you a plain‑language summary.

So instead of a raw HTML diff that looks like gibberish, you get something like:

“The pricing page was updated. The Pro plan increased from €19 to €29 /month. A new Enterprise tier was added at €99 /month. The free tier now includes 5 URLs instead of 3.”

Or for an uptime scenario:

“The API endpoint is returning a 503 Service Unavailable error. The page content changed from the normal JSON response to an nginx error page.”

The AI filters out noise — session tokens, cookie banners, ad rotations, dynamic timestamps — and only alerts you when something that matters has changed.


The tech stack

I kept it deliberately boring:

  • Python 3.13 + FastAPI – the API
  • httpx (async) – fetching pages
  • Playwright – rendering JavaScript‑heavy sites
  • Mistral AI – change analysis (mistral‑small‑latest, cheap & fast)
  • Redis – caching
  • Stripe – payments
  • Hetzner VPS (Germany) – hosting (EU data residency)

No Kubernetes. No micro‑services. No event‑driven architecture. Just a FastAPI app, a worker process, and a cron‑like scheduler. The whole thing runs on a single €5 /month VPS.

Total running cost: ~€5 /month for the server + a few cents for AI calls.


What I got wrong

I almost built a dashboard

I spent two days designing a React frontend with charts, graphs, and real‑time WebSocket updates. After talking to a few developers who manually check websites, every single one said: “I don’t want another dashboard. Just send me an email.”

So I scrapped the frontend and went API‑first. You can integrate ArkWatch into any workflow you already have — a Slack bot, a cron job, a CI pipeline, or just email alerts. It took less time to build and it’s what people actually wanted.

Noise filtering is harder than monitoring

Getting the page content and diffing it is the easy part. Deciding which changes matter is the hard part. I tried three approaches:

ApproachResult
Keyword matchingToo many false positives (e.g., “price” appears in footer copyright).
Percentage thresholdsWorks for big changes, misses important small ones (a single price change is 0.1 % of the page).
AI analysisMistral reads the diff with context and makes a judgment call. This stuck.

The min_change_ratio parameter still exists as a pre‑filter to save on AI costs, but the actual decision of “is this change important?” comes from the AI.

I overthought pricing

I spent a week researching pricing strategies, reading blog posts about value‑based pricing, and building spreadsheets. In the end I just looked at what competitors charge and set my prices lower:

PlanPriceURLsCheck Interval
Free€0324 hours
Starter€9 /mo101 hour
Pro€29 /mo505 minutes
Business€99 /mo1 0001 minute

The free tier is real — no credit card, no 14‑day trial, no feature gates. You get 3 URLs with daily checks and full AI summaries, forever.


Where I am now

Honest numbers: zero paying customers, zero revenue. The API has been live for about a week. I’ve published it, set up Stripe, written docs… and crickets.

But the product works:

  • API responses under 50 ms
  • AI summaries are genuinely useful
  • Stripe integration handles subscriptions correctly
  • I’m using it for my own projects, so at minimum it solves my original problem.

What I’m looking for

I’m looking for 3‑5 beta testers — people who currently check websites manually and want to automate it. Developers, SEO folks, e‑commerce operators, anyone with a list of URLs they check regularly.

The free tier gives you everything you need to try it out. If it’s useful, great. If it’s not, I want to know why.

Try it

  • API:
  • Docs:
  • Landing page:

Feel free to reach out if you’re interested in testing or have feedback!

[https://arkforge.fr/arkwatch.html](https://arkforge.fr/arkwatch.html)

## Quick start — register for a free API key

```bash
curl -X POST https://watch.arkforge.fr/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "name": "Your Name", "privacy_accepted": true}'

Enter fullscreen mode

Exit fullscreen mode

If you have questions or feedback, I’m at contact@arkforge.fr. I read every email.

Solo dev, zero users, building in public. If you’ve been through the same grind, I’d love to hear how you got your first users.


Questions for you

I’m genuinely curious — if you’re a developer running side projects:

1. How do you currently know when your site goes down?
(Honest answer — even “I don’t” counts)

2. Would you want AI‑powered change summaries, or is a simple “page changed” notification enough?

3. What’s one page you’d monitor right now if you could set it up in 30 seconds?

Drop a comment — I reply to everyone.

Back to Blog

Related posts

Read more »

Jenkins Agents lab

0 What “create” vs “enable” means Create agent – define a node in the Jenkins UI name, labels, workspace. Enable agent – start the agent process so it connects...