Skip to content
Back to skills

Frontend

ASecurity

Use when building React components, optimizing performance, analyzing bundle sizes, scaffolding projects, implementing accessibility, reviewing frontend code quality, performing visual overhauls, or designing UI/UX systems.

  • 29 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 26, 2026
developmentgoreactvueangularnextjstestingapifrontendsecurityperformance

Works with

  • cursor
  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add Joncik91/ucai --skill frontend --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Frontend?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Frontend
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/joncik91-frontend/badge)](https://www.skillsdirectory.com/skills/joncik91-frontend)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: frontend
description: Use when building React components, optimizing performance, analyzing bundle sizes, scaffolding projects, implementing accessibility, reviewing frontend code quality, performing visual overhauls, or designing UI/UX systems.
---

# Frontend Engineer

Frontend development patterns, performance optimization, accessibility, and distinctive UI design for any framework.

---

## Step 1: Detect the Stack

Before writing any code, identify the framework and tooling from project signals:

| Signal file / pattern | Stack |
|----------------------|-------|
| `next.config.*` | Next.js (React) |
| `nuxt.config.*` | Nuxt (Vue) |
| `svelte.config.*` | SvelteKit |
| `astro.config.*` | Astro |
| `remix.config.*` / `@remix-run` in package.json | Remix (React) |
| `angular.json` | Angular |
| `vite.config.*` + React | Vite + React |
| `vite.config.*` + Vue | Vite + Vue |
| `tailwind.config.*` | Tailwind CSS |
| `styled-components` / `emotion` in package.json | CSS-in-JS |

Check: `cat package.json`, `ls -la`, `cat vite.config.*` — whichever applies.

---

## Step 2: Research Current Practices

Once you know the stack, search before making framework-specific recommendations:

WebSearch: " component patterns best practices 2025"
WebSearch: " performance optimization 2025"
WebSearch: " bundle size optimization 2025"
WebSearch: " accessibility best practices 2025"
WebSearch: " best practices 2025"

---

## Step 3: Design Thinking

> **First Principles preamble**: before reaching for a library, framework, or component pattern, ask whether the choice solves *this* UI's specific constraint, or is a habit from larger apps. A landing page is not a dashboard; a settings panel is not a marketing site. Question the requirement before adopting the pattern; reject "we need X because everyone uses X" and reason from the actual user, content, and interaction model.

When building any UI — component, page, or application — commit to a bold aesthetic direction **before writing a line of code**:

- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme and own it. Brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art
deco/geometric, soft/pastel, industrial/utilitarian — commit to one direction and execute it with precision.
- **Differentiation**: What makes this unforgettable? What is the one thing someone will remember?
- **Constraints**: Framework, performance budget, accessibility requirements.

**The goal is intentionality, not intensity.** Refined minimalism and bold maximalism both work — generic middle ground does not.

### Typography

Choose fonts that are beautiful, unique, and characterful. Pair a distinctive display font with a refined body font.

- **Avoid**: Inter, Roboto, Arial, system fonts, Space Grotesk (overused)
- **Prefer**: Unexpected choices that elevate the aesthetic and feel designed for the context
- Every font decision should be documented with a reason

### Color and Theme

Commit to a cohesive aesthetic. Use CSS variables for consistency.

- Dominant colors with sharp accents outperform timid, evenly-distributed palettes
- Define tokens: primary, surface, text, error, border — never scatter raw hex values
- Vary between light and dark themes — do not default to one
- Check contrast ratios (4.5:1 for body text, 3:1 for large text)

### Motion

Use animation for effects and micro-interactions. Prioritize CSS-only for HTML; Motion library for React when available.

- One well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions
- Use scroll-triggering and hover states that surprise
- Match animation complexity to the aesthetic vision — maximalist designs need elaborate motion, refined designs need restraint

### Spatial Composition

- Unexpected layouts: asymmetry, overlap, diagonal flow, grid-breaking elements
- Generous negative space OR controlled density — not the muddled middle
- Visual hierarchy through size contrast, not just color

### Backgrounds and Visual Details

Create atmosphere and depth rather than defaulting to solid colors:

- Gradient meshes, noise textures, geometric patterns, layered transparencies
- Dramatic shadows, decorative borders, grain overlays
- Custom cursors, contextual effects that match the overall aesthetic

### Aesthetic Anti-Patterns

Never use generic AI-generated aesthetics:

- Overused fonts: Inter, Roboto, Arial, Space Grotesk, system fonts
- Purple gradients on white backgrounds
- Predictable layouts and cookie-cutter component patterns
- Design that lacks context-specific character
- Two consecutive generations that converge on the same choices

---

## Step 4: Universal Frontend Principles

These apply regardless of framework.

### Component Design

- **Single responsibility**: one component, one job — split when a component does two distinct things
- **Props as API**: treat component props like a public API — document what is required vs optional
- **Co-location**: keep styles, tests, and types next to the component they belong to
- **Composition over inheritance**: prefer passing children/slots over extending base components
- **Controlled vs uncontrolled**: be intentional — controlled for forms that need validation, uncontrolled for simple inputs

### Performance

- **Render budget**: components should render in under 16ms for 60fps; profile before optimizing
- **Lazy loading**: code-split at route boundaries; defer below-fold components
- **Image optimization**: use the framework image component or `<picture>` + `srcset`; never serve 2x the display size
- **Memoization**: only add when profiling shows a problem — premature memoization adds complexity for no gain
- **Bundle analysis**: regularly audit bundle size; flag dependencies over 50kb that can be replaced or lazy-loaded

### Accessibility (a11y)

- **Semantic HTML**: use the right element (`<button>` not `<div onClick>`, `<nav>` not `<div class="nav">`)
- **Focus management**: custom modals/drawers/dropdowns must trap focus and restore it on close
- **ARIA**: only use ARIA to extend semantics, not replace them; prefer native elements
- **Color contrast**: 4.5:1 for body text, 3:1 for large text (WCAG AA minimum)
- **Keyboard navigation**: every interactive element reachable and operable by keyboard
- **Screen reader testing**: test with NVDA+Firefox or VoiceOver+Safari before shipping

### State Management

- **Locality first**: co-locate state with the component that owns it; lift only when needed
- **Server state vs client state**: use a data-fetching library for server state (TanStack Query, SWR, Apollo) — do not store it in global store
- **Derived state**: compute from source of truth — do not sync two pieces of state
- **Global store**: only for genuinely cross-cutting state (auth user, theme, feature flags)

### Forms

- **Validation**: validate on blur for UX, on submit for correctness; show errors inline
- **Accessibility**: every input has a `<label>`; error messages referenced via `aria-describedby`
- **Loading states**: disable submit during async; show spinner or progress
- **Optimistic UI**: apply the mutation locally, rollback on error

### Security

- **XSS**: never set `innerHTML`/`dangerouslySetInnerHTML` from user input; sanitize if unavoidable
- **CSP**: Content-Security-Policy header; avoid `unsafe-inline`
- **Sensitive data**: never log tokens, passwords, or PII to the console
- **Third-party scripts**: audit before adding; every script is a supply chain risk
- **Dependency audit**: run `npm audit` regularly; keep dependencies current

---

## Review Checklist

Before any frontend PR:

- [ ] Aesthetic direction chosen and documented before any code was written
- [ ] Font choices are distinctive and context-appropriate (not Inter/Roboto/Arial/Space Grotesk)
- [ ] Color tokens defined; contrast ratios verified (WCAG AA)
- [ ] All component states handled — default, hover, focus, disabled, loading, error, empty
- [ ] Components have single, clear responsibility
- [ ] No `dangerouslySetInnerHTML` from unvalidated input
- [ ] Every interactive element is keyboard-accessible
- [ ] Every input has an associated `<label>`
- [ ] Images have meaningful `alt` text (or `alt=""` if decorative)
- [ ] Bundle impact assessed for new dependencies
- [ ] No console.log of tokens or PII
- [ ] Responsive at mobile, tablet, and desktop breakpoints

Files in this skill

  • SKILL.md8.3 KB
  • references/frontend_best_practices.md19.3 KB
  • references/nextjs_optimization_guide.md14.8 KB
  • references/react_patterns.md16.9 KB
  • references/ui_design_system.md8.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.