I wanted to run an offer on the paid plans, such as a $1 first month, without living in the Stripe Dashboard. So Commerce > Discounts in the admin panel now makes one.
What an offer is
An offer is a Stripe coupon plus a promotion code. Stripe is the only place it lives, with no copy in our database to drift out of date. You pick a preset or fill in the form, and you get the link to send.
The math you see before you launch
The page shows what buyers will pay and what's left after Stripe's fees. A $1 sale keeps about 63 cents, so reaching $400 takes about 635 sales. It also prices a first payment of $2, $3, $5 and $10 against the same goal. A $1 offer looks cheap until you see the fee eats over a third of it.
Nobody pays a price they didn't see
The pricing page shows the offers that are on for everyone (the price struck through, the terms, who it's for), or the one a link names with ?promo=CODE. The Buy button carries the offer's code. At checkout the server attaches exactly that offer or refuses, creating nothing. "New customers only" is the default for a fixed first payment, so existing customers can't use it. Pause and resume are one click and clear the pricing page's two-minute cache immediately.
What I haven't done
It has not been run against real Stripe. It needs Coupons: write and Promotion codes: write on the restricted key and a test-mode purchase first.
What I did do: 61 tests cover the rules, the exact Stripe requests, the cache, the checkout and the template. I made 13 deliberate breakages and the tests caught all of them. I also drove the whole flow in a real browser, with the admin page and the pricing page in front of the real billing service and a fake Stripe, for 37 checks.