Tools
Tools: Why I Built an Uptime Monitor as a Solo Dev
2026-02-07
0 views
admin
The problem with existing solutions ## So I built ArkWatch ## The tech stack ## What I got wrong ## Where I am now ## What I'm looking for Last year, I was running three side projects. A SaaS tool, a landing page for a client, and 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 sitting there, making me look like I'd abandoned the project. That was the moment I decided to build my own monitoring tool. I know what you're thinking — "just use UptimeRobot" or "Pingdom has a free tier." I tried them. Here's what I ran into: UptimeRobot worked fine for basic uptime checks. But I didn't just want to know if a page was up. I wanted to know what changed on the page. My client's landing page had been 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, Datadog — great products, but they're built for teams with budgets. I'm a solo dev running projects that make between zero and fifty euros a month. Paying $29/month for monitoring is hard to justify when your project makes less than that. Visualping and ChangeTower — closer to what I needed. They monitor page content, not just HTTP status. But they pinged me for every CSS change, every ad rotation, every timestamp update. I was getting 15+ false alerts a day. I 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. ArkWatch is a REST API that monitors any URL on a schedule. But instead of just checking if the page returns a 200 status code, it does something different: So instead of getting 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. I kept it deliberately boring: No Kubernetes. No microservices. 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: about €5/month for the server plus a few cents for AI calls. That's it. I almost built a dashboard. I spent two days designing a React frontend with charts and graphs and real-time WebSocket updates. Then I talked to a few developers who manually check websites, and every single one said the same thing: "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 whatever workflow you already have — a Slack bot, a cron job, a CI pipeline, or just email alerts. It took me 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. The hard part is deciding which changes matter. I went through three approaches: 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: 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. 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. The API responds in under 50ms. The AI summaries are genuinely useful. The Stripe integration handles subscriptions correctly. And I'm running it for my own projects, so at minimum it solves my original problem. 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 who has 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. Quick start — register for a free API key: If you have questions or feedback, I'm at [email protected]. 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. Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse COMMAND_BLOCK:
curl -X POST https://watch.arkforge.fr/api/v1/auth/register \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]", "name": "Your Name", "privacy_accepted": true}' Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
curl -X POST https://watch.arkforge.fr/api/v1/auth/register \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]", "name": "Your Name", "privacy_accepted": true}' COMMAND_BLOCK:
curl -X POST https://watch.arkforge.fr/api/v1/auth/register \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]", "name": "Your Name", "privacy_accepted": true}' - It fetches the page content on your schedule (every minute to every 24 hours)
- It diffs the content against the previous version
- It sends the diff to Mistral AI, which analyzes what actually changed
- You get an email with a plain-language summary - Python 3.13 + FastAPI for the API
- httpx (async) for fetching pages
- Playwright for JavaScript-heavy sites that need rendering
- Mistral AI for change analysis (using mistral-small-latest — cheap and fast)
- Redis for caching
- Stripe for payments
- Hetzner VPS in Germany for hosting (EU data residency) - Keyword matching — too many false positives ("price" appears in footer copyright text too)
- Percentage thresholds — works for big changes, misses important small ones (a single price change is 0.1% of the page)
- AI analysis — Mistral reads the diff with context and makes a judgment call. This is what stuck. - Landing page: https://arkforge.fr/arkwatch.html
- API endpoint: https://watch.arkforge.fr
how-totutorialguidedev.toaimlservercronnginxpythonjavascriptkubernetes