{"id":13578983,"url":"https://github.com/miracuthbert/saas-boilerplate","last_synced_at":"2026-01-16T05:29:37.156Z","repository":{"id":38751722,"uuid":"125220536","full_name":"miracuthbert/saas-boilerplate","owner":"miracuthbert","description":"SaaS boilerplate built in Laravel, Bootstrap 4 and VueJs.","archived":false,"fork":false,"pushed_at":"2023-08-27T15:13:55.000Z","size":3380,"stargazers_count":363,"open_issues_count":9,"forks_count":141,"subscribers_count":16,"default_branch":"2.x","last_synced_at":"2024-11-05T17:48:10.169Z","etag":null,"topics":["api","boilerplate","laravel","restful-api","saas","saas-boilerplate","subscription"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miracuthbert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-03-14T13:55:02.000Z","updated_at":"2024-11-03T21:38:15.000Z","dependencies_parsed_at":"2024-01-17T00:54:49.635Z","dependency_job_id":null,"html_url":"https://github.com/miracuthbert/saas-boilerplate","commit_stats":null,"previous_names":[],"tags_count":13,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miracuthbert%2Fsaas-boilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miracuthbert%2Fsaas-boilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miracuthbert%2Fsaas-boilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miracuthbert%2Fsaas-boilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miracuthbert","download_url":"https://codeload.github.com/miracuthbert/saas-boilerplate/tar.gz/refs/heads/2.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247399818,"owners_count":20932875,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","boilerplate","laravel","restful-api","saas","saas-boilerplate","subscription"],"created_at":"2024-08-01T15:01:35.578Z","updated_at":"2026-01-16T05:29:37.144Z","avatar_url":"https://github.com/miracuthbert.png","language":"PHP","funding_links":[],"categories":["PHP","Laravel"],"sub_categories":[],"readme":"# saas-boilerplate\n\nThis is a SaaS boilerplate built on top of the Laravel framework.\nBuilt to provide developers with a template to kickoff their SaaS application,\nwithout the hustle for repetitive tasks such as user account setup, subscriptions\nand role management.\n\n## folder structure\n\nInspired by domain-driven approach.\n\nLaravel's main `app` folder is restructured to: `App`, `Domain` and `Http`.\n\n### outline of app folder\n\n- App\n  - Console\n  - Controllers\n  - Exceptions\n  - Providers\n  - Traits\n  - TwoFactor\n  - ViewComposers\n- Domain\n  - Account\n  - Auth\n    - Events\n    - Listeners\n    - Mail\n    - Rules\n  - Projects\n  - Subscriptions\n  - Teams\n  - Users\n    - Models\n    - Filters\n    - Observers\n- Http\n  - Account\n    - Controllers\n    - Requests\n  - Auth\n    - Controllers\n    - Requests\n  - Middleware\n  - Subscriptions\n  - Teams\n  - Users\n    - Policies\n    - Resources\n\n## features\n\n- Authentication\n  - Login / Registration\n  - Email Activation\n  - Two Factor Login (only when enabled)\n- Subscription with Stripe\n  - User plans\n  - Team plans\n- Account (User Account)\n  - Profile Update\n  - Change Password\n  - Two Factor Authentication\n  - Subscription\n    - Cancel Subscription\n    - Resume Subscription\n    - Swap Plan\n    - Update Card\n  - API Tokens\n- Single Database Multi-tenancy\n- Admin\n  - User Management\n    - Create Users (and assign role)\n    - Manage User Roles\n  - Role \u0026 Permissions Management\n- Developer Panel\n  - Manage OAuth Clients\n  - Manage Personal Access Tokens\n- Other features\n  - Filtering (extendable)\n  - API access (starter template)\n\n*Note: Some features may be subjected to change. Other features may not be listed\nsince they are under development or do not qualify as a standard / main SaaS feature.\nSome common features will not be listed as well.*\n\n## Installation\n\n1. Fork, clone or download this repository.\n2. Run `composer install` if its the initial setup or `composer update`.\n3. Setup your environment keys in .env\n    (*If .env does not exist then copy / rename .env.example as .env*)\n4. Run `php artisan migrate` for initial tables setup.\n5. __Optional:__ Run `php artisan db:seed --class=RoleTableSeeder` to set the initial\n    roles and permissions, then follow `step 7` below to assign a user the initial permissions and roles.\n6. __Optional:__ To create a `root` admin;\n    Run `php artisan role:assign youremail@example.org admin-root`.\n    Substitute `youremail@example.org` with an existing user email. `admin-root` is the __default root Admin role__.\n\n    __Note:__ You must follow `step 5` above first to setup the root admin.\n\n## Usage\n\n### Generating different files in app folder\n\n#### Channel Make Command\n\nphp artisan make:channel \\SAAS\\App\\Broadcasting\\{name}\n\n#### Console Make Command\n\nphp artisan make:console \\SAAS\\App\\Console\\Commands\\{name}\n\n#### Exception Make Command\n\nphp artisan make:exception \\SAAS\\App\\Exceptions\\{name}\n\n#### Job Make Command\n\nphp artisan make:job \\SAAS\\Domain\\{namespace}\\Jobs\\{name}\n\n#### Event Make Command\n\nphp artisan make:event \\SAAS\\Domain\\{namespace}\\Events\\{name}\n\n#### Listener Make Command\n\nphp artisan make:listener \\SAAS\\Domain\\{namespace}\\Listeners\\{name}\n\n#### Mail Make Command\n\nphp artisan make:mail \\SAAS\\Domain\\{namespace}\\Mail\\{name}\n\n#### Model Make Command\n\nphp artisan make:model \\SAAS\\Domain\\{namespace}\\Models\\{name}\n\n#### Notification Make Command\n\nphp artisan make:notification \\SAAS\\Domain\\{namespace}\\Notifications\\{name}\n\n#### Policy Make Command\n\nphp artisan make:policy \\SAAS\\Http\\{namespace}\\Policies\\{name}\n\n#### Rule Make Command\n\nphp artisan make:rule \\SAAS\\Domain\\{namespace}\\Rules\\{name}\n\n__Note__: Some files can be placed in the `app/App` folder if they are intended to be used globally\n\n```cli\nphp artisan make:{command} \\SAAS\\App\\{namespace}\\{name}\n```\n\n### Custom Commands\n\n1. __Admin: *Assign user a role*__\n  Use `php artisan role:assign \u003cemail\u003e \u003crole-slug\u003e`:\n    `\u003cemail\u003e` is the user's email and `\u003crole-slug\u003e` is the *slug of the role* you wish to assign the user.\n\n### Force HTTPS\n\nWhen pushing the project to a platform or production environment,\nassets or urls may be broken if the platform enforces HTTPS.\n\n*To enable urls to use HTTPS:*\n\nSet `FORCE_HTTPS` variable in `.env` file to `true`.\n\nBy default `FORCE_HTTPS` is `false`.\n\n```Note:``` If `FORCE_HTTPS` does not exist in your `.env`,\njust add it as a new variable and assign a boolean value `true` or `false`.\n\nThis dynamically tells Laravel to force urls to use HTTPS which is especially\nhandy in fixing or preventing  broken assets urls.\n\n### Single Database Multi-tenancy\n\nSee [miracuthbert/laravel-multi-tenancy](https://github.com/miracuthbert/laravel-multi-tenancy)\n\n#### Model setup\n\nTo start using single databse multi-tenancy call `ForTenants` trait on a model\n\n```php\nuse Miracuthbert\\Multitenancy\\Traits\\ForTenants;\n\nclass Project extends Model\n{\n    use ForTenants;\n}\n```\n\n#### Tenants CRUD Operations\n\nOnce you have setup the model as show above. `Just call CRUD operations directly`.\n`Tenant` relationships are handled automatically.\n\n```php\n$projects = Project::create([\n    'name' =\u003e 'Project 1'\n]);\n$projects = Project::get();\n```\n\n#### Normal CRUD Operations\n\nTo perform CRUD operations on models with `ForTenants` trait can be done by\nadding `withoutForTenants` scope when fetching records associated with that model.\n\n```php\n$projects = Project::withoutForTenants()-\u003eget();\n```\n\n*__This comes in handy for example in: admin or moderation operations__*\n\n#### Routing\n\nAll `tenant` routes are under the routes folder in the `tenant.php` file.\n\nNote: *__Tenant routes follow the same structure as other routes__*\n\n`The main reason we place all tenant routes separately is to handle route binding and\nits much easier to know which routes are for tenants.`\n\n## libraries \u0026 packages\n\n- Main\n  - PHP (\u003e=8)\n  - Laravel (Minimal 9)\n  - Laravel Cashier (can be switched)\n- UI (can be switched)\n  - Bootstrap (v4)\n  - Font awesome\n  - Simple Line Icons\n  - jQuery\n  - VueJs\n  - Development\n    - nodejs\n    - npm\n\n## services\n\n- Stripe (payment gateway)\n- Authy by Twilio (two factor authentication)\n\n## Changes\n\n- `Roles and Permissions`: See [miracuthbert/laravel-roles](https://github.com/miracuthbert/laravel-roles)\n- `Multi-tenancy`: See [miracuthbert/laravel-multi-tenancy](https://github.com/miracuthbert/laravel-multi-tenancy)\n\n## Security Vulnerabilities\n\nIf you discover a security vulnerability, please send an e-mail to Cuthbert Mirambo via [miracuthbert@gmail.com](mailto:miracuthbert@gmail.com). All security vulnerabilities will be promptly addressed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiracuthbert%2Fsaas-boilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiracuthbert%2Fsaas-boilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiracuthbert%2Fsaas-boilerplate/lists"}