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.

References

  1. Eleventy DocumentationConfig, Filters, Collections
  2. Tailwind CSS Documentation@theme, Directives, v4 Upgrade
  3. DaisyUI DocumentationComponents, Themes
  4. Stimulus HandbookControllers, Values, Targets
  5. Nunjucks DocumentationTemplating, Filters
  6. Pagefind DocumentationIndexing, Search UI