Static-First Philosophy
We default to static generation unless dynamic behavior is explicitly required. This approach provides predictable costs, global edge performance, and simplified operational overhead. Dynamic functionality is added incrementally when static generation cannot meet requirements.
When We Use SSR
- User-specific content that cannot be cached
- Real-time data that must be fresh on every request
- Authentication-gated pages with personalized content
When We Stay Static
- Marketing and documentation pages
- Public content with predictable update cycles
- Any page where staleness of minutes is acceptable
Core Stack
- Nuxt 4 - Vue meta-framework with SSG and SSR capabilities
- Cloudflare Pages - Global edge deployment with automatic SSL
- Cloudflare Workers - Serverless compute for dynamic requirements
- UnoCSS - Atomic CSS with zero runtime overhead
- TypeScript - Strict mode everywhere, no exceptions
Infrastructure Assumptions
These assumptions guide our architectural decisions and influence how we build and operate systems.
- Edge-first - Compute moves to where users are, not the reverse
- Stateless by default - State lives in purpose-built stores, not in compute
- Observable from day one - Structured logging and metrics are not afterthoughts
- Immutable deployments - Every deploy is atomic and reversible
- Failure is expected - Systems degrade gracefully; cascading failures are prevented
Why These Choices
We optimize for operational simplicity and long-term maintainability over development velocity. The tools we choose must have clear upgrade paths and minimal vendor lock-in. We prefer boring technology for critical paths and reserve experimentation for non-critical systems.
Trade-offs We Accept
- Slower initial development for reduced operational burden
- More explicit code for better debuggability
- Fewer abstractions for clearer failure modes
Technology Stack
Nuxt 4Vue 3TypeScriptUnoCSSCloudflare
