Work

A case study without the decisions in it is a screenshot. These are the Craftender pieces far enough along to name. Each one gets a proper write up (context, constraints, what I would change today) when there is something to inspect rather than something to promise.

craftender.dev

This site and the design system behind it, in one monorepo: apps/web for the site, packages/ds for the tokens, the components and the validators.

The interesting constraint is the bilingual part. English is the default and Spanish is first class, but both live at the same URL: no /es/ tree, no translated slugs. A cookie holds the preference and an edge middleware returns the prerendered variant, so the address bar never changes and the pages stay static.

The second constraint is that the design system has to stay honest. Colour contrast and the icon set are checked on every build instead of reviewed by eye. If a token is wrong, a page shows it, which is most of the reason for keeping the site and the system in one repository.

Craftender Lab

lab.craftender.dev. Where the heavy demos live, so an article can link to one instead of sending the whole demo to a reader who came for the text.

RunStash

In progress, and named here for a concrete reason: parts of how this repository works came from it, starting with the Git flow. It is also the trigger for publishing the design system as a real package instead of a workspace link. What RunStash does is a subject for when there is something to inspect.