ForgeRelay
Keep pull requests moving in Slack and Discord.
// 01 Context
ForgeRelay is a SaaS that keeps pull and merge requests moving by turning GitHub and GitLab activity into focused Slack and Discord conversations.
It is a routing layer between your forge and your team chat. It posts rich PR/MR cards, keeps reviews and CI in one living thread, maps forge identities to real teammates, and nudges stale reviews without dumping the whole webhook firehose into the channel.
// 02 The problem
Forge webhooks are noisy. Teams either mute the channel and miss reviews, or live inside GitHub/GitLab and miss the people already talking in Slack or Discord.
The hard part is not posting a notification. It is keeping one conversation current for the whole request lifecycle while routing the right events to the right channel with the right people mentioned.
// 03 What I built
-
Webhook pipeline
Verified forge webhooks are stored, normalised into signals, projected onto a PR/MR aggregate, matched to routes and delivered to chat.
-
Routing policies
Per-repository destination policies with fan-out to multiple channels, branch conditions and per-route feature toggles.
-
Threaded delivery
One Slack or Discord conversation per request. Reviews, comments and CI updates land in place instead of scattering across the channel.
-
Identity mapping
Forge accounts map to Slack and Discord users so review requests mention a real teammate, with suggested matches and manual overrides.
-
Live CI
GitHub checks and GitLab pipelines relay failures, recovery and full breakdowns into the existing thread.
-
Reminders & digests
Scheduled stale-review nudges, plus filtered commit digests for direct-to-main pushes.
-
Reliability & product surface
Delivery logs with replay, marketing site, SSO auth, Stripe billing, multi-member workspaces and a Livewire control panel.
// 04 Architecture
Incoming forge webhooks are verified and stored, normalised into internal signals, projected onto a PR aggregate, matched against routing rules, then delivered to Slack or Discord, with scheduled reminder jobs on the side.
// 05 Product
// 06 Interesting problems
- 01
Noise vs signal
Default forge integrations flood chat. Routes and feature presets decide what is worth interrupting a channel for.
- 02
Thread continuity
Opened, review requested, CI failed, recovered, approved and merged all have to update one conversation without losing context.
- 03
People resolution
Mentioning a forge handle is useless if nobody sees it. Mapping has to be accurate, with a safe fallback when someone is unmapped.
- 04
Durable delivery
Chat APIs fail. Every relay is logged with route, destination, status and payload so a failed delivery can be replayed.
// 07 Stack
| Area | Technology | |
|---|---|---|
| Backend | Laravel 13 / PHP 8.5 | Queues, tenancy, billing and a full product loop. |
| UI | Livewire 4 + Blade / Alpine | Dense control-panel UX without a separate SPA. |
| Data | PostgreSQL + Redis | Operational state, cache, sessions and queues. |
| Workers | Horizon + scheduler | Webhook processing and reminder jobs. |
| Realtime | Reverb / Echo | Live panel updates while deliveries land. |
| Billing | Stripe / Cashier | Free and Team plans metered on mapped people. |
| Integrations | GitHub, GitLab, Slack, Discord | The forge-to-chat surface area. |
// 08 Status / next
Live at forgerelay.dev as a full product loop: connections, routing, delivery, billing and ops. Not a demo.
- › More routing conditions and presets
- › Deeper CI surfaces
- › Self-hosted option later