Cinny is a modern, community-focused Matrix web client built with React and TypeScript. It's served as a static web application — typically behind nginx or Caddy — and depends on an upstream Matrix homeserver (Synapse, Dendrite, or Conduit) to function. When any layer in that stack breaks, users see a blank screen or a connection error. Vigilmon lets you detect those failures before your users do, covering everything from TLS certificate expiry to Matrix API response times.
What You'll Set Up
- Web server availability and HTTP response monitoring
- TLS/HTTPS certificate expiry alerts
- Static file serving latency checks
- Matrix homeserver connectivity monitoring
- Upstream Matrix API endpoint response time tracking
- CORS configuration health verification
- Cron heartbeat for build artifact validation scripts
Prerequisites
- Cinny deployed and accessible at a public or internal HTTPS URL
- nginx or Caddy serving the static build
- The Matrix homeserver URL Cinny connects to (e.g.
https://matrix.yourdomain.com) - A free Vigilmon account
Step 1: Monitor Web Server Availability
The first thing to check is whether nginx or Caddy is serving Cinny at all. Add a basic HTTP uptime monitor:
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - Enter your Cinny URL:
https://cinny.yourdomain.com. - Set Check interval to
1 minute. - Set Expected HTTP status to
200. - Click Save.
This checks that your web server is up and returning a valid response. If nginx crashes or Caddy fails to start after a reboot, this monitor fires immediately.
Step 2: Monitor TLS Certificate Expiry
Cinny is served over HTTPS, and an expired certificate makes the app completely inaccessible — browsers refuse to load the page. Enable certificate expiry monitoring on the same monitor:
- Open the monitor you created in Step 1.
- Enable Monitor SSL certificate in the SSL section.
- Set Alert when certificate expires in less than
21 days. - Click Save.
A 21-day window gives you plenty of lead time if Let's Encrypt auto-renewal fails, Caddy's ACME challenge is blocked, or you manage certificates manually.
Step 3: Monitor Static File Serving Latency
Cinny loads a JavaScript bundle, CSS, and assets at startup. Slow serving degrades the first-load experience and can indicate disk I/O issues or misconfigured caching headers. Add a keyword monitor targeting the main bundle:
- Click Add Monitor → HTTP / HTTPS.
- Enter your Cinny URL:
https://cinny.yourdomain.com. - Set Keyword must be present to
cinny(matches the page title inindex.html). - Set Check interval to
5 minutes. - Click Save.
You can also probe the JavaScript bundle directly for a stricter latency signal:
- Click Add Monitor → HTTP / HTTPS.
- Enter the path to the main JS chunk:
https://cinny.yourdomain.com/static/js/main.<hash>.js. - Set Expected HTTP status to
200. - Set Check interval to
5 minutes.
Finding the bundle filename: inspect the Cinny build directory (
/var/www/cinny/static/js/) or check your browser's DevTools Network tab on first load. Update this monitor after each Cinny upgrade when the hash changes.
Step 4: Monitor Matrix Homeserver Connectivity
Cinny is a client — it needs to reach its configured Matrix homeserver to do anything. If the homeserver goes down or becomes unreachable, Cinny shows a "failed to connect" error even though the web server is perfectly healthy. Monitor the homeserver's client-server API:
- Click Add Monitor → HTTP / HTTPS.
- Enter the homeserver's well-known URL:
https://matrix.yourdomain.com/.well-known/matrix/client. - Set Expected HTTP status to
200. - Set Keyword must be present to
m.homeserver(standard JSON field in the well-known response). - Set Check interval to
1 minute. - Click Save.
Also add a monitor for the Matrix client versions endpoint, which confirms the homeserver API itself is responding:
- Click Add Monitor → HTTP / HTTPS.
- Enter:
https://matrix.yourdomain.com/_matrix/client/versions. - Set Expected HTTP status to
200. - Set Keyword must be present to
versions. - Set Check interval to
1 minute.
Step 5: Monitor Upstream Matrix API Response Times
Even if the homeserver is up, slow API response times translate directly into a sluggish Cinny experience — message sending lags, room lists load slowly, and the sync stream falls behind. Track the login endpoint as a representative API latency signal:
- Open the
/_matrix/client/versionsmonitor from Step 4. - Enable Response time alert.
- Set Alert if response time exceeds
2000 ms. - Click Save.
For a more realistic end-user signal, also monitor the sync endpoint (note: this returns immediately with a timeout parameter, so it's a safe probe):
- Click Add Monitor → HTTP / HTTPS.
- Enter:
https://matrix.yourdomain.com/_matrix/client/v3/sync?timeout=0(unauthenticated probe — will return401 Unauthorized, which is still a valid API response). - Set Expected HTTP status to
401. - Enable Response time alert with a threshold of
3000 ms. - Set Check interval to
2 minutes.
A 401 response confirms the API is active; a timeout or 502 means something is broken deeper in the stack.
Step 6: Verify CORS Configuration
Cinny makes cross-origin API calls to the Matrix homeserver from the browser. Broken CORS headers cause silent JavaScript errors that prevent login and message loading. Add a monitor that probes the CORS preflight path:
- Click Add Monitor → HTTP / HTTPS.
- Enter your homeserver's base URL with a known API path:
https://matrix.yourdomain.com/_matrix/client/versions. - Under Custom request headers, add:
Origin:https://cinny.yourdomain.com
- Set Keyword must be present to
Access-Control(matches theAccess-Control-Allow-Originresponse header). - Set Check interval to
5 minutes.
If your Vigilmon plan does not support custom request headers for keyword matching against response headers, use a lightweight external script (see Step 7) to test CORS and report via a heartbeat.
Step 7: Heartbeat for Build Artifact Integrity
If you compile Cinny from source, a failed or corrupted build can silently serve a broken app. Use a scheduled script to verify the build output and ping Vigilmon on success:
- In Vigilmon, click Add Monitor → Cron Heartbeat.
- Set Expected ping interval to
1440minutes (daily). - Copy the heartbeat URL:
https://vigilmon.online/heartbeat/your-token.
Create a verification script on your server:
#!/bin/bash
# /opt/scripts/verify-cinny-build.sh
CINNY_DIR="/var/www/cinny"
HEARTBEAT_URL="https://vigilmon.online/heartbeat/your-token"
# Check index.html exists and contains expected content
if grep -q "cinny" "$CINNY_DIR/index.html" 2>/dev/null; then
# Check at least one JS bundle exists
if ls "$CINNY_DIR/static/js/main."*.js 1>/dev/null 2>&1; then
curl -s "$HEARTBEAT_URL" > /dev/null
fi
fi
Add it to cron:
crontab -e
# Run daily at 6 AM
0 6 * * * /bin/bash /opt/scripts/verify-cinny-build.sh
If the build directory is empty, corrupted, or missing the index, the heartbeat ping is never sent and Vigilmon alerts after the expected interval.
Step 8: Configure Alert Channels
- Go to Alert Channels in Vigilmon and add your preferred channel: email, Slack, Discord webhook, or PagerDuty.
- For the web server monitor (Step 1), set Consecutive failures before alert to
2— a single blip from a web server restart should not page you. - For the Matrix homeserver monitors (Steps 4–5), set Consecutive failures before alert to
1— homeserver outages affect all Cinny users immediately. - Group the homeserver monitors into an alert group in Vigilmon so you receive one notification when the homeserver goes down, not one per monitor.
Conclusion
With these monitors in place, you have full observability across Cinny's serving stack:
| Layer | Monitor |
|---|---|
| Web server | HTTP uptime on https://cinny.yourdomain.com |
| TLS certificate | SSL expiry alert (21-day window) |
| Static assets | Keyword check on index.html |
| Matrix API | /_matrix/client/versions uptime + latency |
| Sync endpoint | /_matrix/client/v3/sync?timeout=0 response time |
| Build integrity | Cron heartbeat from artifact verification script |
When the web server goes down, your users can't load the app. When the Matrix homeserver goes down, your users can't send messages. Vigilmon catches both, so you're fixing the problem before your users are asking what's wrong in a different chat client.