HookIt · Live Demo
connecting…
⚙ Advanced

Live demo · nothing on this page is staged

The delivery service for messages between apps.

Right now, a small demo trading app is sending out live prices and trades. HookIt takes each message, seals it so no one can fake it, and delivers it to the receivers below — and if a receiver is down, it keeps trying until the message lands. Your job on this page is to break things, for real. HookIt's job is to recover.

THE SENDER a demo trading app waiting for the first message…
HOOKIT seals, queues, and delivers every message

Three short stories below. Each one lets you break something real and watch what happens. Click a destination above to jump straight to it.

Story 1 · two banks

Two banks get the exact same messages. Only one keeps its money safe.

HookIt delivers every trade to two demo banks. Bank A believes everything it's told — no checks at all. Bank B follows the safety rules HookIt makes possible: check the seal, skip repeats, take turns writing, ignore stale news. Use the buttons to cause real trouble, then watch Bank A's books drift while Bank B's always add up.

The banks keep processing trades but stop saying “got it”, so HookIt sends each one again. Bank A counts the same trade twice. Bank B notices the repeat and ignores it.

Dozens of trades hit one account at the same moment. Bank A's bookkeeping trips over itself and loses one. Bank B takes them one at a time and stays exact.

While the banks are offline, HookIt holds every trade and keeps trying. When they come back, old messages arrive mixed in with new ones — Bank B checks dates, so old news never overwrites new.

Send a fake $5,000 trade straight to both banks, going around HookIt. Bank A books money that never existed. Bank B checks the seal and turns it away.

Waiting for the first trades — the demo sender publishes every few seconds.

🔧 Under the hood

Both banks are ordinary web applications receiving signed trade.executed webhooks from this platform. The drift meter continuously diffs each bank's ledger against the expected balances computed from the platform's own event log. Below: each bank's rules and the raw requests it actually received.

No requests received yet.

Story 2 · your receiver

What happens when the receiver goes offline?

This receiver is yours. Switch it off and watch HookIt refuse to give up: it tries again, waits a little longer between tries, and if the receiver stays down too long, it sets the message aside — safe, not lost. Then switch the receiver back on and ask HookIt to finish the job.

Your receiver is ● accepting messages

Deliveries start failing for real. HookIt tries again, waiting a bit longer each time — watch the tracking list below.

Sneak an unsealed message straight to your receiver. It's turned away — you'll see it in the mailbox marked “rejected”.

Delivery tracking · every try, exactly as it happened

Messages headed to your receiver appear here, each with its full delivery history.

Your receiver's mailbox · what actually arrived

Nothing here yet — messages that reach your receiver appear here.

🔧 Under the hood

The tracking list above is rendered live from the delivery engine's own rows. Failed deliveries retry on exponential backoff with jitter — min(base·2^(n−1), cap) — and dead-letter after the attempt limit; redrive requeues them through the normal path. Concurrent workers claim due deliveries with FOR UPDATE SKIP LOCKED. Below: per-worker attribution and every attempt with HTTP status, duration, and the measured backoff gap.

No deliveries yet.

Story 3 · the live feed

See for yourself — these messages are real.

This is the live stream of messages the demo sender is publishing right now: crypto prices and trades. The Discord channel next to it is a real public server — HookIt is delivering the same alerts there as you watch.

Ask the sender to fire off a quick flood. Watch the counters climb.

Two identical messages arrive at the exact same instant. HookIt keeps one and ignores the copy — nothing ever gets counted twice.

Live messages from the sender

No messages yet — the demo sender publishes every few seconds.

A real Discord channel, receiving the same alerts

The Discord view isn't set up on this deployment.

🔧 Under the hood

Events enter through POST /events with an Idempotency-Key header; concurrent duplicates collapse on a unique constraint at ingestion. The sender is a separate producer service (python -m producer locally), and the Discord embed is configured via DISCORD_WIDGET_SERVER_ID / DISCORD_WIDGET_CHANNEL_ID. Live delivery metrics:

No metrics yet.