# Repost Blog

> Engineering notes on webhook delivery, retries, signatures, replay, and the failures that only appear at scale.

- Canonical: https://repost.sh/blog
- Feed: https://repost.sh/blog/rss.xml

## Articles

### [Duplicate webhooks: four causes, and idempotency fixes one](https://repost.sh/blog/duplicate-webhooks-four-causes)

The same charge lands twice and the reflex is to reach for idempotency. Four different situations look identical from inside your handler, and they are fixed in four different places.

- Author: Quentin Mousset
- Published: 2026-08-31
- Markdown: https://repost.sh/blog/duplicate-webhooks-four-causes.md

### [Fan out to three services, not three failure domains](https://repost.sh/blog/fan-out-without-three-failure-domains)

One webhook, three consumers, and a handler that quietly became a router. Moving the fan-out upstream of your code gives every destination its own queue, clock and breaker.

- Author: Quentin Mousset
- Published: 2026-08-26
- Markdown: https://repost.sh/blog/fan-out-without-three-failure-domains.md

### [Don't build the webhook delivery table. Install it.](https://repost.sh/blog/dont-build-the-webhook-delivery-table)

A customer asks whether their webhook went out, and two weeks later you are speccing a deliveries page. Repost publishes that page as a shadcn registry.

- Author: Quentin Mousset
- Published: 2026-08-24
- Markdown: https://repost.sh/blog/dont-build-the-webhook-delivery-table.md

### [Your test is sleeping. The webhook already arrived.](https://repost.sh/blog/webhook-tests-without-sleep)

A sleep is a guess about someone else's latency. Wait for the request itself: the test returns the moment the webhook lands, and fails loudly when it never does.

- Author: Quentin Mousset
- Published: 2026-08-20
- Markdown: https://repost.sh/blog/webhook-tests-without-sleep.md

### [One webhook schema. Six SDKs that never drift.](https://repost.sh/blog/one-webhook-schema-six-sdks)

Hand-maintained clients drift the week you ship. Generate all six from one schema file, and let CI fail the pull request that forgets one.

- Author: Quentin Mousset
- Published: 2026-08-17
- Markdown: https://repost.sh/blog/one-webhook-schema-six-sdks.md

### [Who invented webhooks? Meet the HTTP POST that never grew up](https://repost.sh/blog/who-invented-webhooks)

Several serious attempts to replace it, and a webhook is still an HTTP POST to a URL you chose. The protocol never moved. What it carries did.

- Author: Quentin Mousset
- Published: 2026-08-03
- Markdown: https://repost.sh/blog/who-invented-webhooks.md

### [Webhook retry storms and the arithmetic of backoff](https://repost.sh/blog/retry-storms-and-the-arithmetic-of-backoff)

Fixed-interval retries turn one slow consumer into a queue that never drains. What exponential backoff actually costs, and how to size the ceiling.

- Author: Felipe Schulz
- Published: 2026-07-27
- Markdown: https://repost.sh/blog/retry-storms-and-the-arithmetic-of-backoff.md

### [Forwarding webhooks to localhost without a tunnel](https://repost.sh/blog/webhooks-to-localhost-without-a-tunnel)

Public tunnels leak URLs, rotate hostnames, and expire mid-debug. Forwarding from a durable bucket keeps the endpoint stable and the payloads replayable.

- Author: Quentin Mousset
- Published: 2026-07-20
- Markdown: https://repost.sh/blog/webhooks-to-localhost-without-a-tunnel.md

### [Webhook signature verification, end to end](https://repost.sh/blog/signature-verification-end-to-end)

A webhook signature covers the exact bytes on the wire, not the object you meant to send. Why re-serialization breaks verification, and how to test it.

- Author: Quentin Mousset
- Published: 2026-07-13
- Markdown: https://repost.sh/blog/signature-verification-end-to-end.md
