con un clic
conventions-ux
Apply when building or modifying user-facing UI components.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Apply when building or modifying user-facing UI components.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
| name | conventions-ux |
| description | Apply when building or modifying user-facing UI components. |
Apply when building or modifying user-facing UI components.
Keywords: crystal-clear, subtle, detail-oriented, high-precision. Visual inspiration: glass-like surfaces. Clean, translucent, precise.
Default palette: clean neutral grays on white. Accent palettes (Nord, Flexoki) available as user preferences; brand stays monochrome with the Stella § mark.
Brand colours (reference, not for hard-coding):
| Name | Hex | Usage |
|---|---|---|
| Black | #000 | Primary text, logo mark |
| Soft Blue | #cae1fb | Illustration/accent background |
| Pale Blue | #e2f6fd | Light tint surfaces |
| Blue Accent | #59a1d4 | Accent in marketing material |
Use semantic tokens (bg-muted, text-foreground, border)
rather than raw colour values.
#000000 backgrounds in the app chrome. Use the
--background token (neutral-950 blend in dark mode) so
surfaces retain subtle warmth and depth.Small, almost invisible touches. Linear is a good reference.
-webkit-font-smoothing: antialiased on macOS for crisper
text on light backgrounds. Apply globally in the base stylesheet.font-variant-numeric: tabular-nums on any element whose
number changes dynamically (counters, timers, tables with
numeric columns). Prevents layout shift.text-wrap: balance on headings and short text blocks to
distribute lines evenly. text-wrap: pretty on body/paragraph
text to avoid orphans.box-shadow for depth and separation. Reserve border for
semantic boundaries (inputs, dividers), not for creating depth.outline: 1px solid rgb(0 0 0 / 0.06) to define the edge
without a heavy border.transition: all. Always specify exact properties
(e.g., transition: opacity 150ms, transform 150ms). all
triggers unnecessary repaints and can animate properties you
didn't intend.transform and
opacity exclusively. Never animate width, height, top,
left, padding, or margin; these trigger layout recalc.
Use scale/translate instead.transition for
interactive state changes (hover, press) so the browser can
interrupt mid-animation. Reserve @keyframes for staged
sequences (page load, modals).+, text button).DefaultPendingComponent) is the last-resort
fallback, not the default. Give each route its own
pendingComponent so the route you navigate to picks its own shape.@stll/ui table plus the shared
TableSkeletonRows helper) so adding or reordering a column moves
all three at once. Where the page chrome does not need the data,
move the Suspense boundary inward (render the real chrome, suspend
only the leaves). For scaffolds that cannot share a source, mirror
the real layout faithfully.min-h-dvh, not h-screen. h-screen ignores the
mobile browser chrome and causes scroll/overlap bugs. dvh
units adapt to the dynamic viewport.Stella ships an Arabic (RTL) UI; every surface must mirror correctly
and stay locale-aware. Test new UI in ar (not just en) before
shipping — flipping documentElement.dir is not enough on its own.
ps-/pe-, ms-/me-, start-/end-,
border-s/-e, text-start/-end — never physical pl-/pr-, ml-/mr-,
left-/right-, text-left/right, border-l/-r, rounded-l/-r.
Physical directional classes do not flip under dir="rtl". Enforced by
the no-physical-properties oxlint rule.<DirectionalIcon icon={...} /> (@stll/ui), which
centralizes the rtl:-scale-x-100 mirror. Do NOT mirror brand marks/logos,
the media play triangle, checkmarks, or anything whose meaning is
orientation-free. For disclosure chevrons that rotate-90 on expand, pass
flip={!isExpanded} so the mirror applies only while collapsed — an
always-on mirror composes with the rotation and points the expanded state
the wrong way.useFormatter()/getFormatter() (or pass
getFormattingLocale()); never a bare Intl.* / .toLocale*String()
with the base lang or no locale — that drops the user's numbering-system
preference (e.g. Eastern Arabic-Indic digits). Enforced by the
no-raw-locale-format oxlint rule.<bdi> so bidi
reordering doesn't scramble neighbouring punctuation. Use dir="auto" on
free-text user inputs; keep tel/email/url and code fields LTR.right-0/left-0.Explicit list of patterns that AI agents tend to generate and that do not belong in a professional legal workspace:
grid-cols-3 as
the go-to layout. Prefer asymmetric grids, two-column splits,
or list views that match the data shape.pointer for interactive elements.Drive the stella command-line client (@stll/cli), a legal-workspace CLI whose command surface is generated from the stella MCP tool registry. Covers install, OAuth login, the full command tree grouped by domain, JSON output for scripting, the --input escape hatch for deep payloads, cursor pagination, destructive-op confirmation, and exit codes.
Apply when writing or reviewing React effects in apps/web. Direct useEffect is banned; use the sanctioned wrappers or a better primitive.
Apply when writing or modifying database schema, queries, or migrations.
Apply when a performance-guard check (network baseline, bundle baseline, DB query count, loader-prefetch lint, RC bailouts) fails or when touching a hot route/endpoint.
Internationalization conventions for Stella. Apply when adding or modifying user-facing strings.
Review and update third-party dependencies. Use this when asked to upgrade packages, survey new minor or major releases for useful features, assess whether Stella can adopt them, or validate whether a release looks suspicious before bumping it.