[FOSS pivot] Retire SaaS mode and subscription billing #37

Closed
opened 2026-08-16 15:09:53 +02:00 by myrmidex · 0 comments
Owner

Context

We're pivoting DishPlanner to a single self-hosted FOSS project. The SaaS subscription path (Stripe + Laravel Cashier) won't be monetized, so it's being removed.

Goal

Remove all SaaS/subscription code so the app runs purely self-hosted with a local account.

Delete

  • app/app/Enums/PlanEnum.php
  • app/app/Http/Controllers/SubscribeController.php
  • app/app/Http/Controllers/SubscriptionController.php
  • app/app/Http/Middleware/RequireSubscription.php
  • app/app/Http/Middleware/RequireSaasMode.php
  • app/config/pricing.php
  • app/routes/web/subscription.php
  • app/resources/views/billing/index.blade.php
  • app/resources/views/subscribe/form.blade.php
  • app/resources/views/subscribe/cancelled.blade.php
  • app/resources/views/subscription/index.blade.php
  • app/database/migrations/2026_01_06_0005* (6 Cashier migrations)

Edit

  • app/app/Models/Planner.php — drop Laravel\Cashier\Billable trait
  • app/app/Providers/AppServiceProvider.php — remove Cashier::useCustomerModel()
  • app/bootstrap/app.php — remove saas/subscription middleware aliases, the then: block loading routes/web/subscription.php, and the Stripe webhook CSRF exclusion
  • app/routes/web.php — unwrap the subscription middleware group; delete /billing and /billing/portal routes
  • app/config/services.php — remove the stripe block
  • app/composer.json + composer.lock — remove laravel/cashier, regenerate autoload
  • app/.env + .env.example — remove STRIPE_* vars

Acceptance criteria

  • composer remove laravel/cashier succeeds; grep for Cashier/Stripe/Billable/subscribe is clean
  • App boots; login/register/dashboard/dishes/schedule/users work self-hosted
  • Test suite passes
## Context We're pivoting DishPlanner to a single self-hosted FOSS project. The SaaS subscription path (Stripe + Laravel Cashier) won't be monetized, so it's being removed. ## Goal Remove all SaaS/subscription code so the app runs purely self-hosted with a local account. ## Delete - `app/app/Enums/PlanEnum.php` - `app/app/Http/Controllers/SubscribeController.php` - `app/app/Http/Controllers/SubscriptionController.php` - `app/app/Http/Middleware/RequireSubscription.php` - `app/app/Http/Middleware/RequireSaasMode.php` - `app/config/pricing.php` - `app/routes/web/subscription.php` - `app/resources/views/billing/index.blade.php` - `app/resources/views/subscribe/form.blade.php` - `app/resources/views/subscribe/cancelled.blade.php` - `app/resources/views/subscription/index.blade.php` - `app/database/migrations/2026_01_06_0005*` (6 Cashier migrations) ## Edit - `app/app/Models/Planner.php` — drop `Laravel\Cashier\Billable` trait - `app/app/Providers/AppServiceProvider.php` — remove `Cashier::useCustomerModel()` - `app/bootstrap/app.php` — remove `saas`/`subscription` middleware aliases, the `then:` block loading `routes/web/subscription.php`, and the Stripe webhook CSRF exclusion - `app/routes/web.php` — unwrap the `subscription` middleware group; delete `/billing` and `/billing/portal` routes - `app/config/services.php` — remove the `stripe` block - `app/composer.json` + `composer.lock` — remove `laravel/cashier`, regenerate autoload - `app/.env` + `.env.example` — remove `STRIPE_*` vars ## Acceptance criteria - `composer remove laravel/cashier` succeeds; grep for Cashier/Stripe/Billable/subscribe is clean - App boots; login/register/dashboard/dishes/schedule/users work self-hosted - Test suite passes
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lvl0/dishplanner#37
No description provided.