Personal Project · 2026

Beacon

Webhook job scheduler & run monitor

Next.jsSupabasepg_cronTypeScriptDenoTailwind CSS 4
Visit Live Site

5

Max Retries

25

Runs Per Page

2s

Live Poll Interval

Job History

Beacon app screenshot
01

What it does

Beacon lets developers schedule webhook calls on any 5-field cron expression — every execution is logged with status, HTTP response code, duration, response body, and error details, all isolated per user with row-level security. Think developer-grade cron with full observability built in.

02

Core Features

Cron Scheduling

Any 5-field cron expression via pg_cron. Live human-readable preview as you type. 9 one-click presets and full timezone-aware display.

Full Run History

Every attempt gets its own row — status, HTTP code, duration, response body, error detail, and attempt number. Paginated at 25/page.

Automatic Retries

Configurable 0–5 retries with linear backoff (500ms × attempt). Each retry is a separate job_run record for complete per-attempt visibility.

HMAC Signing

Every outgoing request carries X-Beacon-Signature: sha256=<hmac> computed from your job's signing secret. Verify on your endpoint.

Run Now & Toggle

Trigger any job immediately from the dashboard, job detail page, or REST API. Pause or resume jobs without losing their config.

Failure Alerts

Send rich HTML emails via Resend or Block Kit messages to Slack on final failure. Configured per job — no global noise.

REST API

Full CRUD + trigger via /api/v1/jobs. Authenticate with a Supabase JWT. Programmatic job management without touching the UI.

Row-Level Security

Strict per-user isolation on all tables via Supabase RLS. Your jobs and run history are never visible to other users.

03

How Scheduling Works

01

Job Insert / Update

When a job is created or updated, the trg_sync_job_cron trigger fires sync_job_cron(), reading the service role key from Supabase Vault.

02

pg_cron Registration

cron.schedule() registers a pg_cron entry named beacon-job-<uuid>. On deactivation or delete, cron.unschedule() removes it immediately.

03

Edge Function Execution

Each tick fires net.http_post() to the execute-job Deno Edge Function with the service role JWT as the caller.

04

HMAC + Delivery

The function computes HMAC-SHA256(signing_secret, body) via the Web Crypto API, then POSTs with X-Beacon-Signature and custom headers.

05

Retry & Logging

On failure, the function waits 500ms × attempt and creates a new attempt record. After the final attempt, Slack/email alerts fire if configured.

04

Tech Stack

Framework

Next.js (App Router) · TypeScript · Tailwind CSS 4

Runtime

React 19 · Node.js 18+

Database

Supabase (Postgres 17) · pg_cron · pg_net

Auth

Supabase Auth — email/password

Job Runtime

Supabase Edge Function (Deno)

Secrets

Supabase Vault

AI

claude-haiku-4-5 via Anthropic API — failure explanations

Alerts

Resend (email) · Slack incoming webhooks

05

REST API

GET/api/v1/jobs
POST/api/v1/jobs
GET/api/v1/jobs/:id
PUT/api/v1/jobs/:id
DELETE/api/v1/jobs/:id
POST/api/v1/jobs/:id/trigger
06

Use Cases

Data Pipelines

Sync inventory from supplier APIs · pull overnight exchange rates · archive stale rows

Notifications

Daily email digest of signups · weekly Slack reports · Monday morning reminders

Infrastructure

Healthcheck pings every 5 min · CDN cache purge after publish · token rotation

Business Logic

Process subscription renewals at midnight · expire promo codes · recalculate leaderboards

AI / LLM Workflows

Nightly embedding jobs · batch sentiment analysis · auto-generate changelogs

Integrations

Poll partner APIs for new orders · sync GitHub issues · update Notion dashboards

07

Gallery

Jobs Dashboard
Job Detail & Run History
New Job Form
Landing Page