Pitfalls
The handful of Civet and Pug constructs that compile to the wrong thing, and the verification order that catches them.
Civet is a good fit for app code and has rough edges on advanced syntax. The rule that saves the most time: when something does not parse or compile in Civet, drop to plain .js for that file. Libraries and dense generator, stream or type-heavy code belong in .js; routes, components and feature code stay in .c / .n.
norns lint catches the mechanical cases; norns check catches everything that fails to compile. The CLAUDE.md shipped with the starter and the demo carries the same tables so coding agents see them.