Webhook relay and debugging SaaS — receive, inspect, and forward webhooks
  • Go 74.2%
  • templ 25.2%
  • Dockerfile 0.6%
Find a file
Ash e8973498fc
Some checks failed
CI / lint (push) Failing after 36s
CI / test (push) Failing after 1m10s
refactor: use eskit event sourcing + forge-auth
- Endpoint lifecycle as eskit Decider (Create/Delete/Receive/Forward events)
- Projection read model for endpoint list + request history
- Replace custom auth with forge-auth RequireAPIKey middleware
- Wire up eskit Profiler
- Given/When/Then decider tests
- Remove old store/relay/events packages
2026-02-19 16:14:03 +00:00
.forgejo/workflows Add CI workflow: tests, lint 2026-02-19 12:52:15 +00:00
cmd/pingrelay refactor: use eskit event sourcing + forge-auth 2026-02-19 16:14:03 +00:00
internal refactor: use eskit event sourcing + forge-auth 2026-02-19 16:14:03 +00:00
.gitignore feat: SQLite persistence, Datastar SSE dashboard, API key auth 2026-02-19 08:40:27 +00:00
Dockerfile feat: initial PingRelay MVP — webhook relay and debugging SaaS 2026-02-18 22:52:45 +00:00
go.mod refactor: use eskit event sourcing + forge-auth 2026-02-19 16:14:03 +00:00
go.sum refactor: use eskit event sourcing + forge-auth 2026-02-19 16:14:03 +00:00
README.md docs: update README with full feature docs 2026-02-19 08:40:44 +00:00

🏓 PingRelay

Webhook relay & debugger SaaS. Receive, inspect, and forward webhooks in real-time.

Features

  • Webhook Capture — Unique endpoint URLs that capture any HTTP method
  • Real-time Dashboard — Datastar-powered SSE streaming, no JavaScript frameworks
  • Auto-forwarding — Optionally relay captured webhooks to your local dev server
  • SQLite Persistence — All data persisted with WAL mode for performance
  • API Key Auth — Secure API access with X-API-Key or Bearer tokens
  • Pure Go — Single binary, no CGo dependencies (modernc.org/sqlite)

Quick Start

go build -o pingrelay ./cmd/pingrelay/
./pingrelay
# 🏓 PingRelay running at http://localhost:8080
# Demo API key printed on startup

Environment Variables

Variable Default Description
PORT 8080 HTTP server port
DB_PATH pingrelay.db SQLite database path

API

All API endpoints require authentication via X-API-Key header.

# Create endpoint
curl -X POST http://localhost:8080/api/endpoints \
  -H "X-API-Key: pr_your_key" \
  -H "Content-Type: application/json" \
  -d '{"name":"stripe-test","forward_url":"http://localhost:3000/webhook"}'

# List endpoints
curl http://localhost:8080/api/endpoints -H "X-API-Key: pr_your_key"

# List captured requests
curl http://localhost:8080/api/endpoints/{id}/requests -H "X-API-Key: pr_your_key"

# Send a webhook (no auth needed)
curl -X POST http://localhost:8080/hook/YOUR_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"event":"payment.completed"}'

Architecture

  • cmd/pingrelay/ — Entry point
  • internal/domain/ — Core types (Endpoint, Request, User)
  • internal/store/ — Store interface + SQLite implementation
  • internal/handler/ — HTTP handlers + Datastar SSE dashboard
  • internal/relay/ — Async webhook forwarding
  • internal/events/ — Pub/sub event bus for real-time streaming