Are you about to build a SaaS platform using Laravel? Well then you are at the right place, this article will explain everything you will need to make the process of building a SaaS platform easier when you are building with Laravel. This is not like any other boring article but you will be reading tips from someone who has built multiple SaaS platforms using Laravel.
This article assumes that you already know about Laravel and you have built at least one website using Laravel. This article does not guide you by writing codes but the approach of how you should achieve it with best pratices and easiness.
Before we go for a deep dive, let’s first clear all the questions you might have before you even start your project.
Table of Contents
Is Laravel powerful enough for large SaaS platform?
Laravel is a very powerful (not only powerful enough) framework to build any website with ease. Laravel has a lot of built-in classes and functions to help making the development smooth and strong at the same time. Almost 80% of websites on the web are built using the same programming language that Laravel uses, even Facebook still to the date uses PHP (the programming language that laravel is built on) in alot of places. On a personal note, I will prioritize Laravel for building any kind of website from my clients.
Will using Laravel take longer to build a SaaS than the other tech stacks?
It will take sooner to build a SaaS platform with Laravel (if you are using the right tools and libraries) than any tech stack out there. Laravel has a great community to help you with any errors or challenge you might encounter, and all the tools and libraries that we will discuss in this article will make your life much easier with Laravel either you are creating a small website or a large SaaS platform.
Building a SaaS Platform using Laravel
I hope that all of your basic questions that you might had are answered now. So let’s start with the building of the saas platform with laravel. In this section, we will see all the tools and libraries that you will need for specific cases.
Here’s a summary list when building a saas platform using laravel:
- Get started with a starter-kit
- Utilizing the new features of PHP
- Utilizing the TALL Stack
- Roles & Permissions
- Billing & Subscriptions with Cashier (Stripe)
- Handling Multi-Tenancy
- Using multiple sub-domains
- Database Management & Scopes
- Testing the implemeneted Features the correct way
- Using a Version Control for backups & escape
Get Started with a Starter-kit
The best way to get started with small or big project is to use a starter-kit from the framework developers to kick-start the project and not to waste time to implement the basic features and tools that you might need. Same goes with Laravel as well. You will find multiple starter-kit on the web for each type of project in Laravel but I suggest to start with a one that Laravel provides itself. Why? Because if the framework developers are writing the starter-kit than they are utilizing each and every optimized feature of the framework, and you can learn from it by going through the codes.
Laravel has two starter kits on their docs, Breeze and Jetstream. Both of them uses the same tech stack, both has Livewire and Inertia and are using TailwindCSS. I’ve worked with both, and I would suggest to start with Breeze rather than Jetstream if you have not done at least 3 projects using Laravel and with Breeze things become more custom and better to understand. I usually prefer Breeze until the project has teams feature.
Utilizing the new features of PHP
Are you utilizing all the new features PHP has to offer? If not, you are missing a lot of stuff here. To avoid unexpected errors and performance issues, I highly recommend to utilize the new features.
PHP, specially later updates from PHP 7 has been optimized and modernized way better than any programming language that I’ve worked with and Laravel takes full advantage of that.
I suggest to through all the new features and see what you can use for your project to make life easier in PHP docs. But I’m going to mention here a few that the most used one in the new versions of PHP.
Typed Properties: If you have worked with TypeScript ever then you know the importance of declaring the types of an object or property. PHP now has that feature, you can declear a type of the property while defining it. Take advantage of it to avoid unexcepted errors.
Enums: Remember those columns in your database that can only be either one option or the other or any from the list? Well, now you can take advantage of the Enums of PHP in Laravel to make your life easier. Enums themselves can be a topic on it’s own. But I highly suggest to use them.
Function Return Type: Same as typed properties, you can define a data type that a function can return so that your function is always returning the correct data type.
This list can go much longer, but this article isn’t about the new feature of PHP. Let’s jump to the other points.
Utilizing the TALL Stack
If you took the first point in action then you are already using TALL stack. TALL stands for TailwindCSS, AlphineJS, Laravel and Livewire. When all of these libraries are combined, it makes a very solid and fast environment for the project. TailwindCSS will cover all the designing and CSS magic to be done, AlphineJS will cover all the CSS components that you need to make functional such as Modals, Dropdowns etc. and Livewire is where the real magic happens which handles all the dynamic aspect of your components. And using the new versions of Livewire, you can even create a feel for SPA for your SaaS application.
Roles & Permissions
If you are building a SaaS platform or application, there’s gotta be more than one role and hence more permissions for sure. So you will need a way to manage them as easier and faster as possible, for which there is a open-source library for that called “laravel-permissions” by Spatie. It makes it much easier to manage all the roles and permissions for your project.
I suggest to create an Enum for all the roles and another for the permissions and make a seeder that will fetch the permissions and roles from the enum and sync them with your database table.
Billing & Subscriptions with Cashier (Stripe)
If you are building a SaaS platform, there is a high chance that it accepts payment from the users. Laravel has it’s own documentations and tools for billing and subscriptions. Laravel’s Cashier is one of the library/tool that Laravel has to offer. Cashier makes it very easy to manage all the users, their payment methods, invoicing, subscriptions and much more in just a few lines of code. Either you are going to charge the customer only once or you are charging them regularly, Cashier has methods to take care of that.
Cashier is very easy to configure and can integrate into your project very smoothly like all the other laravel libraries.
Handling Multi-Tenancy
There are SaaS platforms that has multiple companies/brands that has multiple teams and users, this is called Multi-Tenancy and some people also refer this as Whitelabel. For example, you might be building a SaaS platform using Laravel that is an application for real estate where multiple landlords has their own dashboard with their own logos, name and color scheme. So you want a way to manage that, and a single user might be associated with multiple landlords.
There are two major libraries to tackle all the challenges you might face while building a SaaS platform using Laravel that has multi-tenancy. And both of them has their own way to tackle them. One is Spatie’s Multi-Tenancy and the other is Tenancy For Laravel. I suggest to go over their docs briefly to see which library fits best with your needs and programming pattern.
Using multiple sub-domains
It’s always a good idea to divide the parts of your application into sub-domains for a better management and focus of the website design. For example, you might have multiple roles and all of them has a different dashboard or views on their end, so it will be better if we divide these into different sub-domains. Another reason you might want to use multiple sub-domain is multi-tenancy, although the libraries mentioned above for it also supports multi-domain for multi-tenancy.
Personally, I always make the admin panel in a different subdomain, a dashboard for the user in a different one and the landings pages in the root domain.
Luckily, Laravel supports sub-domain handling on it’s own. You won’t need a library to manage multiple sub-domains in later versions of Laravel. You just need to group your routes of the sub-domain into a domain group. Learn more about it on Laravel’s documenation.
Database Management & Scopes
Laravel is a very large framework and there are things that people still don’t know about them. I’ve seen projects that could use a better database schema and utilize scopes in laravel but never did.
When it comes to picking a database, unless you are choosing SQLite. SQLite is a great option for small websites that rarely gets thousand of visitors monthly. But if you are going with MySQL or PostgreSQL, both of them are really great choices. Although PostgreSQL has more to offer than MySQL but I rarely had to use PostgreSQL because of feature limitation from MySQL. But what matters is how you are structuring your database, I’ve seen projects that directly make changes in the database instead of using Laravel’s migrations, that’s the worst thing you can do with your project. And going with the right schema of the database for your project is another topic on it’s own.
Scopes in Laravel are really useful, you could modify the queries automatically before they reach to the database. A useful case can be that you want to only show all the entries from a table of the user itself only, so traditionally you would add a condition to all of your queries but you could utilize Scopes to automatically add that condition without you always adding it and might forgot to do so as well.
Testing the implemeneted Features the correct way
Are you testing all the features in your Laravel project manually? You could automate that as well and save time. When you are building a SaaS platform using Laravel, then there is a high chance that you will have a lot of features and all of them must be tested.
So testing manually all the time might not be a good idea and if you are a team working on it then it’s even worse. The best way to test your features in laravel is to use Laravel’s Test. It helps you automate all of your Unit or Feature tests so that you won’t need to manually go over all of the steps each time you change something to check if it works.
Using a Version Control for backups & escape
Although, there is a very high chance that you are already familiar with Version Control and are using one such as Git. But it’s worth mentioning, that it’s always a good idea to use one, and commit things on every small change you make and create different branches to better manage all the versions of your application.
I’ve seen developers using Git but in the wrong way. They just create the default master branch and then just keep pushing there with big commits. But what instead you should be doing is creating a new branch for every feature or changes you want to make, and then commiting all small changes you make for that feature in to that branch and eventually merging this branch with your master branch.
You could also automate the process to check for any syntax errors or formatting using a CI/CD.
And that’s wrap up! That’s all that you need to know about before you start writing the first line of code for your SaaS platform using laravel. If you got any questions or suggestions, please reach out and it will be answered in this blog post.