Work log: Textorium TUI — March 12, 2026
What shipped today
Today was a full pipeline sweep — 8 PRs merged, clearing the CLI essentials milestone and fixing several visual bugs in the TUI.
The biggest chunk of work was implementing the three CLI commands that were stubbed since the project started: textorium new, textorium list, and textorium publish. These transform the tool from a TUI-only experience into something scriptable. new creates SSG-aware posts with proper frontmatter and opens $EDITOR. list outputs a filterable table (or JSON) of posts with draft/category filtering. publish flips draft: false by slug match while preserving the rest of the frontmatter byte-for-byte. All three commands are SSG-aware — Hugo, Jekyll, and Eleventy each get the right file paths, naming conventions, and directory structures.
Two bugs in the editing workflow got fixed. The stale original_frontmatter bug (#32) meant that after saving, the dirty indicator would show false positives because the baseline wasn’t being refreshed. The fix re-reads the file after save to update the baseline. Building on that, the unsaved changes indicator (#33) adds a * suffix to modified post titles and a quit confirmation when there are dirty posts — a small but important guardrail against accidental data loss.
The content pane got three fixes in sequence: text wrapping (#39), removing the whitespace margin caused by the wrapping/scrolling conflict (#41), and fixing light theme legibility (#40). The wrapping fix added .wrap(Wrap { trim: false }), but that broke scrolling because the old code was manually slicing source lines while ratatui was wrapping them into more visual rows. The margin fix replaced manual line slicing with Paragraph::scroll(), letting ratatui handle both wrapping and scrolling together. The light theme fix changed the default metadata field color from Color::White to Color::Reset so custom frontmatter fields are visible on any terminal background.
Completed
- #29 — Implement
textorium newcommand (PR #34) - #30 — Implement
textorium listcommand (PR #35) - #31 — Implement
textorium publishcommand (PR #36) - #32 — Fix stale
original_frontmatterafter save (PR #37) - #33 — Add unsaved changes indicator to TUI (PR #38)
- #39 — Wrap text in content pane (PR #42)
- #41 — Fix whitespace margin in content pane (PR #43)
- #40 — Fix light theme metadata field legibility (PR #44)
- #45 — Duplicate of #39, closed during triage
Release progress
- CLI essentials: 0 open / 3 closed — milestone complete
- TUI on Homebrew: 1 open / 5 closed (only #8 email signature remains, backlogged pending blog syndication work)
Carry-over
Nothing active. All issues in the queue are backlogged:
- #1 — Submit to homebrew-core (waiting for traction after launch)
- #8 — Dynamic email signature (blocked on blog syndication)
Risks
None. The codebase is clean, all tests pass (12/12), clippy is clear.
Flags and watch-outs
- The content pane scrolling now uses
content_scroll as u16— this could theoretically overflow for files with >65535 lines, but that’s not a realistic concern for blog posts. - The
Color::Resetfix assumes terminal emulators properly support the reset escape code. All modern terminals do, but very old or minimal terminals might not.
Next session
- Run
/scoutto discover new issues — the codebase has grown significantly and there may be improvements to surface. - Consider creating a milestone for “first external user” work — the CLI essentials milestone is done, and the next push should focus on documentation, error messages, and polish that matters for someone who isn’t the author.
- The
textorium serveandtextorium buildCLI commands are still stubbed — these could be quick wins for a future sprint.
Why customer tools are organized wrong
This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.
Infrastructure shapes thought
The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.
Server-side dashboard architecture: Why moving data fetching off the browser changes everything
How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.
The work of being available now
A book on AI, judgment, and staying human at work.
The practice of work in progress
Practical essays on how work actually gets done.
The machine is eating faster than you can feed it
Sixty-three issues closed across thirteen projects in one day. Four milestones completed. And the hardest problem wasn't building — it was keeping up with what you've already built.
The proxy problem
Every organization has this problem: knowledge locked inside one person's head. Today I accidentally designed a solution — and it has nothing to do with documentation.
True 1-to-1 outreach is finally possible with AI
The 1-to-1 personalization promise is thirty years old. It never worked because understanding each person was too expensive. AI changed the economics.