Self-hosted webhook testing tunnel like ngrok but with replay, inspection, programmable transformations... AND a chaos mode that randomly delays, drops, or corrupts requests.
Language: Elixir
Constraint: Hostile UI
Stack: Phoenix, LiveDashboard, GenServer, Bandit
- Public URL tunnel to local HTTP server
- Request replay and inspection UI
- Programmable transformations (Lua/Elixir scripting)
- Chaos mode: random delays, drops, corruption
- Phoenix LiveDashboard for monitoring
- Request history with search and filter
- Webhook signature verification helpers
- Phase 1: Phoenix app scaffold with LiveDashboard
- Phase 2: Tunnel core — public URL → local forward
- Phase 3: Request capture and storage (ETS + persistence)
- Phase 4: Inspection UI (LiveView)
- Phase 5: Replay engine (exact + modified replays)
- Phase 6: Programmable transformations
- Phase 7: Chaos mode GenServer (configurable probabilities)
- Phase 8: Webhook signature verification helpers
- Elixir toolchain
cd loopback
mix deps.get
mix compilemix phx.serverWith the server running, open an IEx shell and create a tunnel:
Loopback.Tunnels.create_tunnel("http://localhost:3000")
# => {:ok, %Loopback.Tunnels.Tunnel{id: "0001", target_url: "http://localhost:3000", ...}}Requests to http://localhost:4000/t/:tunnel_id/*path are forwarded to the tunnel's target_url.
See PLAN.md for detailed architecture decisions and implementation notes.
Apache-2.0
If this project saved you time, solved a problem, or just made your day a little more neon, you can fuel the next one:
