Hello Laravel
Up until 2013, all Spatie projects were made using a custom-built CMS that was powered by Zend Framework 1. In 2013, we transitioned to Laravel, which was at version 4.0 at the time. We were immediately impressed by the expressive syntax and the big focus on developer happiness of Laravel.
At that time, a lesser-known guy named Jeffrey Way started his next project, Laracasts: a video tutorial site dedicated to Laravel. We realized that his videos could greatly accelerate our learning process and immediately bought a lifetime subscription.
On March 4, 2014, Jeffrey published a video titled "Continuous Integration With Travis." Travis and its integration with GitHub looked so cool that we wanted to use it.
A few months before he made the Travis video, Jeffrey created a mini-series on package development that contained all the information you need to get started creating your own package.
Making the switch
At the time we were working on a project that needed to automatically create screenshots of a website. With the things we learned on Laracasts, we started to work on our first package: Browsershot. This package was essentially just a simple wrapper around PhantomJS (the current version uses Headless Chrome and Puppeteer).
It was pretty exciting working in the open. We were thrilled every time the download counter got up and were incredibly happy that other people started writing about it.
Our first package, browsershot, is currently on its 4th version and has been downloaded more than 13 million times since its release!
Back when we used Zend Framework, we used a custom-built application template, called Blender, to kickstart all our client projects. Think of it as a very basic CMS. Besides traditional CMS features, Blender could do a lot of cool things: pull in data from Analytics to show graphs about the usage of the site; handle uploaded files; subscribe users to a MailChimp list and more.
To power new projects, we needed a Laravel version of our CMS and started creating it from scratch.
We soon realized that some of the things we were porting to Laravel could also be useful to other developers and decided to build these functionalities in packages.
In quick succession packages like laravel-newsletter, laravel-medialibrary and laravel-analytics were created, each of them still being supported and regularly updated.
Currently, every new package that we create gets born inside a client project. In almost every project we find some functionality that can be extracted to its own package.