2026-04-11 13:22:36 +02:00
2026-07-07 16:10:13 +02:00
2026-04-11 13:22:36 +02:00
2026-04-11 13:22:36 +02:00
2026-04-11 13:22:36 +02:00
2026-07-17 14:09:34 +02:00
2026-04-11 13:22:36 +02:00
2026-04-11 13:22:36 +02:00
2026-04-11 13:22:36 +02:00
2026-04-11 13:22:36 +02:00
2026-07-07 16:10:13 +02:00

Atalaya Uptime Monitor

CI License Node.js TypeScript Cloudflare Workers Astro

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.
Languages
TypeScript 80.7%
Astro 14.1%
CSS 4.2%
JavaScript 1%