-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
docs: brand vs product register awareness #29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
adelaidasofia
wants to merge
2
commits into
Leonxlnx:main
Choose a base branch
from
adelaidasofia:proposal-register-awareness
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+101
−0
Open
Changes from 1 commit
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,101 @@ | ||
| # Register awareness: brand vs product | ||
|
|
||
| Taste-skill ships strong tactical rules. After running them against several real surfaces, one pattern emerges that's worth surfacing in the docs: most rules read as **brand-register defaults** when they're applied uniformly across every project. | ||
|
|
||
| This doc names the distinction so callers can pick the right rule-set for the work in front of them, and so contributors have a vocabulary for proposing new skills that target one register or the other. | ||
|
|
||
| ## The two registers | ||
|
|
||
| ### BRAND register | ||
| **Design IS the product.** Marketing pages, landing pages, campaign pages, portfolios, long-form content, about pages, anything where the visitor's first impression *is* the deliverable. | ||
|
|
||
| Imperative: communicate, not transact. Distinctiveness is the bar. AI-flooded average reads as mediocre. | ||
|
|
||
| The current taste-skill default rule-set fits this register well — `design-taste-frontend`, `gpt-taste`, `redesign-existing-projects`, `soft-skill`, `brutalist-skill`, `stitch-design-taste` all default-target brand work. | ||
|
|
||
| ### PRODUCT register | ||
| **Design SERVES the product.** App UIs, admin dashboards, settings panels, data tables, tools, authenticated surfaces, anything where the user is in a task. | ||
|
|
||
| Imperative: earned familiarity. The tool disappears into the task. Strangeness without purpose is the failure mode — over-decorated buttons, mismatched form controls, gratuitous motion, display fonts in UI labels. | ||
|
|
||
| `minimalist-skill` is the closest current skill to a product-register fit, but it still leans editorial. There isn't a dedicated product-UI skill in the bundle yet (proposal below). | ||
|
|
||
| ## Rules that swap between registers | ||
|
|
||
| These are the rules where the brand-register answer and the product-register answer genuinely diverge — applying the brand rule in a product context reads as costume, and applying the product rule in a brand context reads as templated. | ||
|
|
||
| | Rule | BRAND | PRODUCT | | ||
| |---|---|---| | ||
| | `Inter` font | Banned (training-data default; creates monoculture) | Permitted — common cross-platform default for a reason | | ||
| | System font stack (`-apple-system, BlinkMacSystemFont, system-ui, sans-serif`) | Banned unless the brand IS a literal system tool | Legitimate; native feel on every platform | | ||
| | Two-family pairing (display + body) | Often the right move | Often unnecessary; one well-tuned sans carries the whole UI | | ||
| | Type scale | Fluid `clamp()` for headings | Fixed `rem` scale; clamp() on `h1` in a sidebar looks worse, not better | | ||
| | Scale ratio between steps | ≥ 1.25 (modular scale) | 1.125–1.2 (tighter; more elements, exaggerated contrast = noise) | | ||
| | Layout | Asymmetric or rigorously gridded as voice; centered-stack is failure | Predictable grids; consistency IS an affordance; standard nav patterns are features | | ||
| | Color strategy | Restrained / Committed / Full palette / Drenched all permitted | Restrained is the floor; a single surface can earn Committed | | ||
| | Motion entrance | Ambitious first-load orchestration permitted when brand invites it | No orchestrated page-load — users are in flow | | ||
| | Motion duration | Whatever serves the effect; up to 1s+ for cinematic | 150–250 ms on most transitions | | ||
| | Motion purpose | Decoration + state | State only — feedback, loading, reveal, transition | | ||
| | Imagery — placeholder source | Unsplash with the URL shape `https://images.unsplash.com/photo-{id}?auto=format&fit=crop&w=1600&q=80`; search for the brand's physical object | `picsum.photos/seed/{name}/800/600` for any placeholder; real product screenshots > photo decoration | | ||
| | Zero images on imagery-implied brief (restaurant, hotel, food, travel, fashion, photography) | **Bug** | Not applicable | | ||
| | Standard navigation patterns (top bar, side nav, breadcrumbs, tabs, command palette) | Often the wrong choice; invent the brand experience | Features, not failures — established expectations help the user | | ||
| | Component states (default + hover + focus + active + disabled + loading + error) | Brand surfaces ship the relevant subset (mostly hover + active) | All seven, every time | | ||
| | Skeleton states for loading | Optional | Required — never generic circular spinners | | ||
| | Empty state design | Optional | Required — teach the interface, not "nothing here" | | ||
|
|
||
| ## Picking register | ||
|
|
||
| Priority order: | ||
| 1. Cue in the task itself ("landing page" vs "dashboard") | ||
| 2. The surface in focus (the page, file, or route being worked on) | ||
| 3. Explicit `register:` field if the project carries one (see prior art below) | ||
|
|
||
| When in doubt, both register reference files in [pbakaus/impeccable](https://github.com/pbakaus/impeccable) (`reference/brand.md` + `reference/product.md`) are useful adjacent reading. impeccable is Apache 2.0, derived from Anthropic's `frontend-design` skill, and codifies the register split as its own primary structuring decision. | ||
|
|
||
| ## Per-skill register fit (current bundle) | ||
|
|
||
| | Skill | Default fit | Notes | | ||
| |---|---|---| | ||
| | `design-taste-frontend` | Brand | The default all-rounder; reads brand-leaning when applied to dashboards | | ||
| | `gpt-tasteskill` | Brand | Stricter brand-grade output | | ||
| | `image-to-code-skill` | Brand (websites) | Image-first workflow assumes visual website work | | ||
| | `redesign-existing-projects` | Both | The audit checklist applies to either, but several typography/color rules read brand-default | | ||
| | `soft-skill` | Brand | "$150k agency" register; brand-only | | ||
| | `output-skill` | Both | Anti-truncation discipline is register-agnostic | | ||
| | `minimalist-skill` | Editorial-product hybrid | Closest to a product-fit skill; still leans editorial | | ||
| | `brutalist-skill` | Brand | Hard mechanical brand language | | ||
| | `stitch-design-taste` | Brand | Stitch-shaped, brand-oriented | | ||
| | `imagegen-frontend-web` | Brand | Web-section comps | | ||
| | `imagegen-frontend-mobile` | Both | Mobile mockups span both registers | | ||
| | `brandkit` | Brand | Identity boards by name | | ||
|
|
||
| ## Proposal: where a register dial would live | ||
|
|
||
| Two clean shapes for surfacing this in the skills themselves: | ||
|
|
||
| **Shape A: top-level dial alongside the existing three.** | ||
| ``` | ||
| DESIGN_VARIANCE: 8 | ||
| MOTION_INTENSITY: 6 | ||
| VISUAL_DENSITY: 4 | ||
| REGISTER: brand # or "product" | ||
| ``` | ||
| The skill could read the register and switch a few rules (the swap-list above). Backward-compatible — defaults to `brand` which is current behavior. | ||
|
|
||
| **Shape B: per-skill front-matter field.** | ||
| ```yaml | ||
| --- | ||
| name: design-taste-frontend | ||
| register: brand | ||
| description: ... | ||
| --- | ||
| ``` | ||
| Lets each skill in the bundle declare its register, and lets future product-UI skills (proposed: `product-ui-taste`) ship cleanly alongside. | ||
|
|
||
| Either works. Open to other shapes. | ||
|
|
||
| ## Adjacent reading | ||
|
|
||
| - [pbakaus/impeccable](https://github.com/pbakaus/impeccable) — Apache 2.0, register split is the primary structuring decision; `reference/brand.md` + `reference/product.md` are the depth pieces | ||
| - [Anthropic frontend-design](https://github.com/anthropics/claude-code/blob/main/plugins/frontend-design/skills/frontend-design/SKILL.md) — impeccable's upstream basis | ||
| - [kylezantos/design-motion-principles](https://github.com/kylezantos/design-motion-principles) — the Frequency Gate (the "should this animate at all" decision) reads cleanly across both registers | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This row uses
gpt-tasteskill(folder name), but the callable skill name isgpt-taste(skills/gpt-tasteskill/SKILL.mdhasname: gpt-taste, and README’s install table also documents--skill gpt-taste). In this table the other entries are largely presented as skill names, so this mismatch can cause users to copy the wrong identifier when selecting a register-aligned skill.Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in f32ed6b. Changed
gpt-tasteskilltogpt-tastein the register-fit table to match the callable name in SKILL.md and the README install table.