<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged status-page</title>
<link>https://coderlegion.com/tag/status-page</link>
<description>Powered by Question2Answer</description>
<item>
<title>Building Trust Through Transparency: Why Mifugo Added a Public Status Page</title>
<link>https://coderlegion.com/24366/building-trust-through-transparency-why-mifugo-added-a-public-status-page</link>
<description>&lt;h2 id=&quot;building-trust-through-transparency-why-mifugo-added-a-public-status-page&quot;&gt;Building Trust Through Transparency: Why Mifugo Added a Public Status Page&lt;/h2&gt;
&lt;p&gt;When you're building software for farmers, you're building software for people whose livelihood depends on it. A feed log missed at 6 AM isn't just a UI bug; it's a real cost. A sales entry that fails to save during market hours isn't a minor inconvenience; it's lost revenue.&lt;br&gt;
That's the lens through which we build Mifugo, our livestock management platform for small-scale Kenyan farmers. And it's why, when it came time to pick a monitoring and status-page solution, we made a very deliberate choice.&lt;/p&gt;
&lt;h3 id=&quot;the-trust-problem&quot;&gt;The Trust Problem&lt;/h3&gt;
&lt;p&gt;Here's a scenario we take seriously: a farmer opens Mifugo at 7 AM to log yesterday's egg collection. They get a 502. They can't enter their data. They assume the app is broken and switch to a notebook. Three weeks later, they're still using the notebook.&lt;br&gt;
For a SaaS product serving users on unreliable networks, perceived reliability is as important as actual reliability. If users don't know whether an outage is real or just a blip, they lose confidence. A public status page flips that dynamic: instead of farmers assuming the app is broken, they see &quot;Incident: Database migration in progress, ETA 45m&quot; and know to check back.&lt;/p&gt;
&lt;h3 id=&quot;choosing-better-stack-over-cronitor&quot;&gt;Choosing Better Stack Over Cronitor&lt;/h3&gt;
&lt;p&gt;Mifugo spans six web products plus an API health endpoint, so we needed seven uptime monitors. We evaluated the two obvious candidates: Better Stack (formerly Better Uptime) and Cronitor.&lt;br&gt;
Scale first. Cronitor's free tier maxes out at 5 monitors. Better Stack's free tier includes 10. For our seven monitors, Better Stack covers us entirely at no cost. Cronitor's next tier starts at $5 per monitor per month; $35/month minimum before adding users.&lt;br&gt;
Bundled value matters. Better Stack's free tier includes uptime monitoring, a public status page, email and Slack alerts, incident timelines, and on-call scheduling. Cronitor charges separately for equivalent features or doesn't include observability like logs and traces. For a growing platform, Better Stack is the more coherent choice.&lt;br&gt;
The UX seals it. Better Stack's status page templates are genuinely good out of the box. Customizing ours to match Mifugo's forest-green brand (#40916c) took minutes, not hours.&lt;/p&gt;
&lt;h3 id=&quot;what-we-built&quot;&gt;What We Built&lt;/h3&gt;
&lt;p&gt;We integrated Better Stack across all Mifugo products by adding a live status indicator in every user-facing footer. The indicator links directly to status.mifugo.app and updates in real time.&lt;br&gt;
The integration covers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The marketing landing page footer&lt;/li&gt;
&lt;li&gt;The authenticated farm app's public footer&lt;/li&gt;
&lt;li&gt;The sign-in page header&lt;/li&gt;
&lt;li&gt;A clickable green status dot that always lets users investigate an issue without hunting for the right link&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;design-decisions&quot;&gt;Design Decisions&lt;/h3&gt;
&lt;p&gt;Three deliberate choices shaped our implementation:&lt;br&gt;
&lt;strong&gt;1. The Status Indicator Should Be Alive, Not Static&lt;/strong&gt;&lt;br&gt;
Before Better Stack, the landing footer had a green dot and &quot;All systems operational&quot; text, but it wasn't clickable. That's a missed opportunity. A status indicator that can't be investigated becomes wallpaper. We made it clickable so one tap takes users directly to the status page.&lt;br&gt;
&lt;strong&gt;2. The Link Should Be Everywhere a User Might Look&lt;/strong&gt;&lt;br&gt;
A farmer encountering an issue should find the status page in under two seconds, whether they're on the sign-in page, the app, or the landing site. We added System Status links across all public-facing surfaces so there's no hunting.&lt;br&gt;
&lt;strong&gt;3. Environment Variables Should Have Safe Defaults&lt;/strong&gt;&lt;br&gt;
The status page URL defaults to &lt;a rel=&quot;nofollow&quot; href=&quot;https://status.mifugo.app&quot;&gt;https://status.mifugo.app&lt;/a&gt; when unset. This means the links work in local development without any configuration, and a missing deployment env var won't break the footer - it just falls back to production. Small detail, zero friction.&lt;br&gt;
The Bigger Picture: Observability as a Feature&lt;br&gt;
This work is small in lines of code but represents a shift in how we think about platform health.&lt;br&gt;
For the first few months, Mifugo's reliability was a silent assumption. If things were working, users didn't think about it. If things broke, they filed feedback or switched to pen and paper. A public status page changes that relationship: we're no longer asking users to trust that we're reliable; we're showing them.&lt;br&gt;
And for the engineering team, Better Stack's alerting means we know about incidents before the first support email arrives. The Slack integration fires the moment a monitor goes down, not when a farmer tweets about it.&lt;/p&gt;
&lt;h3 id=&quot;what-s-next&quot;&gt;What's Next&lt;/h3&gt;
&lt;p&gt;If you're building a product where downtime has real-world consequences- farmers missing feed logs, clinics missing patient entries, logistics teams missing dispatch updates- a public status page isn't overhead. It's part of the product.&lt;br&gt;
Check out Mifugo at mifugo.app and the status page at status.mifugo.app.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Mifugo is built with Next.js, Mantine, Ionic React, Supabase, and Prisma, and a lot of empathy for the people who actually use it.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/24366/building-trust-through-transparency-why-mifugo-added-a-public-status-page</guid>
<pubDate>Mon, 10 Aug 2026 06:08:54 +0000</pubDate>
</item>
<item>
<title>uptimepage</title>
<link>https://coderlegion.com/21622/uptimepage</link>
<description>&lt;p&gt;Uptimepage is an open-source uptime monitor and status page, built as one self-contained Rust binary backed by Postgres and ClickHouse. Run it with &lt;code&gt;docker compose up&lt;/code&gt;, or use the free hosted tier.&lt;/p&gt;
&lt;p&gt;I built it because I wanted a monitor I could run as a single binary and drive entirely as code, without operating a fleet of services to do it.&lt;/p&gt;
&lt;h3 id=&quot;what-it-does&quot;&gt;What it does&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Checks: HTTP, TCP, DNS, TLS-certificate expiry, and domain expiry, from one region or many.&lt;/li&gt;
&lt;li&gt;Public status page: HTML, JSON, and RSS, per-component opt-in, incidents, maintenance windows, email and webhook subscribers.&lt;/li&gt;
&lt;li&gt;Alerting across about fourteen channels: Slack, generic signed webhooks, Telegram, WhatsApp, SMS, PagerDuty, ntfy, Pushover, Discord, Google Chat, MS Teams, email. Fire once, recover, and repeat until acknowledged.&lt;/li&gt;
&lt;li&gt;Incidents with a separate internal state and public phase, so you can work an incident before you publish anything.&lt;/li&gt;
&lt;li&gt;Multi-region probes: each agent is the same binary in a stateless probe mode. Run your own anywhere with an org-scoped token.&lt;/li&gt;
&lt;li&gt;Automation: REST API with an OpenAPI spec, a Terraform provider, and an MCP server an LLM client can query over OAuth.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;a-few-engineering-bits&quot;&gt;A few engineering bits&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A custom &lt;code&gt;hyper&lt;/code&gt; and &lt;code&gt;rustls&lt;/code&gt; client instead of a high-level one, so each result carries separate DNS, connect, TLS, and TTFB timings. About 130K checks a second on one core in the load test.&lt;/li&gt;
&lt;li&gt;A single min-heap scheduler for the whole fleet rather than a timer task per monitor, so memory stays flat in fleet size.&lt;/li&gt;
&lt;li&gt;ClickHouse with per-row TTL and minute and hour rollups, so dashboards never scan raw rows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full write-up of how it is built: &lt;a rel=&quot;nofollow&quot; href=&quot;https://uptimepage.dev/blog/building-an-uptime-monitor-in-rust&quot;&gt;https://uptimepage.dev/blog/building-an-uptime-monitor-in-rust&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;free-and-open&quot;&gt;Free and open&lt;/h3&gt;
&lt;p&gt;The core is not paywalled. Checks, status pages, subscribers, the API, and every alert channel are in the free tier, with no card to start. It is AGPL-3.0, and it monitors itself.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Site and hosted tier: &lt;a rel=&quot;nofollow&quot; href=&quot;https://uptimepage.dev&quot;&gt;https://uptimepage.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/uptimepage/uptimepage&quot;&gt;https://github.com/uptimepage/uptimepage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy to answer questions about the internals or the self-host setup in the comments.&lt;/p&gt;
</description>
<category>Launches</category>
<guid isPermaLink="true">https://coderlegion.com/21622/uptimepage</guid>
<pubDate>Tue, 30 Jun 2026 17:20:37 +0000</pubDate>
</item>
</channel>
</rss>