chore: design doc, screenshot script, seeded sessions and repo skills (#2901) master
* docs: add DESIGN.md with the UI conventions and principles Hierarchy, compound kits, cva variants, tokens, typography, motion, a11y, responsive and worst-case rules in one place; AGENTS.md says where code lives, this says what good looks like. Root AGENTS.md points at it. * chore: ship repo skills for cloud sessions Skills live as real directories in .agents/skills with symlinks in .claude/skills, the only path Claude Code reads. Both stay gitignored by default; the ones re-included by name ship with the repo so remote and teammate sessions have them: screenshot, grill-me, codebase-design, improve-codebase-architecture. Sources and licenses are listed in .agents/skills/README.md. * chore: screenshot script for the local dev servers scripts/screenshot.mjs shoots a page or element of the dashboard, web or status-page dev server in light and dark, logging into the dashboard with a seeded session (or a magic link read from the dev log). It borrows Playwright from apps/screenshot-service, uses system Chrome with a bundled-Chromium fallback, and refuses a base that serves the wrong app. The dashboard AGENTS.md now asks for a screenshot instead of a human for visible changes; web and status-page get the same pointer. The Next.js agent-rules block is committed in every app so next dev stops re-adding it. * chore(dashboard): let PORT override the dev port PORT=3001 in the dev script beat the environment, so a second instance needed next dev -p. The default stays 3001. * chore(db): seed the maintainers with sessions and a full incident timeline max@openstatus.dev and thibault@openstatus.dev with workspace roles and sessions valid for a year (fixed tokens, local only), so the dashboard and scripts/screenshot.mjs log in without a magic link. Incident 1 now carries seven events in the service message formats, one of every row kind the timeline renders. * chore(skills): say how screenshots reach the user from local and cloud sessions * chore: address review findings on the screenshot script, seed and docs screenshot.mjs: open the email form before filling it, log in once for all themes (the dashboard rate-limits magic links), treat --full-page as a valueless flag, fail on a login redirect for every app, exit non-zero when a selector matches nothing, print one line on an uncaught error. seed: sessions expire in 2099 instead of a year, the stale script path in the comment, and a slack_channel_unbound event so the timeline and the incident's empty Slack binding agree. DESIGN.md: stock primitives may be edited as a documented last resort, blocks import nothing from an app (apps import blocks), ring joins the token list, selectors are named per app. Drop improve-codebase-architecture from the shipped skills: it invokes /grilling and /domain-modeling, which a clone does not have, and proposes ADRs, which this repo forbids. README: the screenshot skill is AGPL-3.0 like the repo, and only self-contained skills ship.