plugins/eden-ui-web/skills/frontend-design/SKILL.md
Build, review, or visually inspect web pages using Hugo templates, Tailwind CSS, and the project's brand design system. Use when the user wants to create new pages, design components, audit existing UI, review frontend code, or visually test rendered pages. Triggers on: "build the UI", "design this page", "create a page", "review the frontend", "audit the UI", "check UI consistency", "make it look good", "frontend review", "visual review", "check how it looks", "inspect the page"
npx skillsauth add ao-cyber-systems/devflow-claude eden-web:frontend-designInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Three modes:
Build mode — Generate Hugo templates and partials using Tailwind CSS with the project's brand tokens. Compose from reusable partials rather than writing one-off HTML. Produces production-grade pages that match the brand design system (dark mode, responsive, accessible, performant).
Review mode — Audit existing Hugo templates for brand compliance. Check for: hardcoded colors instead of brand tokens, missing dark mode support, inconsistent typography, accessibility gaps, unused or redundant CSS, non-semantic HTML structure.
Visual mode — Load pages in a browser via Playwright and inspect the rendered output. Check visual consistency, responsive behavior, dark mode rendering, interactive functionality, and design token compliance in the actual DOM/CSS.
Output: Working Hugo templates (build), actionable findings with fixes (review), or visual audit report with screenshots (visual). </objective>
<execution_context> @plugins/eden-ui-web/references/hugo-conventions.md </execution_context>
<context> Mode + target: $ARGUMENTS - `build <description>` — Generate new pages/partials (e.g., "build the pricing page") - `review [paths]` — Audit existing files (e.g., "review layouts/partials/") - `visual [URL]` — Visual browser inspection (e.g., "visual http://localhost:1313/about") - If no mode specified, infer from contextBrand reference — read at the start of every mode:
data/brand/config.tomlassets/css/brand.cssdata/brand/reference.md (if exists)If no brand is configured, suggest running the brand-builder skill first.
Hugo project structure (standard):
layouts/ — Templates (baseof, list, single, partials, shortcodes)content/ — Markdown content pagesassets/css/ — Tailwind source filesstatic/ — Static assets (images, fonts, favicons)data/ — Data files (brand config, component data)config/ or hugo.toml — Site configuration
</context>
Read project brand — Load data/brand/config.toml and assets/css/brand.css to understand the active design tokens. If no brand exists, ask the user to run brand-builder first or specify a preset to apply inline. The brand determines all color, typography, and styling decisions.
Understand the request — What page/section/partial is needed? What content does it display? What user interactions does it support? Where does it fit in the site navigation?
Check existing partials — Read layouts/partials/ to find reusable components already built for this project. Don't rebuild what exists — compose from existing partials.
Plan the composition — List which sections and components the page needs:
Generate Hugo templates — Write the template files:
Structure:
{{ define "main" }}...{{ end }} blocks extending baseof.htmllayouts/partials/components/ for repeated patternspartial function with context: {{ partial "components/hero.html" . }}.ParamsStyling with brand tokens:
var(--brand-primary-500)bg-[var(--brand-primary-500)] or extend Tailwind configdark: variants for all color-dependent stylesResponsive design:
md: for tablet, lg: for desktopAccessibility:
<header>, <nav>, <main>, <section>, <footer>Performance:
{{ $img := resources.Get "..." }}Interactivity (when needed):
dark class on <html>)Verify — Confirm all templates render without Hugo errors. Check that brand tokens are used consistently. Verify partials receive correct context.
Read project brand — Load brand config to understand what tokens should be in use.
Discover target files — Glob for *.html in layouts/. If no path given, scan all of layouts/ and assets/css/.
Audit each file for these categories:
Brand compliance:
bg-blue-500, #667eea) instead of brand tokensHugo best practices:
{{ partial }} for repeated patterns{{ with }} / {{ if }} guards around optional dataDark mode:
dark: variants on colored elementsAccessibility:
<div> where <nav>, <section> would be appropriate)Performance:
Report findings — Group by severity:
Generate fixes — Provide corrected code for must-fix and should-fix items. Apply fixes directly if approved.
Uses Playwright to load pages in a real browser and inspect rendered output.
Read project brand — Load brand config to know what design to expect.
Confirm the site is running — Ask for the base URL (default: http://localhost:1313). Verify the Hugo dev server responds.
Determine scope — What pages to inspect:
For each page:
Navigate and snapshot — Load the URL. Take an accessibility snapshot to get the semantic structure — DOM tree, ARIA roles, heading hierarchy.
Screenshot — Capture the visual output for design review.
Brand token audit — Evaluate computed styles:
() => {
const root = getComputedStyle(document.documentElement);
return {
primaryColor: root.getPropertyValue('--brand-primary-500'),
fontDisplay: root.getPropertyValue('--brand-font-display'),
darkMode: document.documentElement.classList.contains('dark'),
};
}
Verify brand CSS variables are defined and applied correctly.
Structure check — From the accessibility snapshot:
Responsive check — Resize and re-inspect:
At each breakpoint: screenshot, check snapshot for layout changes, verify nav adapts.
Dark mode check — Toggle dark mode:
() => { document.documentElement.classList.toggle('dark'); }
Screenshot in dark mode. Verify:
Interactive testing — Test dynamic elements:
Console check — After interactions, check for:
Compile visual audit report:
Layout & Spacing: Alignment issues, overflow, inconsistent margins
Brand Compliance: Colors, fonts, shadows not matching brand tokens
Responsive: Breakpoint-specific layout problems
Dark Mode: Elements that break in dark mode
Accessibility: Issues found in live DOM that code review missed
Performance: Visible loading delays, layout shift, unoptimized images
Cross-reference with code — Trace each finding back to the responsible template file. Provide file paths and specific code to change. Offer to apply fixes.
development
Resolve a parked decision and resume autonomous execution. Use when you see a pending DECISION-NNN.md in .planning/decisions/pending/, when the user wants to choose an option for a blocked checkpoint:decision, or when you need to tell the executor which option to take. Triggers on: "resolve decision", "decide DECISION-", "pick option for DECISION-", "unblock DECISION-", "answer DECISION-", "choose option for decision", "I want option-a", "go with option-b", "my answer is".
development
Orchestrate a multi-step DevFlow workflow by chaining skills. Use when the user wants to invoke a sequence of skills as one ask (e.g., "build and sync to github", "research, plan, then build", "ship and announce"). Triggers on: "ship X to Y", "build and X", "plan and X", "X then Y", "in one go", "as a chain", "all in sequence", "chain", "ship-and-sync", "research-plan-build"
testing
Stamp a new polyglot monorepo using the AO Cyber Systems scaffold — root CLAUDE.md with Layout table, per-area CLAUDE.md, path-filtered CI workflows, comprehensive .gitignore, and the no-binaries pre-commit hook config. Use this for new product monorepos (the 5-monorepo architecture: aodex, aosentry, eden-biz, politihub, aohealth, plus future ones). Triggers on: "new monorepo", "scaffold a monorepo", "set up a monorepo", "create a new product monorepo".
development
Validate that a monorepo follows the AO Cyber Systems layout convention — root CLAUDE.md declares every area, every area has its own CLAUDE.md, no compiled binaries are tracked in git. Reads the root `CLAUDE.md` Layout table, walks the working tree, and reports drift in a single Markdown summary. Standalone — works on any repo. Triggers on: "audit monorepo layout", "monorepo doctor", "is this monorepo healthy?", "check the layout", "find binaries in the repo".