Stack
The technology choices and why we made them.
On this page
Core Technologies
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 20+ | Runtime |
| Eleventy[1] | 3.1.x | Static site generator |
| Tailwind CSS[2] | 4.1.x | Utility-first CSS |
| DaisyUI[3] | 5.x | Component library |
| Stimulus[4] | 3.2.x | JavaScript behavior |
| Nunjucks[5] | (bundled) | Templating |
| Pagefind[6] | 1.x | Client-side search |
Module System
All JavaScript uses ESM (ES Modules). No CommonJS.
{
"type": "module"
}
What We're NOT Using
| Technology | Reason |
|---|---|
| Vite | Unnecessary complexity; Eleventy handles builds |
| React/Vue/Svelte | Violates "HTML-first" philosophy |
| SCSS/Sass | Tailwind 4's @theme replaces preprocessors |
| TypeScript | Unnecessary for static site JS |
| Alpine.js | Stimulus is the standard |
| tailwind.config.js | Tailwind 4 uses CSS-first config |
Philosophy
HTML-First
The spec prioritizes server-rendered HTML with progressive enhancement. JavaScript adds behavior, not structure.
Single-Process Builds
CSS processing happens inside Eleventy via the eleventy.before hook. No concurrent processes, no race conditions.
Explicit Over Implicit
Stimulus controllers are registered manually. No autoloading, no magic file scanning.