Engineering Notes

Engineering Notes

Why the engineering decisions were made. The reasoning, the trade-offs, and the failures that taught us each lesson.

Engineering notes
07/07/26

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.

06/27/26

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.

06/23/26

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.

06/21/26

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.

06/20/26

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.

06/20/26

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.

06/20/26

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.

06/20/26

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.

06/20/26

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.

06/20/26

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.