October 5, 2026
A plan for letting customers subscribe to a fixed number of credits every month, with bonus credits on the bigger tiers. This page covers what we would ship first, the pricing we're proposing, what we deliberately left out, and the decisions we need from you.
One simple product: pick a monthly credit amount and it reloads every month. We're calling it Monthly reload rather than "auto-reload", because auto-reload suggests a top-up when the balance runs low, which we can't offer yet.
On Buy Credits, a new One-time | Monthly reload choice. Tiers: 250, 500 or 1,000 credits a month, priced in USD or CAD automatically.
The first charge is immediate. Credits (plus any bonus) land as soon as Stripe confirms the payment, e.g. "525 credits added today, then every month on the 5th."
Each month, on the same date, the card is charged and credits are added once the invoice is paid. Unused credits roll over; they never expire.
Customers manage or cancel in a Stripe-hosted portal. Cancelling stops future renewals at the end of the current month. Credits already granted stay.
| Tier | USD / mo | CAD / mo | Base | Bonus | Total credits | Effective $/credit |
|---|---|---|---|---|---|---|
| 250 | $245 | $348 | 250 | 0 | 250 | $0.98 |
| 500 | $480 | $682 | 500 | +5% = 25 | 525 | $0.914 |
| 1,000 | $950 | $1,349 | 1,000 | +10% = 100 | 1,100 | $0.864 |
CAD is provisional at USD × 1.42, same as today's one-time packs. Price floor: the effective price per credit stays at or above $0.85, the price of the biggest one-time pack (10,000 credits), so a subscriber never beats the largest volume buyer. One-time list prices run from $1.00 down to $0.85 per credit. Effective $/credit is in USD. We skipped a 100-credit tier because one edit costs 60 to 140 credits.
Pick a tier
Currency
Uses only the numbers in the tier table above.
MRR projection Illustrative, not a forecast
Monthly recurring revenue from Monthly reload subscribers, using the tier prices above. Defaults to the two-customer pilot (one on 250, one on 500).
12-month MRR projection
We went through the Pixlmob reference flow element by element. Most of it adapts well; a few pieces don't fit a credits-based product with no service fees.
| Pixlmob element | Verdict | What Summit would do |
|---|---|---|
| "Purchase Balance" with One-time | Auto-reload tabs | Adapt | One-time | Monthly reload tabs on Buy Credits, reusing the existing checkout. A shortcut from the dashboard credits card comes later. |
| Presets $100 / $250 / $500 / $1,000 | Adapt | Credit tiers instead: 250 / 500 / 1,000 a month. No 100 tier, since one edit costs 60 to 140 credits. One-time keeps all 7 packs. |
| Custom amount field | Drop (v1) | Free-form amounts break the fixed price list and invite "0 credits awarded" bugs. |
| Pay with card, 3% service fee | Drop | Summit has no service fees. A surcharge adds legal and brand friction; cost recovery belongs in the price. |
| Pay with bank / ACH, 0.8% fee | Defer | Not supported by our current Stripe setup. See "Bank debit" below. |
| "Fees waived with $500+/mo auto-reload" | Adapt | The credits equivalent: bonus credits on the 500 and 1,000 tiers. |
| "0%" badge on the $500 preset | Adapt | A "+5% credits" / "+10% credits" badge plus the effective price per credit. |
| Button "Add funds ($100.00/month)" | Adapt | "Start monthly reload, $480/mo", in the customer's currency. First charge is immediate. |
| "$100 added immediately… Next reload Nov 5." | Keep | Reworded: "525 credits added today, then every month on the 5th. Cancel anytime in Manage." |
| Banner about fees moving to orders | Drop | Pixlmob-specific. Summit has no fees to announce. |
| Sidebar "My balance $0.00" + "Fund my balance" | Adapt | A credits counter in the header (credits, not dollars) linking to Buy Credits, plus the dashboard credits card. Header counter is v1.1. |
| "Auto-reload: disabled · Enable" | Keep | Reworded: "Monthly reload: Off · Set up", and when on, "500 credits/mo · Nov 5 · Manage". |
| Dollar balance | Drop | Credits stay the unit everywhere, independent of currency. |
Andrew's monthly subscription (M1) and the Pixlmob-style fixed reload (M3) turn out to be the same thing inside Stripe; only the naming differs. So we merged them into "Monthly reload".
| M1 Monthly credit subscription | M2 Low-balance auto top-up | M3 Fixed "reload" (Pixlmob-style) | M4 Hybrid | |
|---|---|---|---|---|
| How it works | Card charged monthly; credits added when each invoice is paid | Card saved; charged automatically when balance drops below a threshold | Same as M1, framed as a "reload" with preset amounts | M1 now, M2 only if we leave Managed Payments |
| Works with our current Stripe setup | Yes | No Can't save a card or charge it later on its own | Yes | Half yes, half no |
| New data to store | One small subscriptions table | Saved card, threshold, amount, retry tracking, plus a scheduled job | Same as M1 | Both |
| Customer screens | Tab on Buy Credits, dashboard card, manage link | Plus threshold settings and a "needs card authentication" recovery flow | Same as M1 | Both |
| Admin impact | Subscription status on the customer page, a "payment failed" list | Plus a failed-reload queue and card-authentication follow-ups | Same as M1 | Both |
| When a card fails | Stripe retries automatically, then cancels. No exposure: credits are only added after payment. | Decline or bank authentication can block the customer right as they submit an order | Same as M1 | Both |
| Effort | Medium (4 build steps) | Large, and blocked today | Medium, same as M1 | Large+ |
| Verdict | Recommended | Parked Low-balance reminder instead | Recommended | Not now |
Why bonus credits, not a discount? A lower per-credit price for subscribers would collide with the volume-discount ladder and double the price list (and CAD upkeep). Priority turnaround is a strong perk but needs editor capacity and Felipe's input (v2). Free months or trials conflict with "everyone pays".
In Stripe test mode, confirm that subscriptions, invoices and the customer self-service portal all work through our current Lovable-managed Stripe connection. If the portal fails, Stripe's no-code portal link is the fallback. If subscriptions fail, we pause until we move Stripe to a direct connection.
Monthly reload on three tiers, USD and CAD, card only, on a private (unlinked) page for two pilot customers. Built in four steps: pricing safety checks, payment handling, the checkout screen, and manage/visibility. The Buy Credits tab is switched on after the pilot.
Opens to everyone once the pilot is clean and the Terms, refund and FAQ wording is approved.
A small credit-balance chip in the top navigation. Timed after the dashboard and navigation redesign steps land, to avoid rework.
An in-app banner and notification when a balance falls below roughly one edit: "Top up or set up monthly reload." No payment risk; covers most of what auto top-up would do.
Bank debit (US first) and true low-balance auto top-up, once there are several subscribers on the 500+ tiers and we've decided whether to stay on Stripe Managed Payments.
Rollback is simple: hide the page, cancel pilot subscriptions in Stripe, and leave granted credits in place. Nothing in the database needs undoing.
| # | Decision | Recommendation | Who |
|---|
Summit's checkout runs on Stripe Managed Payments: Stripe acts as the merchant of record, meaning Stripe (via Link) is the legal seller, collects sales tax, and handles disputes. That is convenient, but it limits what we can do:
Whether to stay on Managed Payments is decision D9. It isn't this plan's call, but it controls bank debit and auto top-up.
| Card (today) | US bank debit (ACH, USD) | Canadian pre-authorized debit (CAD) | |
|---|---|---|---|
| Fee | 2.9% + 30¢ (+3.5% Managed Payments, +0.7% Billing on subscriptions) | 0.8%, $5 cap; $4 failure; $15 dispute | 1% + 30¢, $4 cap; $4 failure; $4 dispute |
| Confirmation | Instant | Up to 4 business days | Up to 5 business days |
| Disputes | Contestable (Stripe handles under Managed Payments) | 60 days (personal) or 2 business days (business). Final, no appeal. | 90 days (personal) or 10 business days (business). Cannot be won. |
| Refunds | Full or partial | Full only, 3 business days | Partial and full |
| Subscriptions via Checkout | Yes | Yes | Not supported |
| Managed Payments | Yes | No | No |
| Customer portal | Yes | Marked unsupported | Marked unsupported |
Worked example ESTIMATE: on the $480 tier, a card under Managed Payments costs about $14.22 + $16.80 (Managed Payments) + $3.36 (Billing) ≈ $34 (7%), versus ACH at about $3.84 + $3.36. The saving is real from about $500/month upward. The fee stacking hasn't been confirmed against a real Stripe fee breakdown.
Because credits never expire (Terms 4.2), monthly credits roll over automatically. The subscription's value is the bonus and the convenience, not use-it-or-lose-it. Expiring subscription credits would need a ledger redesign and a Terms change; not recommended.
Each renewal writes two entries: the base credits (with the amount paid) and the bonus credits (no amount). Bonus is a promotional cost and base is prepaid revenue, which keeps reporting clean.
Under Managed Payments, recorded purchase amounts may include Stripe-collected tax. We'll confirm what today's pack records contain and record subscription invoices the same way. Net revenue for reporting then comes from Stripe's reports.
Subscriptions bring cash in monthly instead of in lumps; card payouts arrive on the usual schedule (about two days). No change to payout timing or editor pay.
credit_subscriptions) holding each customer's subscription: tier, currency, status (active, past due, cancelled…), next renewal date, and the last paid invoice.| Step | Size | What it does |
|---|---|---|
| 0. Pricing safety | S | One source of truth for every credit pack and monthly tier, plus an automated check that every price awards more than 0 credits in both currencies. Today a missing entry silently awards 0 credits. |
| 1. Payment handling | M | The new table, and handling for Stripe's renewal and failure events. Credits are granted only from the paid invoice, exactly once. An unknown price is rejected loudly (so Stripe retries) instead of awarding 0 credits. An admin "reconcile invoice" tool. |
| 2. Checkout screen | M | The One-time | Monthly reload tabs (first on the private pilot page), only approved credit products can be bought, a second subscription is refused with a pointer to Manage. Terms, refund and FAQ wording (Alex signs off). |
| 3. Manage & visibility | S–M | "Manage" link to Stripe's portal, a credits card on the dashboard, a "payment failed" banner and notification, and subscription status plus a past-due list for Felipe in admin. |
| 4. Header chip (v1.1) | S | Credit balance in the top navigation, after the redesign's dashboard/nav steps. |
| Stripe event | What happens |
|---|---|
checkout.session.completed | One-time packs unchanged. For a subscription, record it and grant via the invoice. |
invoice.paid | For a new subscription or a regular monthly renewal: add base + bonus credits from our own price table (never from Stripe metadata), only if the subscription is active. Any other kind of invoice: no credits, flagged for admin. |
invoice.payment_failed | Mark past due and notify in-app. No credit change. |
customer.subscription.updated / .deleted | Refresh status, cancel-at-period-end and renewal date from Stripe. |
| Refund / dispute (optional) | Alert only, no automatic clawback. |
Every Managed Payments restriction above, the bank-debit facts and fees, Stripe's subscription-event guidance (paid invoices, automatic retries, status handling), how plan changes are billed, how Lovable provisions the Stripe account and webhooks, and all the facts about today's code.