1
Billable model. App\Models\User with Spark\Billable, integer id, and for Stripe trial_ends_at cast to datetime.
2
Plans, in config/spark.php: name, monthly and yearly price ids, features, options. archived keeps old subscribers.
3
Portal. Served at /billing. Subscribe, swap plan, change payment method, download invoices. Spark's views, not yours.
4
Cashier. Spark does no billing of its own. Cashier Stripe or Cashier Paddle makes the calls and owns the subscriptions.
5
Webhook. /spark/webhook for Stripe, made by cashier:webhook; Paddle uses /paddle/webhook. Needed in local dev too.
6
Provider. Stripe, or Paddle as merchant of record handling VAT. One licence covers either; custom providers are not offered.