Languages & Frameworks
Official siteLaravel
Laravel — expressive, full-featured PHP framework for building readable, testable, production-grade applications fast.
Overview
Laravel is my day-to-day PHP framework for product work: the expressiveness of the syntax and a well-integrated ecosystem let a small team ship a lot without fighting the framework. Eloquent, queues, scheduling, and events cover the common needs cleanly.
I lean on the pieces that keep a Laravel app healthy in production — migrations and model contracts, queue workers for heavy work, jobs with retries, and the test tools (Pest/PHPUnit) that keep refactoring safe.
Where Laravel apps go wrong is hiding business logic in controllers and models. I keep the domain explicit with service classes, actions, and DDD-flavoured structure inside the framework, so Laravel stays an expression layer rather than a dumping ground.
The syntax is deliberately expressive, and I use that to keep intent visible. Redis-style fluent chains read more like a spec than plumbing, which matters when a small team must onboard quickly and move fast without building institutional knowledge barriers.
Eloquent is used with care, not as a dumping ground. ORM access is fine for reads, but write-heavy and invariants-bearing logic lives in explicit services and actions behind a repository- or service-layer contract, so the model stays a data map rather than a god object.
Queues are where Laravel earns production trust. I model heavy work as jobs with retries, backoff, and dead-letter handling, and dispatch them transactionally so the database commit and the job enqueue succeed or fail together.
Scheduling and events keep recurring and reactive work explicit. Cron declared as scheduled commands (telescoped, logged, failure-alerted) and domain events wired to listeners turn implicit behavioural loops into visible, testable units.
Testing with Pest and PHPUnit is continuous: I treat Laravel's test tooling as a first-class part of "building", so migrations, factories, and HTTP/feature tests keep regressions cheap to catch and refactors cheap to run.
The framework is an expression layer, not the architecture. Behind it the same DDD/CQRS discipline applies, which means a Laravel app stays coherent as it grows instead of dissolving into controllers and models that outlive their maintainability.
How I Work With Laravel
I keep the domain out of the controllers. Controllers stay thin; business invariants live in services and actions behind a clear layer, so the framework is an expression layer rather than a dumping ground.
Eloquent is treated with care. It is fine for read access and simple writes, but write-heavy, invariant-bearing logic sits behind services so the model does not become a god object.
Queues are modelled properly. Heavy work is a job with retries, backoff, and dead-letter handling, dispatched transactionally so the database commit and the job enqueue agree.
Scheduling and events are explicit. Cron becomes scheduled commands with logs and failure alerts, and domain events wire to listeners so behavioural loops are visible and testable.
Migrations and factories keep the schema and tests honest. Versioned migrations plus factories and seeding mean any environment is built predictably and refactors run cleanly.
Testing with Pest and PHPUnit is continuous. HTTP and feature tests guard the flows, and unit tests protect the extracted business logic.
Performance follows instruments, not folklore. I profile real requests, add caching and index fixes where the data says, and keep the hot path lean.
Dependencies are curated. A lean, pinned Composer tree and audited packages keep the app and its supply chain safe over time.
The framework stays the expression layer of a disciplined architecture — DDD/CQRS where the domain demands it — so a Laravel app remains coherent as it grows instead of dissolving into untestable controllers.