tutorial

Monitoring Open Resume with Vigilmon

Open Resume is a privacy-first resume builder that runs entirely in the browser — but your self-hosted Next.js server still needs monitoring. Here's how to keep the app available, assets fast, and TLS healthy with Vigilmon.

Open Resume is a privacy-focused, open-source resume builder — all data processing happens client-side in the browser, with no server-side storage of your personal information. But "client-side processing" doesn't mean "no server to monitor." The Next.js server that delivers the app, the JavaScript bundles that power the in-browser PDF engine, and the HTTPS certificate protecting your domain still need uptime monitoring. Vigilmon watches all of it so you know the moment your self-hosted resume builder goes offline or degrades.

What You'll Set Up

  • HTTP uptime monitor for the Next.js web server
  • Static asset serving latency checks (JS/CSS bundles)
  • API route health monitoring
  • TLS certificate expiry alert
  • Optional: AI writing suggestions endpoint health (if OpenAI integration is enabled)

Prerequisites

  • Open Resume deployed and accessible (default port 3000, or proxied via nginx/Caddy)
  • A free Vigilmon account

Step 1: Monitor the Next.js Web Server

The Next.js process is the entry point for every visit to Open Resume. If it crashes or the reverse proxy loses connection, users see a blank page or a 502.

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter your Open Resume URL: https://resume.yourdomain.com.
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. Click Save.

If you proxy with nginx, the 200 from the root path confirms both nginx and the Next.js upstream are healthy.


Step 2: Monitor Static Asset Serving Latency

Open Resume is entirely client-side — the JavaScript and CSS bundles are the application. Slow bundle delivery means users wait on a spinner before the resume editor becomes interactive.

Monitor the main JS bundle directly to track asset serving latency:

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: https://resume.yourdomain.com/_next/static/chunks/main.js (check your build output for the actual chunk hash — it changes per build).
  3. For a more stable target that doesn't change between builds, use the Next.js app entry:
https://resume.yourdomain.com/_next/static/chunks/pages/index.js

Or monitor the public favicon as a lightweight static-file canary:

https://resume.yourdomain.com/favicon.ico
  1. Set Expected HTTP status to 200.
  2. Set Check interval to 5 minutes.

A response time spike on static assets while the root URL is fast points to a CDN or caching layer issue rather than a Next.js process problem.


Step 3: Monitor Next.js API Routes

If your Open Resume deployment includes server-side API routes (e.g. for PDF generation or AI writing suggestions), those are separate from the client-side resume logic and can fail independently.

Add an HTTP monitor for each active API route:

App availability probe (Next.js built-in):

https://resume.yourdomain.com/api/health

If you haven't added a health endpoint, add one in pages/api/health.js:

export default function handler(req, res) {
  res.status(200).json({ status: 'ok', timestamp: Date.now() });
}

Then in Vigilmon:

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: https://resume.yourdomain.com/api/health.
  3. Set Expected HTTP status to 200.
  4. Set Expected body contains to "ok".
  5. Check interval: 2 minutes.

Step 4: OpenAI / LLM API Connectivity (If AI Suggestions Are Enabled)

If you've configured Open Resume to use OpenAI for AI writing suggestions, an expired API key or OpenAI outage will silently break the suggestion feature while the rest of the app remains functional.

Add a lightweight probe to confirm the OpenAI API is reachable:

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: https://api.openai.com (or your proxy endpoint if you route through one).
  3. Set Expected HTTP status to 200 or 401 — a 401 from OpenAI means the API is up; an authentication error is separate from a connectivity failure.
  4. Check interval: 10 minutes.

For a more thorough check, add an internal health route to your Open Resume instance that calls the OpenAI API and reports success:

// pages/api/ai-health.js
export default async function handler(req, res) {
  const response = await fetch('https://api.openai.com/v1/models', {
    headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}` },
  });
  res.status(response.ok ? 200 : 502).json({ openai: response.ok ? 'ok' : 'error' });
}

Step 5: SSL/TLS Certificate Expiry

Resume data is sensitive — even though Open Resume processes it client-side, an expired certificate causes browsers to block access entirely with a security error, locking users out of their own resume drafts stored in browser local storage.

  1. Open the HTTP monitor created in Step 1.
  2. Enable Monitor SSL certificate.
  3. Set Alert when certificate expires in less than 21 days.
  4. Click Save.

If you use Caddy as your reverse proxy, certificate renewal is automatic — but the automation can fail if port 80 is blocked or the ACME challenge can't complete. A 21-day window gives you time to diagnose and renew manually.


Step 6: Service Worker and PWA Health

Open Resume can function as a PWA with a service worker for offline support. A broken service worker registration means the offline fallback stops working, which affects users on intermittent connections.

Monitor the service worker script directly:

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: https://resume.yourdomain.com/sw.js (or /_next/static/service-worker.js depending on your build).
  3. Set Expected HTTP status to 200.
  4. Check interval: 10 minutes.

A 404 here means the service worker file wasn't deployed correctly in the latest build.


Step 7: Configure Alert Channels

  1. Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
  2. On the web server monitor, set Consecutive failures before alert to 2 — Next.js restarts can cause a single failed check.
  3. Route TLS certificate alerts to email with a 21-day lead time.
  4. If the OpenAI health check is enabled, route those alerts to a low-urgency channel — an AI suggestion outage is a feature degradation, not a full outage.

Summary

| Monitor | Target | What It Catches | |---|---|---| | HTTP — web server | https://resume.yourdomain.com | Next.js crash or proxy failure | | HTTP — static assets | /favicon.ico or /_next/static/ | CDN / static file serving failure | | HTTP — health API | /api/health | Server-side API route failure | | HTTP — AI health | /api/ai-health | OpenAI API connectivity failure | | HTTP — service worker | /sw.js | PWA service worker missing | | SSL certificate | resume domain | TLS renewal failure |

Open Resume's client-side architecture means your users' resume data never touches your server — but your server still needs to be up to deliver the app. With Vigilmon watching the Next.js process, static asset latency, API routes, and certificate expiry, you catch outages before job seekers land on a blank page.

Monitor your app with Vigilmon

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

Start free →