Area: Admin deep-dive (commerce/config) (audit p15b) · Surface: /admin/gate, /admin/courses, /admin/marketplace/fees · Dimension: competitor-gap · Severity: major
Every monetization surface we ship lets an admin set a single flat price, but there is no way to issue a discount code, run a launch promo, or give an affiliate/influencer a tracked code. Skool, Teachable, Thinkific, LearnWorlds, Circle and Mighty Networks all ship coupon engines (percentage + fixed, expiry, usage caps, per-product or account-wide) as table-stakes for course/membership launches. Without coupons a tenant cannot run a Black-Friday sale, a cohort launch discount, or a win-back offer without manually editing the price for everyone. This is the single biggest revenue-tooling gap versus the LMS and membership competitors.
Evidence
grep -rln 'coupon|promo_code|discount_code' over platform/src/ returns ZERO hits. AdminGateController::createTier (AdminGateController.php:98-155) builds a Stripe product+price with name/interval/price/trial/setup_fee but no coupon. AdminCourseSalesController::store (AdminCourseSalesController.php:122-166) takes title/slug/price/currency only. GateTier.php has no coupon/discount columns (grep returned nothing).
Suggested fix. Add a `discount_codes` table (code, scope=gate_tier|course_offer|all, type=percent|fixed, value, max_redemptions, redeemed_count, starts_at, expires_at, stripe_coupon_id) with an /admin/discounts CRUD surface. At checkout, map to a Stripe Coupon/Promotion Code so the discount flows through the existing Stripe price objects rather than rewriting prices.
Filed by the automated tenant-app audit and adversarially evidence-verified. Status: verified. Open — not yet actioned.
Patrick Bass
@mobieus