mirror of
https://github.com/dcarrillo/atalaya.git
synced 2026-07-20 15:44:44 +00:00
main
Atalaya Uptime Monitor
Atalaya (Spanish for watchtower) is an uptime & status page monitoring service running on Cloudflare Workers and Durable Objects.
It runs entirely on Cloudflare's free tier, so you get a self-hosted uptime monitor and status page without paying for servers. It's aimed at hobbyists who want control over their monitoring and don't mind living inside Cloudflare's ecosystem.
Live example.
⚠️ 99% of the code has been generated by an AI agent under human supervision, bearing in mind that I haven't used TypeScript before. You have been warned!
🏴☠️
|
_ _|_ _
|;|_|;|_|;|
\\. . /
\\: . /
||: |
||:. |
||: .|
||: , |
||: |
||: . |
_||_ |
__ ----~ ~`---,
__ ,--~' ~~----____
Features
- HTTP/HTTPs, TCP, and DNS monitoring.
- Regional monitoring from specific Cloudflare locations.
- Configurable retries with immediate retry on failure.
- Configurable failure thresholds before alerting.
- Custom alert templates for notifications (currently only webhooks are supported).
- Historical data stored in Cloudflare D1.
- Status page built with Astro 6 SSR, served by the same Worker via Static Assets.
- 90-day uptime history with daily bars.
- Response time charts (uPlot) with downtime bands.
- Basic auth or public access modes.
- Dark/light mode.
- Custom banner image support with optional clickable link.
Documentation
Read the docs for setup, configuration, alerts, and more.
Development
# Run worker locally
wrangler dev --test-scheduled
# Run status page locally
pnpm dev:pages
# Trigger cron manually
curl "http://localhost:8787/__scheduled?cron=*+*+*+*+*"
Testing
# First build the status page
pnpm build:pages
# Worker tests
pnpm test
# Status page unit tests
pnpm test:pages
# Type checking and linting
pnpm check # worker (typecheck + lint + format)
pnpm check:pages # pages (astro check + tsc + lint)
TODO
- Add support for TLS checks (certificate validity, expiration). Apparently, the Workers API does not support certificate data access, even at the socket level. An external service may be required.
- Refine the status page to look... well... less AI-generated.
- Per-monitor maintenance windows
- Initial support for incident management (manual status overrides, incident timeline).
- Branded status page (simple custom banner).
- Add support for notifications other than webhooks.
Description
Languages
TypeScript
80.7%
Astro
14.1%
CSS
4.2%
JavaScript
1%