Engineering,
taught
&
leadership,
practised.
I'm Steven — CTO at Digitonic, a PHP engineer since 2010 and a keen golfer with a terrible handicap. This is where I write it all down.
Latest from the journal
PHP Randomizer Engines: Choosing Between Secure, Seeded and Fast Randomness in Laravel
Two problems with one root cause: tokens that are guessable, and tests that are flaky. PHP's Random extension fixes both, once you pick the right engine.
The #[\Override] Attribute: Catching Broken Laravel Inheritance at Compile Time
PHP 8.3's #[\Override] attribute converts a whole class of silent inheritance bugs into loud compile-time errors. Here's where it pays off in a real Laravel app — and the four places it will blow up in your face.
Style State with Tailwind v4 data-* and aria-* Variants
Open, closed, loading, selected — each state ends up as another ternary in a `:class` string. Tailwind v4 lets you toggle one attribute and style it with a variant instead.