“Good old times”
For several years we have been actively developing our own CMS. If you’re like us, you probably know it very well. Starting on a green field, no framework. First thinking small, but adding features for years, ending with a huge system with tons of nice functionalities, with super-tailor-made MacGyver-like utilities that suit just us. But on the other hand with a lot of legacy code that remembers the dead from the past and with absolutely no documentation whatsoever.
Couple of years ago, when Laravel 5.0 was out, we have made a decision – the next version of our CMS should be based on Laravel. And that’s what we did. We have thrown away everything we had before and we started over. We have created a new version of our CMS, we called it simply – SimpleWEB 4.0 – following the line of our previous versions.
In spring 2017 we have realised, that we need to upgrade it again. Refresh of Administration UI was inevitable. Integration of upcoming Laravel 5.5 was also part of the plan. At that moment we were very inspired by Spatie and their approach to the open-source community. That’s why – for the first time in our history – we wanted to create a new version of our CMS as an open-source.
Pros were obvious – exploring new possibilities following industry standard open-source guidelines would inevitably teach us a lot. We really wanted to prove ourselves we can do it the right way, so we have decided to pay strong focus on the things like code readability, testing and documentation.
But there were cons as well. We have analysed couple of existing solutions based on Laravel (i.e. OctoberCMS, Quick Admin Panel, etc.), but we didn’t find them to fit our way of thinking. The set of features we were using with our previous versions of CMS, on a daily basis, was huge. It was impossible to develop such a robust solution we had been building for years in just couple of months (budget, you know… 😛 ). Second, from our previous versions of the CMS we had this feeling we cannot exists without some of our proprietary utilities we were using (we are not able to open-source it).
But then it clicked – “We totally need to split it to smaller chunks” someone said. What he meant was we need to separate pieces of functionality into standalone packages, use the other existing packages for the most of the features we need. We were thinking, ideally our new CMS would only be an empty composer.json file with very well cherry-picked set of packages ready for our typical web development project. And of course, we could hide some proprietary functionality into non-public packages, if we still think we need them.
We have also realised, that in almost all our projects we keep on adjusting this one big CMS to the needs of the project quite heavily. We were thinking “Why do we need to develop so robust CMS to cover so many different use cases?” After many brainstormings we came up with the idea, that what we really want is not another CMS system. What we really want is rather just a very slim administration toolkit – a starting point for further tailor-made development for a specific project. We decided to go for a very light, minimalistic base, but with powerful set of tools and features for building back-office systems.
That’s how we came to the idea of Craftable – an administration starter kit for Laravel.
We have identified these core parts we need to cover:
- GUI, the interface – we have used CoreUI as a main platform for the UI, we added couple of other things and we wrapped it all into our `brackets/admin-ui` composer package and `craftable` npm package
- CRUD generator – the basic tool we have been using for a decade already, in our previous CMS systems. Generator helps you to scaffold new modules very quickly. It automates the repetitive manual work and targets your focus on a specific details of the module.
- Auth – ability to log into the admin/back-office interface (with support for building things like Roles & Permissions)
- Translations manager – ability to manage (via backoffice) the translations (and the original)
And couple of other minor areas:
- Media eloquent – ability to attach media to the eloquent models
- Translatable eloquent – ability to translate defined attributes of an eloquent model
Our philosophy was really to always look for an existing solution – in most cases some composer package. If that package was missing something important, we wrapped it and added only missing functionality. Only if the package was missing some crucial parts, we looked at it only as an inspiration and we went for a custom development from scratch.
In 2017, after couple of months of development and testing and refactoring we had happily released it – Craftable v1.0. Our first bigger contribution to the open-source family. We were very excited. Our little baby 🙂
Now we are using it on a daily basis in almost all ouir projects. We are continuously improving it, bugfixing and adding new features. We would really appreciate your opinion on Craftable. Give our demo a shot. Your feedback is very welcome. And if you have an idea that you are able to materialize, feel free to file a pull request. We have already accepted several pull requests from a guys all over the world.