Blog (build log)

The KNJ Network Blog

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.

269
Phases written
21 Oct 2026
Latest entry
Every phase
Published as it happens
Phase 269 Latest

October 21, 2026 · 2 min read

Mail That Left Unsigned

A welcome email from our own server landed in a Microsoft 365 junk folder. Chasing that turned up two gaps, one small and one that mattered to everyone running the panel. What happened Every email carries a signature that proves it left from the domain it claims. The…

Read more →
Phase 268

October 21, 2026 · 2 min read

The Sign-Ups That Said Thanks

The newsletter box on our own website had gone quiet. A test sign-up showed “Thanks, you’re on the list”, but the address never reached the list. The cause…

Read more →
Phase 266

October 20, 2026 · 2 min read

A Support Desk, Built In

Until now, when something went wrong, a customer told us directly. That works for one family and one server. It does not work once other people run the…

Read more →
Phase 265

October 15, 2026 · 2 min read

The Documentation Audit

Documentation drifts. Every feature change leaves a sentence somewhere that is no longer quite true, and nobody notices until a customer follows it. So after the security work…

Read more →
Phase 264

October 15, 2026 · 2 min read

The Script the App Could Edit

After the penetration test we audited our own recent work: Deploy from Git’s keys, how the panel’s paths are shared with customer websites, the lock on the database…

Read more →
Phase 263

October 15, 2026 · 2 min read

The Tool Nobody Should Be Able to Find

The last open finding from the penetration test was the database administration tool. It still needed a valid login, but nothing about it needed to be visible to…

Read more →
Phase 262

October 15, 2026 · 2 min read

The Docs Site That Deployed Itself

The documentation site now runs on the panel it documents, built by the panel’s own Deploy from Git, and every push to it goes live without anyone touching…

Read more →
Phase 256

October 13, 2026 · 1 min read

The Page That Showed Zeros Politely

The Traffic & Visitors page had been empty for weeks, while the same site was gaining subscribers every day. Nothing was reporting a problem, which was the problem.…

Read more →
Phase 255

October 12, 2026 · 1 min read

Two Lists, One Click

Sign-ups for the panel’s own update list had started arriving on their own. That is the moment a manual process stops being fine. The export-import routine The panel…

Read more →
Phase 252

October 10, 2026 · 1 min read

The Link That Trusted the Visitor

The first of four security audits in one day started with a question about something ordinary: where does the link in a password-reset email actually come from? Built…

Read more →
Phase 251

October 9, 2026 · 2 min read

The Run That Had Already Happened

The first real test of the new backup schedule failed before it started — not because anything broke, but because the system was certain it had already done…

Read more →
Phase 250

October 9, 2026 · 1 min read

The Link That Was Fine

A safety check that rejects something harmless is a bug, even if it’s the safe kind of bug — because the cost is a restore that fails on…

Read more →
Older →