When we started PLint-sites, we built websites using WordPress. At the end of 2014 we embraced Laravel, in 2017 we started using Vue and recently we released a Nuxt powered blog. As new tech emerges it may make existing tech obsolete. As developers we need to keep track what is new and what is worth learning, while acknowledging we can’t learn everything because it is just too much.
At the start of a new project, we have to decide which tech stack to use. In this post I’ll discuss our current choices.
Once you have chosen your tech stack and started development, there is no turning back. Even though this is a rather bold statement, it is how it works in practice. Changing the basic setup of a project, for example switching from a Laravel application to a Vue SPA, would require a lot of effort (time and money). Therefore, such rewrites are only carried out when a different setup has major benefits. Here are our current choices for the various types of projects we typically encounter (from advanced to simple):
- Advanced platform (e.g., custom ecommerce website including admin panel)
- Laravel with Vue to create SPAs on specific pages
- Laravel with Jetstream (Inertia)
- Progressive web app
- Vue frontend with Laravel API
- Proof of concept platform
- Simple blog website
When building an advanced platform, with many entities, overviews and a lot of user interaction, for example a custom ecommerce shop, we start with Laravel. Per page we discuss how it should work and we set it up using blade templating (if little to no interaction is required), or we create a SPA inside the page by adding a Vue component that handles the page for us. However, be careful with respect to SEO when using the SPA approach.
The arrival of the Jetstream package for Laravel seems to make this approach a little outdated. Choosing the Inertia scaffolding gets you up and running very fast. Simply said, Inertia provides you with a SPA on every page whereas routing is still handled by Laravel. Even though we haven’t built a large platform using Laravel Jetstream, this approach is likely to be the holy grail we have been looking for for years.
Progressive web app
When the project requirements tend more towards a native mobile app, we create a progressive web app (PWA). The frontend is created with Vue (using the excellent Vue CLI) which takes away lots of configuration. This frontend communicates with a Laravel API, although this is easily exchangeable. We typically host these on Digital Ocean powering the deployment via Laravel Forge, but the Vue app may be hosted at Netlify. The full explanation of this approach (for a demo app) can be found here.
Proof of concept platform
For clients with a new business idea we often build a simple ‘proof-of-concept’ application, so they can quickly find out whether their idea will work out. If such an application requires a basic authentication system and CRUD operations, we choose Laravel.
However, if user interaction with the platform is the key idea, we start with a simple SPA using Vue.
Simple blog website
Generally speaking, a simple blog consists of a few templates (e.g. homepage, listpage, blog page, contact page) and a lot of static content (i.e. the blog posts). This is ideal for Laravel as well as Nuxt. SEO is important and both excel in this.
A blog with Laravel
As experienced Laravel developers we are able to quickly build the website. Deployment typically takes place via Laravel Forge on a Digital Ocean server, which is quite easy once you have some experience with it.
A blog with Nuxt
Although we have less experience with Nuxt compared to Laravel, the platform feels really promising. The Nuxt content module in combination with the routing based on folder structure makes for a really quick start. Additionally, being able to write posts using markdown reduces the need for a full weight editor. Lastly, the ease of deployment via a service like Netlify just works out of the box.
Summary and conclusion
In this post I summarized our tech stack for a new project. As always in these discussions, it really depends on the type of project which may range from an advanced ecommerce platform to a simple blog. We typically use one of the following stacks:
- Laravel (with Vue SPAs/ Jetstream)
- Vue frontend with Laravel API