tutorial

WriteFreely Monitoring with Vigilmon: Uptime, Health Checks & ActivityPub Federation Alerts

Monitor your self-hosted WriteFreely blog or writing community with Vigilmon — track health endpoints, web UI availability, ActivityPub federation, and SSL certificate expiry.

Your WriteFreely instance went down. New posts aren't federating to Mastodon. Readers who follow your blog from other Fediverse servers stopped getting updates days ago — and you had no idea. Your writing is still live on your server, but to the federated social web, you've gone silent.

WriteFreely is a federated blogging platform built on ActivityPub. It powers personal blogs, multi-user writing communities, and Fediverse-native publications where readers can follow authors directly from Mastodon, Pleroma, or any ActivityPub client. Vigilmon gives you the external monitoring that catches WriteFreely failures across every layer — the HTTP health check, web UI, federation API, and TLS certificate — before they interrupt your publishing or your readers' feeds.

This tutorial covers monitoring WriteFreely end-to-end with Vigilmon.

What You'll Build

  • A Vigilmon HTTP monitor on WriteFreely's health endpoint
  • A web UI availability monitor
  • An ActivityPub federation endpoint monitor
  • SSL certificate expiry alerts
  • Alert channels for your writing community

Prerequisites

  • A running WriteFreely instance (typically on port 8080 behind a reverse proxy)
  • A free account at vigilmon.online

Step 1: Monitor the Health Endpoint

WriteFreely exposes a health check route at /api/me and /api/health depending on the version, but the most reliable health probe is a HEAD or GET request to the root URL combined with checking the API availability. For a lightweight check, the /.well-known/nodeinfo endpoint exercises both the HTTP layer and the federation metadata generation.

Test it:

curl https://write.yourdomain.com/.well-known/nodeinfo

Expected response:

{
  "links": [
    {
      "rel": "http://nodeinfo.diaspora.software/ns/schema/2.0",
      "href": "https://write.yourdomain.com/api/nodeinfo/2.0"
    }
  ]
}

This endpoint confirms that WriteFreely's HTTP server is running and that the federation infrastructure is responding. A 200 here means the platform is up and capable of serving federation discovery requests.

Set up the Vigilmon monitor:

  1. Log in to Vigilmon and click New Monitor → HTTP.
  2. Set URL to https://write.yourdomain.com/.well-known/nodeinfo.
  3. Set Check interval to 60 seconds.
  4. Set Expected status code to 200.
  5. Under Advanced → Keyword check:
    • Keyword present: nodeinfo
  6. Save the monitor.

Vigilmon now polls your WriteFreely health layer every minute from multiple geographic regions.


Step 2: Monitor Web UI Availability

The NodeInfo endpoint checks federation metadata, but not the user-facing blog content. A database failure, a broken template, or a misconfigured environment variable can make posts inaccessible while the health endpoint stays green.

Add a keyword monitor on the web UI:

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://write.yourdomain.com/ (your WriteFreely homepage).
  3. Set Expected status code to 200.
  4. Under Advanced → Keyword check, configure:
    • Keyword present: your blog or community name (e.g., "My Writing Space")
    • Keyword absent: "error", "Internal Server Error"
  5. Save.

The WriteFreely homepage renders your blog listing or community landing page. If the database is unreachable or the template system fails, the page will return an error or a blank response — and the keyword check will fire.

For multi-user WriteFreely instances, you can also add a monitor on a specific blog URL (e.g., https://write.yourdomain.com/username/) to verify that user content is rendering correctly.


Step 3: Monitor the ActivityPub Federation Endpoint

WriteFreely's core Fediverse feature is its ActivityPub implementation. Followers on Mastodon or other platforms receive posts through the federation layer. If the ActivityPub actor endpoint breaks, your existing followers stop receiving new posts — silently.

Monitor the actor endpoint for a blog on your instance:

curl -H "Accept: application/activity+json" \
  https://write.yourdomain.com/api/me

Or, using the public actor URL for a specific blog:

curl -H "Accept: application/activity+json" \
  https://write.yourdomain.com/@username

Set up the monitor in Vigilmon:

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://write.yourdomain.com/api/nodeinfo/2.0.
  3. Set Expected status code to 200.
  4. Under Advanced → Keyword check:
    • Keyword present: "writefreely"
  5. Save.

The NodeInfo 2.0 endpoint includes the software name and version, confirming the ActivityPub stack is fully operational. A failure here means federation discovery is broken — other servers can't find or verify your instance's actors.


Step 4: SSL Certificate Monitoring

WriteFreely is typically served over HTTPS via Caddy (which handles TLS automatically) or Nginx with Let's Encrypt. An expired certificate breaks every Fediverse federation connection, not just web browsers — ActivityPub federation between servers requires valid TLS. Other Mastodon instances will refuse to federate with your instance the moment your certificate expires.

Vigilmon monitors SSL certificate validity automatically. To configure expiry alerts:

  1. Open any of your HTTPS WriteFreely monitors in Vigilmon.
  2. Go to Settings → SSL.
  3. Enable Alert when certificate expires within 14 days.
  4. Enable Alert when certificate expires within 30 days if you want early warning (recommended for Fediverse instances where federation interruption has downstream effects on followers).

Sample alert:

⚠️  SSL Warning: write.yourdomain.com
Certificate expires in 9 days (2026-07-08)
Action: renew via Certbot or Caddy ACME

Step 5: Alert Channels

Go to Notifications → New Channel in Vigilmon and configure your preferred delivery:

  • Email — immediate alerts to the instance admin
  • Webhook — post to Discord, Slack, or Matrix

For a writing community, a Slack or Discord webhook ensures the whole team knows when the platform is down. A WriteFreely downtime alert looks like:

🔴 DOWN: write.yourdomain.com/.well-known/nodeinfo
WriteFreely health check failed
Region: EU-West
Triggered: 2026-02-10 08:33 UTC

Recovery:

✅ RECOVERED: write.yourdomain.com/.well-known/nodeinfo
Downtime: 22 minutes

Step 6: Status Page

Go to Status Pages → New Status Page in Vigilmon. Add your WriteFreely monitors — health, web UI, and federation endpoint — and publish. Share the URL with your community or link it from your instance's About page so writers can check status without emailing the admin.


What You've Built

| Scenario | How Vigilmon catches it | |---|---| | WriteFreely process crash | NodeInfo health endpoint returns non-200 | | Database (SQLite/MySQL) unreachable | Web UI keyword monitor detects error page | | Blog content rendering broken | Web UI keyword check fails | | ActivityPub federation stack broken | NodeInfo 2.0 keyword check fails | | SSL certificate expired or expiring | SSL expiry alert triggers | | Reverse proxy (Nginx/Caddy) down | HTTPS monitor detects 502 or TLS error | | DNS misconfiguration | HTTP monitor detects DNS resolution failure |


WriteFreely gives writers a clean, federated alternative to centralized publishing platforms. Keeping your instance healthy is part of the commitment to your readers and your federated community. Vigilmon handles the monitoring so you can focus on writing.

Start monitoring your WriteFreely instance today — register free at vigilmon.online.

Monitor your app with Vigilmon

Free plan — 5 monitors, no credit card required. Up and running in 60 seconds.

Start free →