Uptime & status page that checks from multiple regions, built on Cloudflare Workers. https://atalaya-docs.dcarrillo.es
  • TypeScript 82.4%
  • Astro 13.1%
  • CSS 3.5%
  • JavaScript 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dcarrillo 9c0657a7d1
redesign: Hallmark overhaul of status page visual layer (#26)
Replace Inter-only typography with Space Grotesk (display) + Geist
(body) + Geist Mono (metrics). Full OKLCH token palette with proper
light/dark theme contrast. Remove gradient headline, floating radial
blobs, emoji icons, transition-all, and 8 hardcoded hex values. All
colors now derive from named tokens. Left-align header, Ft2 footer.
2026-07-24 17:51:11 +02:00
.github feat: migrate from npm to pnpm (#24) 2026-07-17 14:09:34 +02:00
migrations Kick off (#1) 2026-04-11 13:22:36 +02:00
src Workers cache (#22) 2026-07-07 16:10:13 +02:00
status-page redesign: Hallmark overhaul of status page visual layer (#26) 2026-07-24 17:51:11 +02:00
.gitignore Kick off (#1) 2026-04-11 13:22:36 +02:00
.oxlintrc.json Kick off (#1) 2026-04-11 13:22:36 +02:00
.prettierrc.json Kick off (#1) 2026-04-11 13:22:36 +02:00
AGENTS.md feat: migrate from npm to pnpm (#24) 2026-07-17 14:09:34 +02:00
eslint.config.js Kick off (#1) 2026-04-11 13:22:36 +02:00
LICENSE Kick off (#1) 2026-04-11 13:22:36 +02:00
package.json chore(deps-dev): bump the npm-minor-patch group with 3 updates (#25) 2026-07-18 14:08:38 +02:00
pnpm-lock.yaml chore(deps-dev): bump the npm-minor-patch group with 3 updates (#25) 2026-07-18 14:08:38 +02:00
pnpm-workspace.yaml feat: migrate from npm to pnpm (#24) 2026-07-17 14:09:34 +02:00
README.md redesign: Hallmark overhaul of status page visual layer (#26) 2026-07-24 17:51:11 +02:00
tsconfig.json Kick off (#1) 2026-04-11 13:22:36 +02:00
vitest.config.ts Kick off (#1) 2026-04-11 13:22:36 +02:00
wrangler.example.toml Workers cache (#22) 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 allowing checks from multiple regions.

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.