## What Adds a private Discord admin feed with two flows, both posting through one webhook (`DISCORD_WEBHOOK_URL`): ### 1. Daily stats — `stats:daily-report` Scheduled **09:00 Europe/Madrid**. Posts an embed with: - New users created **yesterday** (Madrid calendar day, converted to UTC for the query) - Total users - Active/trialing counts + current & projected **MRR / ARR** per currency Reuses the #457 Stripe stats logic, extracted into `SubscriptionStatsCollector` so the existing `stripe:subscription-stats` command and this report share one source of truth. ### 2. Stripe events — `PostStripeEventToDiscord` Queued listener on Cashier's `WebhookReceived`. Posts on: - `customer.subscription.created` / `updated` / `deleted` - `invoice.payment_succeeded` / `payment_failed` ## Setup - `DISCORD_WEBHOOK_URL` — added to prod ✅ (set locally to test) - Stripe dashboard must send the 5 event types above to the existing Cashier `/stripe/webhook` endpoint - A queue worker must be running (listener is `ShouldQueue`) ## Tests 13 passing: Discord client (3), daily report (2), Stripe event listener (4), plus the existing stats command (4) still green after the refactor. |
||
|---|---|---|
| .. | ||
| .pest | ||
| Browser | ||
| Feature | ||
| Performance | ||
| Unit | ||
| Pest.php | ||
| TestCase.php | ||
| bootstrap.php | ||