Build 01 28 entries
Filament Atelier
16 Aug to 13 Sep 2026
A visual page builder for Laravel, shipped as a Filament plugin. Developers define blocks in code, clients arrange them and watch the real page update as they type.
Read from entry 01 →96 entries
What changed this week, what broke and what I got wrong, written while the work is still happening. These entries are not tutorials, and they do not pretend the work went smoothly.
Follow a build
Every entry belongs to a project, so a series reads in order with previous and next links between entries.
Build 01 28 entries
16 Aug to 13 Sep 2026
A visual page builder for Laravel, shipped as a Filament plugin. Developers define blocks in code, clients arrange them and watch the real page update as they type.
Read from entry 01 →Build 02 19 entries
10 Sep to 13 Sep 2026
A private docs site that reads Markdown from one GitHub repo. Write in Obsidian, push, and a few seconds later the pages are live for the people you shared them with. Each project is a folder in the repo, and a reader sees only the projects an admin linked to their account. Anyone else gets the same 404 as a project that does not exist. A webhook starts a delta sync that fetches only changed files, a timed recheck covers a missing webhook, and pages are served from SQLite, so reading never calls GitHub. It renders the Markdown Obsidian and GitHub both know: Shiki code, Mermaid diagrams, KaTeX math and Obsidian callouts, plus wikilinks and image embeds. Next.js 16, React 19, next-auth v4 and Drizzle on SQLite, about 9,200 lines of TypeScript, MIT.
Read from entry 01 →Build 03 13 entries
6 Sep to 10 Sep 2026
A kanban board where every card is a markdown file on your disk, built so you can watch what an AI coding agent is doing without asking it. Each connected folder is a project, each subfolder groups work, and each task is one `.md` file whose YAML frontmatter holds status, priority, assignee, due date and labels. Dragging a card between columns rewrites the file, and the agent edits the same files from its side. That is the whole design: Jira and Linear keep state behind an API, so an agent needs credentials and a connector before it can move a card, while a folder is something it can already write to. The repo ships the contract twice, as `AGENTS.md` for any agent and as a Claude skill, and tracks its own remaining build as task files inside itself. Vue 3, Vite, TypeScript and Tailwind v4 over the browser File System Access API, about 1,800 lines, MIT.
Read from entry 01 →Builds 04 to 16 34 entries
The log
Showing 1 to 15 of 28
The gate list had thirteen items. Six went in, seven did not, and the tag went out anyway. What the number promises is that the API stops moving, not that the feature list is finished, and conflating those two is how packages sit at 0.x for three years.
Laravel · FilamentPHP · Plugin · Tools · Web Application
The gate list for 1.0.0 had eight items under "bugs the audit turned up". Two of them were not tidying: the home page had two URLs with the canonical naming the copy, and any URL typed in the panel went into an href without a scheme check. Both were an hour, and both were about to be frozen behind a version number.
Laravel · FilamentPHP · Plugin · Tools · Web Application · SEO
The editor's preview needed a few lines of JavaScript in the page it renders. I put them in the shipped layout, then copied them into two more. Anyone writing their own layout had to copy them too, and missing them broke half the editor with no error at all.
Laravel · Blade · FilamentPHP · Plugin · Tools · Web Application
Clicking a nav link inside the builder's preview navigated the iframe to that page's live URL. The canvas then showed one page while the section list edited another, with nothing to tell you. Fixing it meant deciding what an iframe inside an editor is actually allowed to do.
Laravel · FilamentPHP · Plugin · Tools · Livewire · UI · UX
The last request before tagging v0.5.0 was that someone opening the example folder should understand everything without reading the package. That meant the demo site defining all nine of its own sections, which sounded like duplication and turned out to be the most honest thing in the repository.
Laravel · Blade · FilamentPHP · Plugin · Tools · Web Application · UI
The example app grew into a whole cleaning company: services with pricing tiers, products with variations, and forms that turn a page into a lead. One rule survived every shortcut the demo tempted me into, and it is the only part of it I wrote tests for first.
Laravel · Blade · FilamentPHP · Plugin · Tools · Web Application · UX
Building a demo site with a teal brand, I set the primary colour token and the hero button stayed black. The tokens shipped in v0.2.0, the editor preview and the public page both read them, and the two loudest elements in the block library had the colour hardcoded the whole time.
Laravel · Blade · Tailwindcss · FilamentPHP · Plugin · UI · UX
A page type can serve a listing at its own prefix without anyone building a page. That route has to sit ahead of the catch-all to exist at all, which means it sits ahead of everything the catch-all was handling. The test suite failed on a redirect written in v0.2.0, and it was right to.
Laravel · FilamentPHP · Plugin · Tools · Web Application · SEO
Custom fields on a page type are worth nothing until something puts them on a page. Building the block that lists them meant handing every block view the page it is rendered on, which turned out to be a one-line change to the renderer and the most useful thing in the release.
Laravel · Blade · FilamentPHP · Plugin · Tools · UI · UX
A page type declares its own fields, and the plugin never learns their names. That leaves one question: where the values go, and what happens to the translated ones. I designed a shape, then noticed the SEO column had been storing the same thing correctly since the first release.
Laravel · FilamentPHP · Plugin · Tools · Web Application · UX
The ask was simple: services and products should sit in the sidebar next to Pages, not hide behind a dropdown on a page form. The design I approved cost a Filament resource subclass per type in every app that installs the package. Reading the framework source before writing it found the mechanism that removes the subclass entirely.
Laravel · FilamentPHP · Plugin · Tools · Web Application · UI · UX
Converting home to blocks and handing `/` fully to Atelier surfaced a bug of my own making: the page whose slug is the special `home` one resolves correctly at `/`, but the URL builder used everywhere else, including the sitemap, builds `/home` instead.
Laravel · FilamentPHP · Plugin · Tools · Web Application · SEO
Contact and five listing pages moved from Blade views and controllers to Atelier blocks. The site was already live and indexed, so the constraint wasn't building a page builder, it was making sure nobody could tell it had happened.
Laravel · Blade · FilamentPHP · Plugin · Tools · UI · UX
Atelier alone, before converting a single page, silently took over `/` and `/sitemap.xml` on a site that already had both. `route('home')` threw `RouteNotFoundException` even though the route was still sitting in `web.php`. The docs said the opposite of what actually happens.
Laravel · FilamentPHP · Plugin · Tools · Web Application
This site ran Filament v3.3.54 and Livewire v3 with Volt. Atelier needs Filament v5, and Livewire v4 would not install next to Filament v4, so two version jumps landed in one commit. Sixteen admin resources had to survive it without a single behaviour change.
Laravel · FilamentPHP · Livewire · Plugin · Tools
FAQ
Short answers on how the diary is written and how to follow one build.
A build diary entry. It covers what changed that week, what broke and what I got wrong. They are not tutorials and they do not pretend the work went smoothly.
Yes. Pick a build in the filter, or open any entry and use Read the series, which lists every entry on that project in the order it was written.
Yes, at /devlogs/feed.xml. It carries the latest 50 entries, newest first.
Work with me
Tell me what you're building, who it's for and when it has to be live. I'll reply with questions first, then a fixed quote.
Start a project