APA
h0ffmann. (2026). skills [Computer software]. https://github.com/h0ffmann/skills
BibTeX
@software{h0ffmann_skills_2026,
author = {h0ffmann},
title = {skills},
year = {2026},
url = {https://github.com/h0ffmann/skills},
license = {MPL-2.0},
note = {ORCID 0009-0009-1056-7661}
}
Source: CITATION.cff
Change or review what a visitor sees on a site. Look first, plan with the design tokens, build, then test with worst-case data and screenshots. Use for each visible change, or when a page looks plain or generated.
← Back to all skills · SKILL.md on GitHub
# web-ui
The site's `DESIGN.md` holds the tokens and the components. This skill is the recipe. Where the
two disagree, `DESIGN.md` wins.
## House rules
1. **No framework and no build step that the page does not need.** Gleam with Lustre
(prerendered) or plain HTML and CSS. No Tailwind, no React, no CDN font, no CDN script.
2. **Lower case** in the copy, except acronyms, when the site uses that style.
3. **One accent colour.** Data colours (a score, a severity) are data. They never decorate.
4. **No em dash in copy.** Use a period, a colon or a comma.
5. **Copy**: English in ASD-STE100 (`ste100`), pt-BR with `ptbr-writer` at the `leve` level.
6. **No tracking**: no cookies of your own, no pixel, no third-party request that the privacy
text does not name.
7. **Accessible**: contrast 4.5:1 or more, a name on each control, icons `aria-hidden` with a
word next to them, the page works at 390 px wide, `prefers-reduced-motion` stops motion.
## The recipe
1. **Look first.** Build and serve the site. Take screenshots at 390 × 844 and 1280 × 800 with
Playwright. Write five concrete problems or fewer.
2. **Plan.** Use the tokens of `DESIGN.md`. A new token needs a job that no token does. Add it to
`DESIGN.md` first.
3. **Build** the smallest change.
4. **Pre-flight**, before you call it done:
- **AI tells**: a hero with a gradient blob, a bento grid, emoji as icons, a second accent,
shadows on things that do not float, a pill-shaped card, centred everything.
- **States**: hover, focus, active, disabled, loading, empty and error for each control.
- **Motion**: 200 ms or less for a response, ease-out, transform and opacity only. A motion
needs a reason.
- **Worst-case data**: a very long name, an unbreakable email, a one-letter name, a missing
field, zero items, 40 items, a huge number, non-Latin text, emoji. Render them behind a
clear "demo data" label. Fix what breaks.
5. **Verify.** Run the site checks of the repository. Take the screenshots again.
6. **PR.** Use `pr-images`. No screenshot, not done.
## Red flags
A hex code in a rule, a second accent, a serif that `DESIGN.md` does not name, a font or icon
from a CDN, a control styled on its own, a restyle without opening the page, a token in a
committed file.