Small does not mean unfinished. It means each component has a clear job, dependencies are deliberate, and the path from request to result remains visible.
Visibility is a feature
When operators can name every boundary, they can also identify which evidence is missing. Logs become more useful, alerts become more specific, and routine maintenance becomes less risky.
For a static website the important boundaries are usually easy to list:
- DNS points the hostname to the intended edge.
- TLS terminates at the intended proxy.
- The proxy serves one known output directory.
- The output contains only the files the site needs.
- A 404 response is handled by the site, not by an accidental upstream.
Writing this list down is more valuable than adding a dashboard that does not answer any of those questions.
Complexity should earn its place
A new layer is worthwhile when it removes more uncertainty than it creates. A build step that fingerprints assets can be useful when caching is important. A database is useful when content needs transactions. Neither is automatically an improvement for a small, mostly static site.
The same rule applies to client-side JavaScript. If a page needs a search index or an interactive editor, add the smallest implementation that meets that requirement and update the content security policy deliberately. If the page is a document, plain HTML is often easier to inspect and more resilient.
Make ownership explicit
Every file should have a reason to exist and a clear way to update it. A vendored theme should record its upstream version and license. A generated directory should be marked as generated. A resource download should say what it contains, when it was updated, and how its checksum was produced.
These small statements prevent future operators from treating an accidental artifact as a supported interface.
Leave room for the next change
The best small system is not the one with the fewest lines. It is the one where the next change has a visible place to go. A notes site can start with Markdown, a static generator, and a web server; if it later needs search or comments, the new requirement can be evaluated on its own rather than assumed from the beginning.
Sources
- Hugo directory structure, checked 2026-08-22.
- Caddy
file_serverdirective, checked 2026-08-22.