Micro-labels
The single strongest through-line in all four reference sites, without exception: mono, uppercase, wide tracking, small, quiet. Defined once as a utility so it cannot drift.
Project card
Where an employer decides whether to click. Outcome, name, what it is in one sentence, stack — no adjectives.
In daily use
Grounder
A CLI that links a project to a local markdown vault, so an agent keeps its memory between sessions instead of starting cold every time.
14 strategies tested
Rookie Trader
A paper-trading harness for testing strategies against historical data without risking a cent or a convincing backtest.
Post list item
Chronological, scannable, quiet. The blog index is not a place for display type.
The adapter is the lock-in
Why a static build and a dist directory buy more portability than any deployment abstraction.
Deciding by looking
Two weeks of arguing about fonts in prose, settled in ten minutes by a route that renders them.
A monorepo with one app in it
Boundaries are cheap to draw early and expensive to draw late. Abstractions are the opposite.
Experiment row
The same row on the lab index. Number over project, set apart; status in a fixed-width column so every description wraps at the same point.
Code block
A primary visual element on a dev blog, not an afterthought. Expressive Code, with its frame, border and background bound to the palette tokens — so it re-skins with the rest of the site instead of sitting in it like a foreign object.
{ "name": "reys-lab-web", "compatibility_date": "2026-09-19", "assets": { "directory": "../../apps/web/dist", "not_found_handling": "404-page" }}pnpm --filter @reys-lab/deploy-cloudflare deployProse
The other half of the job. Marketing energy on the home page, a good reading environment here — measure held to roughly 68 characters, calmer type, less chrome.
Astro builds two ways. Static output emits plain HTML, CSS and JavaScript that any host on earth can serve. Server output needs an adapter, and an adapter is a build-time plugin that compiles the site into one vendor’s runtime format.
That puts the vendor inside the application package, underneath everything, where no amount of deployment wrapping can reach it. The usual way this happens is not a decision at all: a site is static except for one contact form, the form needs a server, and the whole site follows it into a runtime it can never leave. So the rule is static output, no adapter, and anything that genuinely needs a server becomes its own deployable.
Link states
Rest, hover and focus shown together, because the focus ring is the state most often left undesigned and it is the one that carries the accessibility claim. Tab through the live link to check the real thing.
Timeline node
The spine of /cv. Years are mono and small, set left of the line inside the text column; the line is the only place a bright colour runs vertically.
2026 —
Building Rey’s Lab
Personal
Astro, Tailwind, Cloudflare. A portfolio that is also the work sample.
ProjectsRey’s LabGrounder2024 – 2026
Senior Frontend Engineer
Placeholder Company
React and AWS. Design systems, build pipelines, and the odd backend.
ProjectsRookie Trader2021 – 2024
Frontend Engineer
Placeholder Company
Where the habit of writing the tradeoff down started.