Devlogs

Building in public

Progress notes and build logs from the personal projects I am working on. What I am shipping, what broke, and what I learned along the way.

These are my devlogs: ongoing write-ups about the side projects and experiments I build in my own time. Expect decisions, tradeoffs, dead ends, and the occasional win, documented as the work happens. Use the search to jump to a project or filter by category.

Filter by category
Filtered by:

All devlogs

01

Publishing to Packagist found the paths I never walked

The package could not be installed by anyone, because composer.json sat in a subdirectory. Then v0.1.0 shipped with creating a page from the panel completely broken. Both were paths a new user hits immediately and I never took once, because a seeder did it for me.

Laravel Aug 16, 2026 4 min read
02

I nearly dropped a dependency for two reasons that were both false

The plan was to build on an existing Laravel page-builder package. I decided against it because it did not support the current Filament version and looked unmaintained. Both claims turned out to be wrong, the decision stayed the same, and writing down why is the part that mattered.

Laravel Aug 16, 2026 4 min read
03

Three bugs, one mistake: reading Livewire state instead of Filament's

Rich text saved a TipTap document into the database, file uploads saved an empty array, and then uploads stopped reaching the disk entirely. Three separate-looking bugs, all caused by reading a Livewire property directly instead of letting Filament dehydrate its own form state.

Laravel Aug 16, 2026 5 min read
04

The preview problem I planned for was not the problem

A live preview that renders the real page on every keystroke sounds expensive, so the plan parked per-section rendering as the eventual fix. Then a twelve-section render measured 16ms, the whole optimisation became unnecessary, and the actual difficulty turned out to be somewhere else entirely.

Laravel Aug 16, 2026 4 min read
05

What's next: an MCP server over the training data

The design for letting Claude search the catalogue, show a movement, write a programme and log a set. Read-only tools first, an identity problem the research did not anticipate, and why the API key trap from the migration applies inside every tool too.

Claude Aug 13, 2026 5 min read
06

Replacing Payload with Appwrite: what flat columns cannot hold

Dropping a Postgres container by moving rows, 2,648 files and every account into Appwrite. Two data shapes that did not survive the move intact, three query shapes only a live instance will tell you about, and a config value that was frozen into the production build at http://build-only.

Nextjs Aug 13, 2026 6 min read
10

Building WP2Code: the iframe that made it Laravel-only

A process for porting WordPress sites by measuring them, turned into a Claude Code plugin. The one line that tied it to Laravel was not the Blade templates, it was a same-origin iframe. Plus two ways a headless browser hangs forever, a mirror that kept phoning home, and a YAML bracket that silently deleted a command.

Claude Code Aug 10, 2026 7 min read
11

LaralCN-UI docs for agents: llms.txt and a Copy Page button

Pasting a documentation page into Claude Code means pasting a sidebar, a theme toggle and a footer. The docs site now serves a second channel: an /llms.txt index and a .md twin of every component page, generated from the same registry the HTML reads. Plus the route that quietly ate its own suffix.

LaralCN-UI Aug 06, 2026 5 min read
12

LaralCN-UI 0.4.0: ten components, nine without JavaScript

The registry goes from 25 components to 35. A toggle that is a checkbox, a slider that is a range input, a hover card that is pure CSS, and a carousel that keeps working with its script deleted. Plus the three bugs that only turned up once I stopped reading the markup and started clicking it.

LaralCN-UI Aug 06, 2026 4 min read
13

LaralCN-UI 0.3.2: two bugs the test suite could not see

Every card in the registry drew a black border, and every modal opened with a backdrop that was not there. Both bugs lived in the theme rather than the components, both passed 105 tests, and in the second one the computed style was correct while the screen was blank. What Tailwind v4 changed, and why a colour function can parse and still refuse to paint.

LaralCN-UI Aug 06, 2026 4 min read
14

Shipping LaralCN-UI 0.3.0: three ways a deploy can lie to you

The release was tagged, the tests passed, and the live site was still broken. A gitignore line had frozen the deployed CSS eleven commits earlier, the server was running code from before the merge, and my own syntax highlighting took every documentation page down with a 500. What each failure looked like from the outside, and why the last one was the worst kind of bug.

LaralCN-UI Aug 01, 2026 5 min read
15

LaralCN-UI blocks: installing a navbar and getting a navbar

Every navbar block shipped a full demo page: a min-h-screen wrapper and a hero section that had nothing to do with the navbar. This pass strips them to the header alone, drops Alpine from the docs site itself so it stops proving the opposite of what it documents, and moves syntax highlighting to the server. Including the component attribute that quietly broke the page around it.

LaralCN-UI Aug 01, 2026 4 min read
16

LaralCN-UI 0.3.0: components that carry their own JavaScript

Every interactive component in the registry used Alpine.js, which meant copying one Blade file into a fresh Laravel app was never actually one step. 0.3.0 removes Alpine entirely: each component ships a small inline script in the same file, and several of them now need no script at all. Plus the four traps I hit doing it, including a modal that opened invisible.

LaralCN-UI Aug 01, 2026 4 min read
17

Safi Site Audit 0.6.0: the note that was also a database

A 100-page audit wrote a 5.9MB Markdown note, because the whole report was inlined as JSON inside it. Splitting that into three files per site fixed the lag, and rebuilding the dashboard on top of it turned up a CSS specificity bug that had been quietly overriding every button rule I wrote.

obsidian Jul 27, 2026 6 min read
18

Safi Studio Scanner 1.0.2: a report that carries numbers

The audit engine could tell you a check failed and nothing else, so there was nowhere to put a number. 1.0.2 adds a measurements channel, a streaming API so you can watch a crawl work, and a documentation site. Plus the head-parsing bug that made my social card invisible.

Typescript Jul 27, 2026 5 min read
19

Adding responsive export to Design to HTML

How my Figma to code plugin turns several frames of one page into a single responsive HTML file: name-matched merging, mobile-first breakpoints read from the frame widths, and a mixed-text bug that shipped invisible numbers.

Tailwindcss Jul 17, 2026 3 min read
20

Adding Tailwind output to Design to HTML

How I added a Tailwind mode to my Figma to code plugin: a v4 browser CDN, faithful arbitrary-value utilities, and a flexbox shrink bug that only Tailwind surfaced.

Typescript Jul 15, 2026 3 min read
28

Two releases to fix one review page

Cleaning up vault-crm's Obsidian community review warnings, a dependency override that was quietly broken, and a release that failed on the wrong lockfile.

Plugin Jul 06, 2026 4 min read
29

Building S-Calc: a live calculator inside an Obsidian note

How I built S-Calc, an Obsidian plugin that evaluates each line of an s-calc code block and prints the answer inline in your theme accent colour. The build story: the engine, live currency, the CodeMirror editor layer, and the 0.6.0 release.

obsidian Jul 06, 2026 4 min read
FAQ

Common questions

Build logs and progress notes from my personal projects. Each post tracks what I am working on, the decisions I made, what broke, and what I learned. They are written as the work happens, not polished after the fact.

Whenever a project moves far enough to be worth a write-up. There is no fixed schedule; the cadence follows the work.

Yes. The blog is tutorials and deep-dives meant to teach. Devlogs are running journals of projects in progress, closer to building in public than a finished guide.

Reach out through the contact page. If a project is open to feedback or collaboration, I will say so in the post.

Building something
interesting?

Start a project →