A lightweight website uptime monitoring service that uses Puppeteer with stealth plugins to check site availability. Built with Express, TypeScript, and SQLite.
- Monitors multiple URLs at configurable intervals (default: 60s).
- Stealth Integration: Uses Puppeteer Stealth plugin and custom user-agent/fingerprints to bypass bot detection.
- SQLite Database: Log entries and statistics are efficiently managed in a SQLite database with WAL mode enabled.
- Dynamic Reconfiguration: Dynamically loads URL lists from
urls.txton each check cycle. Add, edit, or delete URLs via the Web UI/API without restarting the service. - Web UI Dashboard: A dark-themed web interface displaying global uptime metrics, per-URL stats, and HTTP code breakdowns with detailed tooltips.
- Dockerized Deployment: Deploys via Docker Compose using a lightweight Node 22 Alpine image.
- Configure your URLs in
urls.txt(or configure them later in the Web UI). - Start the service:
docker compose up -d
The Web UI is available on port 3000.
The application mounts the project root to /app/data inside the container:
- URLs: Edit
urls.txtin the project root directory (one URL per line,#for comments). - Interval: Change
INTERVALinsrc/index.ts(default:60,000ms). - Timeout: Change
TIMEOUTinsrc/index.ts(default:30,000ms).
| Route | Description |
|---|---|
/ |
Web UI dashboard |
/api/urls |
GET/POST/PUT/DELETE managed URLs |
/api/stats |
JSON stats computed from SQLite database |
/api/logs |
Recent log entries (?limit=50, max 500) |
All data persists in the mounted volume:
uptime.db— SQLite database storing raw check logs, indices, and tables.urls.txt— Managed list of URLs to monitor.