Automated DevOps & GitHub monitoring bot. Captures GitHub Webhooks (Push, PR, Issues), validates & normalizes the payload via a TypeScript (Fastify) API, routes the data through n8n, and delivers Rich Embed messages to Discord in real time.
GitHub Webhook βββΆ API (validate + normalize) βββΆ n8n (route) βββΆ Discord (rich embed)
push/PR/issue HMAC verify, zod parse switch on event channel + embed
RepoRadar/
βββ api/ # TypeScript Fastify webhook receiver + validator
β βββ src/
β β βββ server.ts # Fastify bootstrap
β β βββ config/env.ts # env loading + validation (zod)
β β βββ plugins/
β β β βββ verifySignature.ts # GitHub HMAC-SHA256 verification
β β βββ routes/
β β β βββ webhook.ts # POST /webhooks/github
β β βββ schemas/github.ts # zod schemas: push / pull_request / issues
β β βββ transformers/
β β β βββ toNormalized.ts # raw GitHub payload -> normalized event
β β βββ types/index.ts
β βββ package.json
β βββ tsconfig.json
β βββ .env.example
β βββ .gitignore
βββ n8n/
β βββ reporadar-workflow.json # importable workflow stub
βββ docs/
β βββ ARCHITECTURE.md # full end-to-end wiring
βββ .gitignore
βββ README.md
| Piece | Runs where | Responsibility |
|---|---|---|
| API | Local Node (this repo) | Verify GitHub signature, parse & validate payload, emit a clean normalized JSON event, forward to n8n webhook |
| n8n | Hosted (n8n Cloud / self-host) | Receive normalized event, branch on event type, build the Discord embed, POST to Discord |
| Discord | Discord server | Renders the rich embed in the target channel |
cd api
cp .env.example .env # fill in secrets
npm install
npm run dev # Fastify on http://localhost:3000Expose it to GitHub during development (choose one):
npx localtunnel --port 3000
# or: ngrok http 3000 | cloudflared tunnel --url http://localhost:3000Point the GitHub webhook at https://<public-url>/webhooks/github.
See docs/ARCHITECTURE.md for the full end-to-end flow, env vars, and n8n setup.