The board listed projects but showed no tasks because gray-matter imports Node's buffer module, which browsers do not have. Replaced it with a dependency-free parser for the one schema the board uses.
The board loaded, the projects listed, and every column was empty. The console said Buffer is not defined. The frontmatter parser, gray-matter, is a Node library that imports Node's buffer module, which does not exist in browsers. Vite externalized it at build time and the parse crashed at runtime for every single task file.
Delete the dependency
gray-matter pulls js-yaml with it, so removing both cut the production bundle from 403 KB to 179 KB and silenced the build warning in the same move. Nothing else in the project touched either package. One file imported gray-matter, the markdown module, and that was the whole blast radius.
A parser for exactly one schema
Rather than finding a smaller YAML library, I wrote a parser for the only schema this board will ever see: strings, null, numbers, and inline string arrays, plus block-style label lists and missing frontmatter entirely. Quoted, single-quoted, and bare values all parse. Serialization always emits the same canonical shape, so files the board writes stay clean for the next tool that reads them.
Prove it with round trips
Before committing, every variant went through parse, stringify, and re-parse: the exact upstream format with all keys, null due dates with block lists, files with no frontmatter at all, single-quoted ids with empty label arrays. Identical data every time. The check runs in plain Node against the TypeScript source, no test framework, since the repo has none and one file did not justify adding one.
Where it stands
Tasks render from real folders, edits save back byte-clean, and the parser has no dependencies left to break. The lesson restated: a library that assumes Node inside a browser bundle is a landmine with a delay, and the delay was exactly one page load.