screen-design-rules
Visual and usability rules for drawing any application screen — density, colour tokens, disabled and read-only states, field widths, status marks, keyboard…
Skill by IgorAIvanov
Chalk Labs
Need help deploying screen-design-rules?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/igoraivanov-screen-design-rules
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, design, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/screen-design-rules
What's inside
- Skill name
screen-design-rules- Description
- Visual and usability rules for drawing any application screen — density, colour tokens, disabled and read-only states, field widths, status marks, keyboard expectations. Use whenever writing or reviewing the markup of a form, list, picker or report, and before adding any colour, size or spacing of your own.
- License
- MIT
- Metadata
- audience: app
- Instructions
- 193 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- icons.md
SKILL.md (first lines)
# Screen design rules
This is an **accounting desktop application**, not a marketing site or a mobile app.
Most general UI advice you have seen was written for a different product and will make
these screens worse. The rules below are the ones that hold here.
Everything visual comes from the framework theme. Your job on a screen is to compose,
not to invent colours, sizes or spacing.
## Density is deliberate — do not "modernize" it
Controls are 24px tall, table cells have 3px vertical padding, the base font is 14px,
radii are 2px.
A bookkeeper looks at 30 invoice lines at once. Advice like "row height 40–52px" or
"touch targets 44×44" comes from mobile and from admin panels with twenty rows; applying
it here cuts the visible data in half. Do not raise heights, do not add shadows, do not
round corners.
## Never write a colour of your own
| Need | Use | Never |
|---|---|---|
| secondary text (codes, dates, hints, empty states, counters) | `class="text-muted"` | `text-base-content/40…70` |
| surfaces, borders | theme vars (`--app-surface`, `--app-border-field`) | hex literals |
| status colours | `--color-success` / `-warning` / `-error` | your own red/green |
`text-base-content/50` renders at **2.8:1** against white, `/40` at **2.2:1** — roughly
half the AA floor of 4.5:1. This is not a nitpick: it is the difference between a hint
being readable on a laptop screen in an office and not. `.text-muted` is a token picked
to pass on white, on the zebra stripe and on the hover row.
If you catch yourself writing a hex value in a screen, the answer is almost always a
theme variable that already exists.
## Status must never be colour alone
Dimming an inactive row is fine as *reinforcement*, but the row must also say what it is
— a strikethrough, a badge, a column. A user with low vision, a bad monitor, or a
printout gets nothing from colour.
If you do dim, dim to a value that is still readable (`#6b7280` on white is 4.8:1).
`#9ca3af` is 2.5:1 and on a selected row 1.9:1 — that is invisible, not subtle.
## Field width is information
A field as wide as the form tells the user nothing. A code field that holds 6 characters
should be about 6 characters wide. Use the `class` option of `renderField`:
```ts
${this.renderField(t("common.code"), html`<input class="input input-bordered w-full" …/>`,
{ class: "w-32", field: "code" })}
```
Two or three short fields on one row, grouped by meaning, read far better than a single
column of full-width boxes. A single column is advice from signup forms optimised for
conversion — it does not apply to master data.
## Disabled and read-only are different problems
- A **disabled button**: its label may go grey (3:1 is enough) — nobody needs to read it.
- A **disabled field**: the value must stay readable (**≥ 4.5:1**). In view mode the whole
form is disabled and the user came precisely to *read* it. The theme handles this
already — do not override it with your own `opacity`.
Never use `opacity` to show a disabled state on anything containing text.
## Numbers
- numeric cells get `tabular-nums` so digits line up in a column;
- **account codes do not** — they are identifiers, not quantities. In report screens this
is also the contract that decides whether a cell lands in Excel as a number or as text.
## Labels, errors, footers
- field labels only via `BaseUI.renderField(...)` — it produces a real `<label>`, so
clicking the caption focuses the field;
- **`form-control` and `label-text` do not exist in daisyUI 5** — they are v4 markup and
they break label alignment. If you see them in an example, the example is stale;
- the field error floats out of layout flow on purpose: showing and hiding it must not
make the form jump. Do not wrap it in your own layout;
## The form frame comes from the base
Do not compose an edit form's `render()` by hand. Return `this.renderForm(fields)`: it
places the command panel, the banner and the fields, and it makes the field area — not
the whole tab — the scrolling region.
```ts
protected override formWidth = "max-w-md"; // default is max-w-3xl
protected override renderActions() { // your buttons, left, after Save
return html`<button class="btn btn-sm btn-secondary" @click=${this.post}>…</button>`;
}
protected override renderAuxActions() { // after a separator: print, export
return html`<button class="btn btn-sm btn-outline" @click=${this.printPdf}>…</button>`;
}
override render() {
return this.renderForm(html` …fields… `);
}
```
**The command panel is at the top, not in a footer.** In a document with a 30-line
tabular section a footer scrolls out of view — "Save" disappears exactly where the form
is longest. Lists and reports already keep their toolbar on top.
**There is no "Close" button.** The tab closes by the × on its label and by Esc, both
with the unsaved-changes dialog. A panel left with nothing in it is not rendered at all.
The two groups are parted by a thin **separator**, not by a full-width spacer. A spacer
throws the second group against the right edge of the screen, and on a wide monitor the
print button has to be hunted for — a large emptiness does not read as grouping, it reads
as "nothing here".
**Put an icon on every toolbar button.** Take it from `@client/ui-kit/icons.ts` — one
glyph set for the whole ui-kit — and never size it with Tailwind classes; the glyphs live
in shadow DOM and must not depend on whether `h-4` was generated elsewhere.
**The full list of glyphs is [icons.md](icons.md), next to this file** — every key withFrom IgorAIvanov/altera03, MIT.
More from IgorAIvanov/altera03
- 0.584score
typebox-model-schema
IgorAIvanov
Define the complete model schema using TypeBox as the single source of truth for backend validation, SQL contract documentation, and frontend form/list/picker…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
model-form-root
IgorAIvanov
Build a model edit form (and understand the shared $root data contract behind every list, picker and form) by extending BaseUI, seeding state from the TypeBox…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
model-feature-architecture
IgorAIvanov
Design or refactor a model into a feature-centered structure where frontend UI files and database SQL source live together under app/<family>/<model>.
SkillAFreshness: A★ 1Claude Code +9 - 0.575score
db-function-contract
IgorAIvanov
Define PostgreSQL function contracts for models that use List, Get, Save, Delete, and Lookup with JSONB payloads and JSONB results.
SkillAFreshness: A★ 1Claude Code +9 - 0.547score
model-command-access
IgorAIvanov
Declare the permission a model command requires in manifest.json (commands.access) so the runtime can enforce it.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
model-command-response
IgorAIvanov
Derive the exact shape of a model command's response before consuming it in a screen — never hand-write the interface from memory.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
daisyui
IgorAIvanov
Official daisyUI component library skill.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
altera-new-app
IgorAIvanov
Deploy a new application on the Altera framework into an empty directory — from scaffold to a working login screen — and verify that it actually runs.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
framework-ui-internals
IgorAIvanov
Внутрішні правила client/ui-kit — чому тема перебиває daisyUI, як не зламати граф чанків, пастки Lit і TypeScript у базових класах, де проходить межа між…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
lit
IgorAIvanov
Rules and patterns for writing Lit Web Components correctly in this project.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
app-run-and-deploy
IgorAIvanov
Run the application in development or production, fill in .env, publish the schema to a local or remote database, put several instances on one machine, and…
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
document-tabular-section
IgorAIvanov
Build an editable tabular section (табличну частину) of a document — controls that fill the table cell flush with the grid, decimal columns with live totals —…
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 18, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/IgorAIvanov/altera03
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from IgorAIvanov
- 0.584score
typebox-model-schema
IgorAIvanov
Define the complete model schema using TypeBox as the single source of truth for backend validation, SQL contract documentation, and frontend form/list/picker…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
model-form-root
IgorAIvanov
Build a model edit form (and understand the shared $root data contract behind every list, picker and form) by extending BaseUI, seeding state from the TypeBox…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
model-feature-architecture
IgorAIvanov
Design or refactor a model into a feature-centered structure where frontend UI files and database SQL source live together under app/<family>/<model>.
SkillAFreshness: A★ 1Claude Code +9 - 0.575score
db-function-contract
IgorAIvanov
Define PostgreSQL function contracts for models that use List, Get, Save, Delete, and Lookup with JSONB payloads and JSONB results.
SkillAFreshness: A★ 1Claude Code +9 - 0.547score
framework-ui-internals
IgorAIvanov
Внутрішні правила client/ui-kit — чому тема перебиває daisyUI, як не зламати граф чанків, пастки Lit і TypeScript у базових класах, де проходить межа між…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
daisyui
IgorAIvanov
Official daisyUI component library skill.
SkillBFreshness: B★ 1Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get screen-design-rules running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
screen-design-rules skill. Agent Mart. https://agentmart.dev/skills/igoraivanov-screen-design-rules (last updated 2026-10-24)