kelly
bcbfdd3c91
ci/woodpecker/push/ci Pipeline failed
feat: add banner ad system with zones, scheduling, and analytics
Banner Ad System:
- BannerAd model with scheduling (starts_at, ends_at)
- BannerAdEvent model for impression/click tracking
- BannerAdDailyStat model for analytics rollups
- BannerAdZone enum (6 zones: hero, leaderboard, sidebar, inline, brand, deals)
- BannerAdStatus enum (draft, active, scheduled, paused, expired)
Service & Controller:
- BannerAdService with weighted random rotation, caching
- BannerAdController for click tracking and image serving
- Routes for /ads/click, /ads/impression, /images/banner-ad
Filament Admin:
- Full CRUD resource at /admin/banner-ads
- Image upload to MinIO
- Status/zone filters
- Analytics display (impressions, clicks, CTR)
Display Components:
- <x-banner-ad zone="..." /> Blade component
- Automatic impression tracking
- Click tracking via redirect
- Sponsored badge overlay
View Placements:
- Marketplace homepage: leaderboard + sidebar
- Brand page: banner below breadcrumbs
- Deals page: hero banner
Background Jobs:
- UpdateBannerAdStatuses: activate scheduled, expire ended (every minute)
- RollupBannerAdStats: daily aggregation + event cleanup
2025-12-17 22:18:27 -07:00
..
2025-05-27 12:31:32 -07:00
2025-05-19 17:10:49 -07:00
2025-05-19 17:10:49 -07:00
2025-05-19 20:33:51 -07:00
2025-05-27 12:31:32 -07:00
2025-06-03 11:59:55 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-12-01 09:48:40 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-15 11:17:15 -07:00
2025-08-17 23:17:36 -07:00
2025-10-15 11:17:15 -07:00
2025-08-17 23:17:36 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-08-19 16:19:05 -07:00
2025-08-19 16:19:05 -07:00
2025-08-20 09:12:30 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-12-01 09:48:40 -07:00
2025-10-07 10:33:37 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-07 10:33:37 -07:00
2025-12-04 19:34:59 -07:00
2025-12-01 09:48:40 -07:00
2025-10-07 15:05:03 -07:00
2025-12-01 09:48:40 -07:00
2025-10-07 15:05:03 -07:00
2025-12-01 09:48:40 -07:00
2025-10-07 15:05:03 -07:00
2025-10-07 15:05:03 -07:00
2025-10-07 15:05:03 -07:00
2025-10-07 15:05:03 -07:00
2025-10-07 15:32:48 -07:00
2025-10-07 15:44:58 -07:00
2025-10-07 15:44:58 -07:00
2025-12-01 09:48:40 -07:00
2025-10-09 16:14:20 -07:00
2025-10-28 20:30:25 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-09 16:14:20 -07:00
2025-12-01 09:48:40 -07:00
2025-10-09 16:14:20 -07:00
2025-10-10 10:18:43 -07:00
2025-10-23 00:01:18 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-10-10 10:18:43 -07:00
2025-10-10 10:18:43 -07:00
2025-12-01 09:48:40 -07:00
2025-10-10 10:18:43 -07:00
2025-10-10 10:18:43 -07:00
2025-10-10 10:18:43 -07:00
2025-10-15 11:17:15 -07:00
2025-10-10 10:22:37 -07:00
2025-10-10 10:22:37 -07:00
2025-10-15 11:17:15 -07:00
2025-10-15 11:17:15 -07:00
2025-10-15 11:17:15 -07:00
2025-10-15 11:17:15 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-15 11:17:15 -07:00
2025-10-23 00:01:18 -07:00
2025-10-15 11:17:15 -07:00
2025-10-15 11:17:15 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-23 00:01:18 -07:00
2025-10-15 11:17:15 -07:00
2025-10-15 23:09:13 -07:00
2025-10-15 23:09:13 -07:00
2025-10-15 23:09:13 -07:00
2025-10-23 00:01:18 -07:00
2025-10-15 23:19:09 -07:00
2025-10-20 17:02:37 -07:00
2025-10-20 17:02:37 -07:00
2025-10-20 17:16:55 -07:00
2025-10-20 16:59:52 -07:00
2025-10-20 16:59:52 -07:00
2025-10-20 21:54:08 -07:00
2025-10-21 22:37:17 -07:00
2025-10-21 22:37:17 -07:00
2025-10-21 22:37:17 -07:00
2025-10-21 22:37:08 -07:00
2025-10-21 22:37:08 -07:00
2025-11-16 23:14:52 -07:00
2025-10-21 22:37:08 -07:00
2025-10-21 22:37:17 -07:00
2025-10-22 17:12:23 -07:00
2025-10-22 17:12:23 -07:00
2025-10-22 22:30:15 -07:00
2025-11-15 01:31:22 -07:00
2025-10-27 15:06:51 -07:00
2025-11-13 23:27:01 -07:00
2025-10-29 12:22:30 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-12-04 19:26:38 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-01 13:50:23 -07:00
2025-11-01 13:50:23 -07:00
2025-11-01 13:50:23 -07:00
2025-11-04 14:05:09 -07:00
2025-11-04 15:17:52 -07:00
2025-11-05 23:41:37 -07:00
2025-11-05 23:41:37 -07:00
2025-12-04 19:26:38 -07:00
2025-12-05 17:14:45 -07:00
2025-11-05 23:41:37 -07:00
2025-11-05 23:41:37 -07:00
2025-11-05 23:41:37 -07:00
2025-11-16 23:14:52 -07:00
2025-11-17 16:46:18 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-14 19:48:47 -07:00
2025-11-14 20:20:23 -07:00
2025-11-14 20:20:23 -07:00
2025-11-14 20:20:23 -07:00
2025-11-14 20:20:23 -07:00
2025-11-14 19:48:47 -07:00
2025-11-14 20:20:23 -07:00
2025-11-14 20:20:23 -07:00
2025-11-14 20:20:23 -07:00
2025-11-14 19:48:47 -07:00
2025-11-14 20:20:23 -07:00
2025-11-17 16:35:35 -07:00
2025-11-14 23:56:17 -07:00
2025-11-17 16:35:35 -07:00
2025-11-15 23:58:42 -07:00
2025-11-15 23:58:42 -07:00
2025-11-15 01:17:00 -07:00
2025-11-15 01:17:00 -07:00
2025-11-15 01:17:00 -07:00
2025-11-15 01:17:00 -07:00
2025-11-15 01:17:00 -07:00
2025-11-15 01:17:00 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-12 14:21:47 -07:00
2025-11-13 21:00:15 -07:00
2025-11-13 21:00:15 -07:00
2025-11-13 21:00:15 -07:00
2025-11-16 23:14:52 -07:00
2025-11-14 09:53:04 -07:00
2025-11-14 13:07:29 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-24 19:35:33 -07:00
2025-11-15 02:14:48 -07:00
2025-11-15 02:14:48 -07:00
2025-11-16 00:14:48 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 18:15:49 -07:00
2025-11-16 23:14:52 -07:00
2025-11-16 23:14:52 -07:00
2025-11-17 14:32:01 -07:00
2025-12-03 19:51:00 -07:00
2025-12-03 19:51:00 -07:00
2025-12-03 19:51:00 -07:00
2025-12-03 19:51:00 -07:00
2025-12-03 19:51:00 -07:00
2025-12-03 19:51:00 -07:00
2025-11-18 18:40:54 -07:00
2025-11-18 18:40:54 -07:00
2025-11-18 18:40:54 -07:00
2025-12-04 19:34:59 -07:00
2025-11-18 10:01:45 -07:00
2025-11-18 18:40:54 -07:00
2025-11-18 18:40:54 -07:00
2025-11-18 18:40:54 -07:00
2025-11-24 19:35:33 -07:00
2025-11-19 22:42:17 -07:00
2025-11-19 22:42:17 -07:00
2025-11-19 22:42:17 -07:00
2025-11-19 22:42:17 -07:00
2025-11-19 22:42:17 -07:00
2025-11-19 22:42:17 -07:00
2025-11-24 19:35:33 -07:00
2025-11-20 22:02:59 -07:00
2025-11-20 23:43:47 -07:00
2025-11-20 23:43:47 -07:00
2025-11-20 23:43:47 -07:00
2025-11-20 23:43:47 -07:00
2025-12-01 09:48:40 -07:00
2025-11-20 23:43:47 -07:00
2025-11-24 20:39:23 -07:00
2025-12-04 19:34:59 -07:00
2025-11-23 00:56:39 -07:00
2025-11-23 00:55:48 -07:00
2025-11-23 00:55:48 -07:00
2025-11-23 00:55:24 -07:00
2025-11-23 00:55:24 -07:00
2025-11-23 00:55:24 -07:00
2025-11-23 00:57:09 -07:00
2025-11-23 00:56:39 -07:00
2025-11-23 00:56:39 -07:00
2025-11-23 00:56:39 -07:00
2025-11-23 01:52:18 -07:00
2025-11-23 01:56:47 -07:00
2025-11-23 09:16:56 -07:00
2025-11-23 09:24:40 -07:00
2025-11-23 09:29:10 -07:00
2025-11-24 20:39:23 -07:00
2025-11-23 12:31:19 -07:00
2025-11-24 20:39:23 -07:00
2025-11-24 20:39:23 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 10:00:41 -07:00
2025-12-01 10:00:41 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-12-05 18:31:19 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-12-05 17:14:45 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:37:41 -07:00
2025-11-25 11:09:40 -07:00
2025-11-25 11:37:41 -07:00
2025-11-25 11:37:41 -07:00
2025-11-25 11:37:41 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 10:00:41 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 09:48:40 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 14:24:47 -07:00
2025-12-01 19:53:54 -07:00
2025-12-03 19:51:00 -07:00
2025-12-03 19:51:00 -07:00
2025-12-03 19:51:00 -07:00
2025-12-04 19:26:38 -07:00
2025-12-04 19:26:38 -07:00
2025-12-05 17:06:34 -07:00
2025-12-05 17:43:47 -07:00
2025-12-05 18:13:29 -07:00
2025-12-05 20:31:53 -07:00
2025-12-05 12:35:17 -07:00
2025-12-05 17:14:45 -07:00
2025-12-06 09:49:01 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:27:11 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-06 23:26:14 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 10:56:26 -07:00
2025-12-07 13:29:19 -07:00
2025-12-07 14:24:53 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-07 23:37:57 -07:00
2025-12-08 10:20:54 -07:00
2025-12-08 12:59:21 -07:00
2025-12-08 12:59:21 -07:00
2025-12-08 17:38:36 -07:00
2025-12-09 09:12:27 -07:00
2025-12-08 22:37:12 -07:00
2025-12-09 09:12:27 -07:00
2025-12-09 09:12:27 -07:00
2025-12-09 16:45:31 -07:00
2025-12-09 15:59:40 -07:00
2025-12-09 16:45:31 -07:00
2025-12-09 16:41:32 -07:00
2025-12-09 12:35:00 -07:00
2025-12-09 12:35:00 -07:00
2025-12-09 12:35:00 -07:00
2025-12-09 13:41:21 -07:00
2025-12-09 13:41:21 -07:00
2025-12-09 13:41:21 -07:00
2025-12-09 13:41:21 -07:00
2025-12-09 13:41:21 -07:00
2025-12-10 11:24:01 -07:00
2025-12-09 17:36:10 -07:00
2025-12-10 11:24:01 -07:00
2025-12-10 11:24:01 -07:00
2025-12-10 11:24:01 -07:00
2025-12-10 11:24:01 -07:00
2025-12-10 11:24:01 -07:00
2025-12-10 13:22:00 -07:00
2025-12-10 21:38:06 -07:00
2025-12-11 14:44:43 -07:00
2025-12-11 14:44:43 -07:00
2025-12-11 14:44:43 -07:00
2025-12-11 15:07:24 -07:00
2025-12-11 15:07:24 -07:00
2025-12-11 17:12:21 -07:00
2025-12-11 17:57:46 -07:00
2025-12-11 16:59:56 -07:00
2025-12-11 16:28:45 -07:00
2025-12-11 17:12:21 -07:00
2025-12-11 17:41:19 -07:00
2025-12-11 19:14:41 -07:00
2025-12-12 09:10:05 -07:00
2025-12-14 03:41:31 -07:00
2025-12-15 12:24:48 -07:00
2025-12-16 09:36:47 -07:00
2025-12-15 16:41:34 -07:00
2025-12-15 16:41:34 -07:00
2025-12-15 16:41:34 -07:00
2025-12-15 16:41:34 -07:00
2025-12-15 16:41:34 -07:00
2025-12-15 16:41:34 -07:00
2025-12-15 16:41:34 -07:00
2025-12-15 16:41:34 -07:00
2025-12-16 16:16:31 -07:00
2025-12-16 17:29:00 -07:00
2025-12-17 02:15:23 -07:00
2025-12-17 02:15:23 -07:00
2025-12-17 12:50:07 -07:00
2025-12-17 12:50:07 -07:00
2025-12-17 19:01:13 -07:00
2025-12-17 19:01:13 -07:00
2025-12-17 19:01:13 -07:00
2025-12-17 19:01:13 -07:00
2025-12-17 18:25:37 -07:00
2025-12-17 22:18:27 -07:00
2025-12-17 22:18:27 -07:00
2025-12-17 22:18:27 -07:00
2025-12-17 18:58:08 -07:00