Blog
Longer-form notes live here. The current documentation remains the source of truth for APIs and guided learning.
- A Clean Architecture monorepo template for fullstack TypeScript
Recurring pain in custom fullstack apps — coupling, sprawling PRs, untestable cores, weak architecture enforcement, and team friction — and how a governed monorepo template maps Clean Architecture into a workspace you can actually ship.
- From Query Keys to Application Resource Identifiers
How query key helpers lead to a framework-agnostic resource vocabulary — and why an Application Resource Identifier is more than a cache key.
- Type-safe i18n for TypeScript and React: the i18n mental model according to xndrjs
Why i18n is hard, how @xndrjs/i18n and @xndrjs/i18n-react approach it, a short developer journey from install to SSR/CSR, CMS refresh without rebuilds, and how the stack compares to common alternatives.
- We're Not "Frontend Developers" Anymore
Modern frontend work has become system work. Architectural thinking is no longer a specialization, but a necessity for dealing with orchestration, integration, and domain complexity.
- Object-Oriented Modeling vs Trusted Shape Modeling
Unlike OOP classes that bundle data and behavior together, trusted shapes keep validated immutable data separate from explicitly attached capabilities, making domain models easier to evolve and boundary-safe by construction.
- Parsing-slop: a particular form of AI slop
When AI never names a shape, every file becomes a parser. Why parsing-slop spreads, what it costs, and why every boundary deserves an explicit shape.
- AI doesn't make Domain-Driven Design less important. It makes it essential.
AI-assisted coding can produce correct code without building a mental model you can own. Why domain boundaries, vocabulary, and cognitive compression matter more, not less, in the age of LLMs.
- Generating Zod schemas from Contentful: why your project needs this
How @xndrjs/contentful-to-zod turns your Contentful content model into precise Zod 4 schemas.
- 5 cases where TypeScript types are not enough to guarantee data correctness
External boundaries, structural typing, mutation, contextual guarantees, and semantic aliases—why structure is not trust, and what runtime validation and explicit boundaries add.
- Validation benchmarks: pick the right engine per boundary
What @xndrjs/bench-perf shows about Zod, Valibot, AJV, and core validators—and why adapter interoperability lets you use each where it shines.
- What problems does @xndrjs/domain actually solve?
A concrete tour of runtime trust at boundaries, ergonomic domain construction, layer-friendly data, shape transformations, and where invariants live, beyond “we like types.”
- xndrjs Domain Algebra - between Rich and Anemic Data Modeling
How the domain toolkit splits validation, representation, behavior, and guarantees without forcing a choice between rich classes and plain objects.
- OAS, JSON Schema, AJV: a solid domain in a few steps with xndrjs
Start from an OpenAPI contract exposed by your backend and get TypeScript types, runtime validation, and domain primitives without rewriting contracts by hand.