Jordi López — Latest notes.

Notes on things I build, discover, and think about.

Last note

Git, redact, and cdp extensions went hexagonal

Spent the evening rebuilding the git, redact, and cdp extensions in pi-setup around ports and adapters: tool logic now lives in a pure domain layer with the Pi-specific glue behind small interfaces and fakes. Tests moved next to the source while I was at it, so each extension carries its own specs.

Build log

pi-smart-router now judges each provider on its own merits

pi-smart-router now classifies each provider on its own merits when you call setup-tiers, instead of collapsing them into a single global winner — so when one catalogue says a model is the cheapest and another says it's the strongest, both can win on their own merits. The same day quieted the dependency noise around it: Dependabot auto-merge for patches, a TypeScript major, and a pass on the high and critical advisories. The toolkit now pins Node 22 and has CI read it, so runtime expectations stop drifting silently across major bumps.

Build log

A design-tokens skill for Pi agents

Added a design-tokens skill to pi-setup — it teaches agents the Asana-style naming convention for colour tokens, where a token reads like positive-surface-raised instead of green-300. Usage describes the role rather than the CSS property, so each token stays single-purpose and themeable. One skill, one convention, no more ad-hoc colour names.

Build log

Launching a css-if demo

Launched css-if, a live demo for the CSS if() inline conditional function that landed in Chrome and Edge 137. It walks through six examples — supports(), media(), style(), combined and negated conditions, multiple branches, and a nested if() — all driven by pure CSS radios and :has(), no JavaScript. The page feature-detects support and shows a fallback in browsers that don't have it yet, and deploys to GitHub Pages on merge. Styling builds on css-starter, reusing its picker and callout components.