Engineering Notes
Why the engineering decisions were made. The reasoning, the trade-offs, and the failures that taught us each lesson.
Why Scripting?
Why Reepolee builds with plain TypeScript scripts: they let platform quirks be absorbed into readable code you own, in one place, rather than leaking into configuration, plugins, or setup instructions.
Boring UI Wins
On why standardized, predictable UI wins over the life of a product - covering component learning curves, layout conventions, browser-native features, accessibility, maintenance debt, and why the best interface is the one nobody notices.
The Generator Pattern, Not a Library
Why Reepolee uses a code generator instead of a library, and what that choice means for security, maintainability, and the surface of change in your own project.
The Reepolee Approach
An introduction to the Reepolee philosophy: on-premise infrastructure, zero-dependency applications, code generation over AI, SQL over ORMs, and a commitment to simplicity that compounds over decades - for freelancers, solo devs, small agencies, and informal groups who carry the maintenance cost.
Default Is a Feature
On keeping tools at their defaults, the portability of skills over config, why TUIs are nostalgia dressed in Rust, and what native GUI tools are quietly getting right.
Not Everything Needs an LLM
Why smart teams use LLMs to build generators, not to replace them - and how encoding domain knowledge once, deterministically, beats paying an API per token forever.
Light, Dark, Do Both
On implementing light and dark mode correctly - system preference as the default, per-site user override, and why both are needed.
Living on the Edge
On early adoption, one-off software, the kind of problems nobody else wants to tackle, and why code is the advantage that compounds.
MVC Separated the Wrong Things
On code proximity, feature-per-folder, single-file templates, and why Tailwind classes tell you more about a component than a semantic class name ever will.
How We Name Our Columns and Why It Matters
On establishing inhouse naming rules before generators run - column patterns, soft deletes, and a case for snake_case across the entire codebase, not just the database.