Skip to main content

Tag: CI/CD

8 posts

Posts
Three stacked wooden blocks on a light surface

Three tiers of Claude Code in CI

Read-only review, constrained auto-fix, and interactive @claude. Each tier has its own trigger, scope, and loop guard.

3 min read
A row of stamped-red boarding passes lined up on a counter

Eight Failed Deploys to Ship FastAPI + Playwright on Railway

Eight red deploys in a row shipping a Python audit service to Railway: uv grabbing Python 3.14, /root perms, Playwright browser paths, and a glob that broke.

4 min read
Two different tools resting on the same workbench

Running a uv Python Workspace Inside an Nx Monorepo

Adding a FastAPI service to a pnpm-based Nx monorepo without teaching Nx to understand Python: uv workspace, Docker from root, dedicated CI job.

3 min read
Organized tools hanging on a workshop pegboard

Three Tools I Add to Every Monorepo Now

Knip finds dead code, Renovate updates dependencies with cooldowns, and size-limit tracks bundle cost. Each took under an hour to configure for Nx.

3 min read
A ruler and measuring tools on a wooden surface

Turning a Prose Style Guide into Zod Build Checks

Character limits, canonical tags, and em dash rules encoded as a Zod discriminated union. The script caught a duplicate cover image on its first run.

3 min read
A grid of device screens showing the same interface at different sizes

Mobile Visual Regression Without Doubling Your Test Count

A typed page config array turns 9 copy-pasted Playwright tests into a loop that runs at two viewports with zero duplication.

2 min read
A funnel filtering and sorting items

Replacing a GitHub Action with 15 Lines of Shell

dorny/paths-filter silently ignored its own config. A 15-line shell case statement replaces it and actually works.

2 min read
A monitor displaying lines of code in a dark editor

Automating Visual Regression Testing in GitHub Actions

A CI pipeline catches visual regressions with Playwright screenshots, auto-updates baselines via workflow dispatch, and re-triggers itself with a PAT.

3 min read