How I ended up building a Laravel Hybridly site for a year - Work Journal July 11, 2025

I really thought 2024 would be the year I started building a bunch of Statamic sites, and I was excited to expand that area of expertise. I launched two small Statamic projects to get a taste of that type of work, and then the year went off track. I had committed to subcontracting on a large and complex project to rebuild a backend portal that I thought would take months of development, and I expected to be able to build using Laravel Nova or Laravel Filament.

Our timeline for getting the site completed was being rushed because their existing site was about to be unsupported and unhosted by the original developers. The original site was built with Microsoft C#, and we had been provided with a copy of the code and the existing database. Of course, the database was a Microsoft SQL Server backup file that could not easily be converted into anything useful—but eventually, we found a way to dig into the data.

I brought another developer (Yaz of ninjaparade fame) on board, and after a lot of planning and strategizing, we decided to attempt it using Laravel Filament because it provided us with a lot of functionality and ways to generate quick user interfaces.

During the first few months of development (Feb 13 – April 4, around 80 of my hours, 170 commits), I had so much fun planning and constructing the user interface for managing the different types of content we needed. But the farther along we got, the more we realized the project would require complex permissions and content interactions that Filament wasn’t quite ready to handle. Even though the Filament project had a lot of tables and forms working well, it ultimately wasn’t going to meet the client’s requirements, and we needed more flexibility.

I’d love to try working with Filament again on a simpler project with more flexible requirements, because it really was a joy to create custom tables and forms with just a few lines of code. Eventually, the existing host decided they could keep the current site online without improvements or additional work, giving us some runway to build the new site properly.

We still had some good database models and UX decisions to build upon from the Filament work but needed a different foundation. Using NuxtJS to create a frontend for a Laravel API backend seemed like a flexible approach. After a few more months (April 4 – June 17, around 80 of my hours, 220 commits) of development, we ran into many issues with the frontend and backend not authenticating or communicating smoothly. So we pivoted again. Once again, there were database plans, some code, and gained knowledge that we could carry forward—but much of the time and effort was lost, and the project was taking much longer than expected.

As they say, third time’s the charm. We went with Laravel Hybridly as the core of our next attempt. Laravel Hybridly had a few key things going for it: clear standards for frontend-backend communication, great flexibility for the user experiences we needed, and strong foundations for forms and tables. Hybridly was similar enough to Laravel Inertia (which I’ve worked with before) that I didn’t feel totally lost. But of course, there were lots of new things I had to wrap my head around: Laravel data types, TypeScript, Postgres, and the joys of Laravel Sail—which likes to conflict with my other local dev tools.

Yaz was always there to explain new ideas, review my messy code, and tackle complex pieces like file management, ecommerce, migrations, and server permissions.

The deeper we understood their existing portal and database structure, the more we realized how massive this project really was. I was pretty sure that by the end of this flat-fee engagement, I would have spent more on outside help than I brought in, and all my time would be chalked up as a learning opportunity. But I was confident I could survive the financial burden and eventually complete the project to the client’s satisfaction.

For the remainder of 2024, I knew we were at least a few months away from testing. I felt bad that the site wasn’t finished, but I had to balance throwing as much time as I could into the project with earning money from other work to fund it. With all the development investment, I didn’t want to launch something subpar—I wanted something we could be proud of and continue building on.

In early 2025, key features like ecommerce, file migration, and PDF certificate generation still needed to be completed when the client’s relationship with their existing host shifted. In mid-February, we were given a hard deadline: launch by the first week of April.

Things kicked into high gear. We scrambled to set up staging and production environments on AWS (which I hadn’t used before) and fix as many bugs and incomplete features as possible. We wrote a complex migration script that took CSV exports of the original database and carefully migrated the data into our Postgres tables. The migrations had to run in a specific order to preserve relational dependencies and references.

We also had most of their existing PDFs and resource files, which we uploaded to Amazon S3 and linked at their new URLs. As launch day approached, we developed custom Laravel Artisan commands specifically for the go-live process and tried to plan everything out in detail to keep things on track.

From start to launch, I spent over 420 hours on the Laravel Hybridly version of the site, and Yaz probably spent at least 200. We made over 1000 commits and tracked 300+ issues in Linear. Since launch, we’ve made countless improvements based on user feedback and things we knew we wanted to clean up.

Now that the dust has settled, it’s really exciting to see the project being used daily. We’re so happy we can quickly roll out fixes and improvements that make our client’s work easier. Maybe I’ll write more later about our integrations with the WordPress marketing site, the national API, PDF generation, Stripe ecommerce, and how we handled importing content from over 100 existing tables.

Do I regret taking this project on? No, I don’t.

Do I wish I had estimated the timeline, complexity, and budget better? Absolutely.

Is it one of my favorite projects from the hundreds I’ve done over the past 25 years? Without a doubt.

It gave me a chance to learn new tools, explore new approaches, and work with Yaz to sharpen my dev and management skills.

I’m still looking for some fun Statamic projects to sink my teeth into—but for now, I’ll keep trying to make my clients happy and learn whatever I can along the way.





The complete Work Journal series:
1. Week ending January 25th, 2019
2. Week ending February 1st, 2019
3. Week ending February 8th, 2019
4. Week ending February 15th, 2019
5. Week ending February 22nd, 2019
6. Week ending March 1st, 2019
7. Week ending March 8th, 2019
8. Week ending March 15th, 2019
9. Week ending March 22nd, 2019
10. Week ending March 29nd, 2019
11. Week ending April 5th, 2019
12. Week ending April 12th, 2019
13. Week ending April 19th, 2019
14. Week ending August 9th, 2019
15. Week ending September 20th, 2019
16. Week ending September 27th, 2019
17. Week ending December 6th, 2019
18. Week ending October 2nd, 2020
19. Week ending April 2nd, 2021
20. Coding API integrations in Twilio Studio - Work Journal May 8, 2021
21. Trudging through a complex theme implementation - Work Journal October 29, 2021
22. Creating custom Duda widgets - Work Journal December 10, 2021
23. My first Laravel Nova project - Work Journal December 1, 2023
24. Let's talk about Statamic - Work Journal January 12, 2024
25. How I ended up building a Laravel Hybridly site for a year - Work Journal July 11, 2025