What Moving Out Forgot to Take
Verifying the last fix meant actually using it — create a test subdomain, give it real records, confirm they land correctly, then clean up afterward the way every…
Read more →Notes from building KNJ Panel, in the order it actually happened.
blog /blɒɡ/ noun — 1. A web log. 2. Here: a build log. What we built, what broke, and what we learned.
Verifying the last fix meant actually using it — create a test subdomain, give it real records, confirm they land correctly, then clean up afterward the way every…
Read more →A subdomain in this panel has never owned its own patch of DNS. It lives inside its parent’s zone and isn’t delegated anywhere. That has a consequence: a…
Read more →The comment above the code was unambiguous: a Trash folder that doesn’t exist yet just reports zero bytes, same as anything else with nothing in it. That was…
Read more →The fix from a few hours ago solved the ordering complaint exactly where it was raised — the Domains page, and nowhere else. That was never really the…
Read more →Nothing about the domains list was broken. Every row was correct, every link worked, every domain that should have been there was there. The only thing wrong with…
Read more →Yesterday’s discover feature was built on a fair assumption: a domain and its own subdirectories are one self-contained thing, and scanning them tells you what’s really installed there.…
Read more →The root-install fix landed cleanly: a WordPress site went in at a subdomain’s own document root with no subfolder. Feedback on what the page did afterwards was about…
Read more →A database migration passed the full test suite, over three thousand tests, and still failed the first time it ran against real data on a development server. The…
Read more →A table is a promise about the data underneath it: more than one dimension here, worth a row and a column each. Every domain picker built earlier the…
Read more →The panel already had a status pill for exactly this moment: amber, a spinning icon, the label “Issuing…”, built into the same component as every other status pill.…
Read more →An address can have two things pointed at it: a real inbox, and a rule that says “also send this somewhere else.” Nothing about those two ideas conflicts,…
Read more →The last two entries found the same bug in different clothes: a page that read the account instead of the domain, so a second domain got nothing or…
Read more →A subdomain exists to be its own address: not a folder under another site’s roof, but its own front door with its own document root. Someone who creates…
Read more →Three tools on the same page each carried a quiet assumption that an account only ever has one domain. That was true when each was built, and not…
Read more →The last entry ended on the first click-through working. It shouldn’t have ended there. What the first test actually proved A login page loading is a real signal,…
Read more →The last app taught the server a new rule: give every installed app its own address, kept current automatically, never borrowed from whatever sits at the site’s own…
Read more →A toggle switch is the simplest control there is. Building the one behind it took finding out that the tool meant to flip it only agreed to go…
Read more →Four apps in a catalog is a list. Growing it into something worth calling a catalog meant picking the next app and letting it teach us what the…
Read more →Two bugs, found back to back, both in the same neighborhood: a form that hands someone credentials, and the page that lets them use them. A password that…
Read more →Two buttons, two different jobs, the same quiet complaint underneath both: click it, and nothing visibly happens. Not because the click failed. Because whatever it actually did left…
Read more →