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
dependabot[bot] fdf6de4643
chore(deps-dev): bump the npm-minor-patch group with 5 updates (#42)
Bumps the npm-minor-patch group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@cloudflare/workers-types](https://github.com/cloudflare/workerd) | `5.20260911.1` | `5.20260915.1` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.9.6` | `25.9.7` |
| [eslint-plugin-oxlint](https://github.com/oxc-project/eslint-plugin-oxlint) | `1.82.0` | `1.83.0` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.82.0` | `1.83.0` |
| [wrangler](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler) | `4.131.0` | `4.132.0` |


Updates `@cloudflare/workers-types` from 5.20260911.1 to 5.20260915.1
- [Release notes](https://github.com/cloudflare/workerd/releases)
- [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md)
- [Commits](https://github.com/cloudflare/workerd/commits)

Updates `@types/node` from 25.9.6 to 25.9.7
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `eslint-plugin-oxlint` from 1.82.0 to 1.83.0
- [Release notes](https://github.com/oxc-project/eslint-plugin-oxlint/releases)
- [Commits](https://github.com/oxc-project/eslint-plugin-oxlint/compare/v1.82.0...v1.83.0)

Updates `oxlint` from 1.82.0 to 1.83.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.83.0/npm/oxlint)

Updates `wrangler` from 4.131.0 to 4.132.0
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/wrangler@4.132.0/packages/wrangler)

---
updated-dependencies:
- dependency-name: "@cloudflare/workers-types"
  dependency-version: 5.20260915.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor-patch
- dependency-name: "@types/node"
  dependency-version: 25.9.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor-patch
- dependency-name: eslint-plugin-oxlint
  dependency-version: 1.83.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor-patch
- dependency-name: oxlint
  dependency-version: 1.83.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor-patch
- dependency-name: wrangler
  dependency-version: 4.132.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-19 19:27:47 +02:00
.github feat: migrate from npm to pnpm (#24) 2026-07-17 14:09:34 +02:00
migrations feat: remove inefficient indices. 2026-08-24 20:13:34 +02:00
src Workers cache (#22) 2026-07-07 16:10:13 +02:00
status-page chore(deps): bump minor and patch dependencies 2026-09-12 12:59:49 +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 docs: update AGENTS.md with verified repo guidance 2026-09-12 17:10:43 +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 5 updates (#42) 2026-09-19 19:27:47 +02:00
pnpm-lock.yaml chore(deps-dev): bump the npm-minor-patch group with 5 updates (#42) 2026-09-19 19:27:47 +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.