RabbitMQ durable job queue for email outbox, webhooks, and AI tasks
Context: The email outbox drains inline in the request path, and outbound Slack/Discord webhooks fire synchronously. Under a traffic spike this adds latency and risks lost work.
Scope:
- Stand up a RabbitMQ producer/consumer with ack, retry, and a dead-letter queue.
- Move email_outbox processing to a worker.
- Move outbound webhook delivery to the queue with retries and idempotency (webhook_events).
- Reserve a queue for future AI tasks (drafts, moderation).
Infra: RabbitMQ is already available on the LAN. Add the AMQP URL to /opt/hollahoop/.env.
Done when: emails and webhooks are enqueued and delivered by a worker, with retries and visibility into failures.