Claude-skill-registry brutalist-academic-ui
Skriptoteket-specific brutalist/academic UI design for the Vue 3 + Vite SPA. Uses Tailwind v4 utilities mapped to HuleEdu tokens and SPA primitives.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/brutalist-academic-ui" ~/.claude/skills/majiayu000-claude-skill-registry-brutalist-academic-ui && rm -rf "$T"
manifest:
skills/data/brutalist-academic-ui/SKILL.mdsource content
Brutalist Academic UI
Opinionated design skill for interfaces where intellectual rigor, typographic precision, and structural honesty matter.
Skriptoteket Compatibility (must follow)
- Vue 3 + Vite SPA only. SSR/HTMX is removed; do not re-introduce it.
- Tailwind CSS v4 with
token bridge. Prefer utilities in templates over custom CSS.@theme inline - Tokens are canonical:
(do not edit directly).src/skriptoteket/web/static/css/huleedu-design-tokens.css - SPA entry point:
(import Tailwind + tokens + theme once).frontend/apps/skriptoteket/src/assets/main.css - Use SPA primitives before inventing new ones:
- Buttons:
,.btn-primary
,.btn-cta.btn-ghost - Panels (nested):
,.panel-inset.panel-inset-canvas - Messages:
(via.toast-*
),ToastHost
(via.system-message*
)SystemMessage - Badges:
.status-pill - Page text:
,.page-title.page-description
- Buttons:
- No stacked brutal shadows: only the outermost “panel/card” gets
. Panels/fields nested inside a shadowed surface must useshadow-brutal*
+ thicker, uniform borders (shadow-none
, orpanel-inset*
) to keep the UI calm and readable.border-2 border-navy/20 - No Tailwind default palette leakage in product UI: avoid
,bg-slate-*
, etc. Use token-mapped utilities (text-gray-*
,bg-canvas
,text-navy
) or CSS variables (shadow-brutal-sm
,var(--color-*)
).var(--huleedu-*) - Editor ergonomics: full-height editor routes require
+min-h-0
discipline; follow the Script Editor layout patterns (overflow
,route-stage--editor
).AuthLayout
When to Use
Activate when user:
- Builds websites, landing pages, dashboards, documentation sites
- Needs institutional or academic visual language
- Mentions: "brutalist", "academic", "minimal", "serious UI"
- Wants to avoid generic startup aesthetics (gradients, soft shadows, pill-everything)
I Need To...
| Task | Read |
|---|---|
| Token + Tailwind mapping rules | |
| Tailwind v4 token bridge ADR | |
| Canonical tokens | |
| SPA token bridge | + |
| SPA primitives (buttons, toasts, system messages) | |
| Well-aligned editor layout example | |
| Workspace panel (IDE layout) | |
| Grid/typography/color principles | fundamentals.md |
| Layout patterns | patterns.md |
| Components | examples/components.md |
| Tables + ledgers | examples/tables-ledgers.md |
Quick Reference
Do
- Use token-mapped utilities:
,bg-canvas
,text-navy
,border-navy
,shadow-brutal-sm
.font-serif - Use CSS variables when a token is not mapped:
,p-[var(--huleedu-space-4)]
.text-[var(--huleedu-text-sm)] - Use the SPA button primitives for actions.
- Prefer opacity-only transitions (hard borders/shadows shimmer when translated).
- Prefer one brutal shadow per major surface (page card / editor workspace / modal). Nested sections get borders, not shadows.
Avoid
- Tailwind default palette (
,bg-slate-*
) in product UI.text-gray-* - Hardcoded hex colors or ad-hoc shadows.
- Large radii, blur/backdrop filters, or decorative gradients.
- Motion/hover transforms that distort “hard” edges (
,translate
) unless there’s a strong UX reason.scale
Font Stack
Use token fonts via Tailwind utilities:
font-sans, font-serif, font-mono.
Button Primitives
<button class="btn-primary">Spara</button> <button class="btn-cta">Publicera</button> <button class="btn-ghost">Redigera</button>
Utility Buttons (Toolbars / Micro UI)
Use
.btn-ghost as a base and override size/shadow for dense controls:
<button class="btn-ghost shadow-none h-[28px] px-2.5 py-1 text-[10px] font-semibold normal-case tracking-[var(--huleedu-tracking-label)] border-navy/30 bg-canvas leading-none" > Formatera </button>
Core Principle
The best interface is one where you notice the content, not the interface. Every element earns its place. Typography does the work. Whitespace is structure.