A new Horizon UI
I built a new frontend for Laravel Horizon with Inertia, React 19 and shadcn/ui, starting from a two-year-old Figma design. It's now installable through Composer.
Two years ago I designed a new interface for Laravel Horizon in Figma. I liked it, but rebuilding Horizon's entire frontend around it was more work than I could justify next to everything else. So it stayed a picture.
Felt like doing some random designing tonight. Took Laravel's Horizon as a subject to see what could be improved. Yay or nay? Do you use Horizon's dashboard at all? If not, how do you debug jobs in dev or prod? Any other ideas, let me know! pic.twitter.com/jNsKGjMmxf
— Nick (@nckrtl) March 29, 2024
This week that design became a real package. Horizon New Dawn is a new frontend for Laravel Horizon, built with Inertia, React 19 and shadcn/ui. It only replaces the shell: Horizon itself stays in charge of authorization, repositories, metrics and the queue workers. The engine is still great. I just wanted a shell built with today's frontend tooling.

Morphing the old screens
The design work happened in Claude Design. I started by running /design-sync in Claude Code to import all the screens from the original Horizon interface into Claude Design, so the starting point was exactly what Horizon ships today. Then I added the Figma design from two years ago and prompted from there: take the original screens and morph them into this design.

Because Claude Design produces responsive, clickable React screens, every adjustment was something I could judge as a real interface instead of a static mockup. I kept prompting and adjusting until a couple of screens looked like they belonged together.
The handoff
With a few screens ready, I exported the project from Claude Design into a new Laravel package. Then I did the design handoff in the ChatGPT app, formerly Codex, with one goal: implement all the screens and features.
Most of the refining happened there too. I had a lot of sessions running, sometimes five or seven at once, and I used the annotation tool constantly to point out what should change. That sped things up a lot, and it meant I could keep working on other projects while the sessions ran.
Laravel Boost helped a lot here, together with a few standard skills I use to stay on top of the latest features and best practices for Laravel, Inertia and React. All the tools this new UI is built with.
I shared the first screen on Monday and it was well received, enough to keep going. Yesterday I spent another full day on it, and today went into polishing and getting the biggest bugs out so it would be ready for an initial release.
Not just a reskin
Along the way the interface grew features the original doesn't have: filtering jobs by class, queue, tag or status, pausing and clearing queues, bulk retrying and cancelling jobs, and controls for supervisors and individual Horizon instances.
I shared progress along the way, and people came with feature requests, so I added more functionality.
Please add buttons to manage queues and I’ll buy it from you.
— Jason McCreary (@gonedark) July 20, 2026



Try it
Horizon New Dawn is available today. Install Horizon first, then:
composer require nckrtl/horizon-new-dawn
php artisan horizon-new-dawn:installIt takes over the existing /horizon path and uses Horizon's own authorization. Fair warning: it's a young project and not ready for production yet. Try it in a development or testing environment first, because the interface includes actions that mutate real queue state.
What happens next
This release is the experiment. If people end up using it, I'll keep developing it. I'm really curious what you think.
Update: there is now a live demo at horizon.nckrtl.com — a real Horizon instance processing demo jobs, embedded straight into the page. Click around, filter jobs, clear queues, even terminate the instance. It restarts itself.