Choosing Simplicity
When we started building mediocrist.com, the temptation was there: grab the latest meta-framework, wire up a component library, add a CSS utility framework. Instead, we went with Laravel and native CSS.
Not because we're opposed to new tools — but because the job didn't require them.
Why Laravel
Laravel gives you routing, ORM, caching, queuing, and templating out of the box. For a content site that pulls data from GitHub and renders markdown, that's everything we need. No API layer, no SPA hydration, no client-side routing.
Server-rendered HTML is fast, accessible by default, and works everywhere. The simplicity of a Controller → Service → View pipeline means any developer can trace a request from URL to rendered HTML in under a minute.
Why Native CSS
CSS has evolved significantly. Native nesting, @layer for cascade control, oklch() for perceptual color uniformity, container queries for component-level responsiveness — these features cover what preprocessors and utility frameworks were solving five years ago.
Our CSS architecture uses layers to control specificity:
@layer reset, tokens, base, layout, components, pages;
Each layer has a clear responsibility. Tokens define design decisions. Components are self-contained. Pages handle one-off overrides. No specificity wars, no !important hacks.
The Result
A fast, maintainable site that loads in under a second, works on every device, and can be understood by reading the code. Sometimes the boring choice is the right one.