Before we dive into the main topic, let me introduce myself. My name is Muhammad Azmi, a full stack developer from Palembang. Although I never formally studied IT, coding has been one of my hobbies since 2013.
For years, CodeIgniter 3 was my favorite PHP framework while freelancing. It served me well, and I felt there was nothing wrong with it. But eventually, things changed, and I realized that staying in my comfort zone was no longer an option. When CodeIgniter 4 was released, I wasn’t initially interested because it felt like a lighter version of Laravel.
However, after working with CodeIgniter 4 on office projects for about 10 months, I started to explore Laravel. That’s when I decided to upgrade my personal project and one of my freelance traffic sources, amperakoding.com, to Laravel 11.
I knew this transition wouldn’t be quick, as my primary focus was still on office work. The entire refactoring process took around two months, working 2–4 hours per day.
Why did it take two months? Because there were numerous modules that required not only refactoring but also new additions and improvements. For example, in the old version, there was no invoicing or receipt creation module. Additionally, I was learning the Laravel ecosystem as I went, adapting and applying tools as needed.
I was truly amazed by how powerful Laravel is, with a vast array of tools available for building websites or custom web applications. The documentation is also incredibly comprehensive.
Need authentication and authorization? Laravel has Breeze or Jetstream. Want to build an API? There’s Sanctum and Passport. Database queries with complex relationships? Eloquent has you covered. Laravel also simplifies validation, notifications, job queues, and more.
With Livewire, Laravel now feels like a complete full stack framework.
Although my main project still runs on CodeIgniter 3, I eventually plan to refactor it as well—unless the client decides to stick with the current setup due to budget constraints. 😄
CHALLENGES
First, Database Redesign and Data Import.
The project had dozens of tables that were created without migrations, since I didn’t use CodeIgniter 3’s built-in migration tools. To ensure a more maintainable codebase, I utilized Laravel’s database migration feature. For data import, I used CSV imports with Laravel Excel and seeders.
Second. Blocking Spam at Certain Endpoints
Laravel offers a built-in rate limiter, which I applied to endpoints like new customer registrations and access to invoices and receipts (which include QR codes visible to the public).
Third, Maintaining Strong SEO Performance.
Achieving rank #1 in Google search results for certain keywords is no small feat. I enjoy sharing my knowledge through blogs, and I’ve applied several SEO techniques to achieve high rankings. For example, you can see the results in the “Most Popular Article” widget on amperakoding.com. Laravel’s routing system made URL management, RESTful APIs, security, and middleware grouping more straightforward compared to CodeIgniter 3, where I didn’t even use routing in my project because it wasn’t as complex at the time.
Fourth, UI styling with Tailwind CSS.
As someone accustomed to Bootstrap, transitioning to Tailwind CSS—Laravel’s default CSS framework—was a challenge. While some classes are similar to Bootstrap, Tailwind requires defining many styles manually (e.g., font size, colors, padding, margins). For those who prefer not to build components from scratch, Tailwind offers solutions like Flowbite, DaisyUI, and TailwindUI.
SO, WHAT’S NEXT?
Exploring Laravel’s entire ecosystem would take a lot of time because there’s just so much to cover. I’m also interested in continuing my journey into mobile development, which was put on hold due to freelance projects and college commitments in the past.
CONCLUSION
Never stop improving yourself—there’s always something new to learn, and there will always be people more skilled than you.Honorable Mention for My Support System
- ChatGPT Premium
- Stackoverflow