Backend /
A small backend. Clear boundaries.
Most small sites do not need a server at all. When they do, the server should do one thing and hand everything else to static files.
This site has no runtime backend. Content sits in a SQLite file and a folder of markdown. A build step turns both into plain HTML. nginx serves the result.
That is a boundary. Everything that can be decided before a request arrives is decided at build time. Nothing waits on a database at 3 a.m.
When a backend is needed, the same rule applies. Give it one job, keep the interface small, and let static files carry the rest. A small backend with clear edges is easier to reason about than a large one with none.