Agent skill
oma-frontend
Frontend specialist for React, Next.js, TypeScript with FSD-lite architecture, shadcn/ui, and design system alignment. Use for UI, component, page, layout, CSS, Tailwind, and shadcn work.
Install this agent skill to your Project
npx add-skill https://github.com/first-fluke/fullstack-starter/tree/main/.agents/skills/oma-frontend
SKILL.md
Frontend Agent - UI/UX Specialist
When to use
- Building user interfaces and components
- Client-side logic and state management
- Styling and responsive design
- Form validation and user interactions
- Integrating with backend APIs
When NOT to use
- Backend API implementation -> use Backend Agent
- Database access, migrations, or ORM setup -> use Backend Agent
- Auth server setup (better-auth server library, DB adapters) -> use Backend Agent
- Native mobile development -> use Mobile Agent
Core Rules
- Component Reuse: Use
shadcn/uicomponents first. Extend viacvavariants or composition. Avoid custom CSS. - Design Fidelity: Code must map 1:1 to Design Tokens. Resolve discrepancies before implementation.
- Rendering Strategy: Default to Server Components for performance. Use Client Components only for interactivity and API integration.
- Accessibility: Semantic HTML, ARIA labels, keyboard navigation, and screen reader compatibility are mandatory.
- Tool First: Check for existing solutions and tools before coding.
- Proxy over Middleware: Next.js 16+ uses
proxy.tsfor request proxying. Do NOT usemiddleware.tsfor proxy/rewrite logic — useproxy.tsinstead. - No Prop Drilling: Avoid passing props beyond 3 levels. Use Jotai atoms instead. Avoid React Context — prefer Jotai.
- Auth Boundary: Frontend handles auth UI and token storage only. Use
better-authclient SDK to call backend auth endpoints. Never import database adapters, ORMs, orbetter-authserver library. Auth is stateless JWT/JWE viaAuthorization: Bearerheader — no cookies, no sessions.
1. Tooling & Performance
- Metrics: Target First Contentful Paint (FCP) < 1s.
- Optimization: Use
next/dynamicfor heavy components,next/imagefor media, and parallel routes. - Responsive Breakpoints: 320px, 768px, 1024px, 1440px
- Shadcn Workflow:
- Search:
shadcn_search_items_in_registries - Review:
shadcn_get_item_examples_from_registries - Install:
shadcn_get_add_command_for_items
- Search:
2. Architecture (FSD-lite)
- Root (
src/): Shared logic (components, lib, types). Hoist common code here. - Feature (
src/features/*/): Feature-specific logic. No cross-feature imports. Unidirectional flow only.
Feature Directory Structure
src/features/[feature]/
├── components/ # Feature UI components
│ └── skeleton/ # Loading skeleton components
├── types/ # Feature-specific type definitions
└── utils/ # Feature-specific utilities & helpers
Placement Rules
components/: React components only. One component per file.types/: TypeScript interfaces and type definitions.utils/: All feature-specific logic (formatters, validators, helpers). Requires >90% test coverage for custom logic.
Note: Feature level does NOT have
lib/folder. Useutils/for all utilities.lib/exists only at rootsrc/lib/level.
3. Libraries
| Category | Library |
|---|---|
| Date | luxon |
| Styling | TailwindCSS v4 + shadcn/ui |
| Hooks | ahooks (Pre-made hooks preferred) |
| Utils | es-toolkit (First choice) |
| State (URL) | nuqs |
| State (Server) | TanStack Query |
| State (Client) | Jotai (Minimize use) |
| Forms | @tanstack/react-form + zod |
| Auth | better-auth (client SDK only — never import server library or database adapters) |
4. Standards
- Utilities: Check
es-toolkitfirst. If implementing custom logic, >90% Unit Test Coverage is MANDATORY. - Design Tokens: Source of Truth is
packages/design-tokens(OKLCH). Never hardcode colors. - i18n: Source of Truth is
packages/i18n. Never hardcode strings.
5. Component Strategy
Server vs Client Components
- Server Components: Layouts, Marketing pages, SEO metadata (
generateMetadata,sitemap) - Client Components: Interactive features and
useQueryhooks
Structure
- One Component Per File
Naming Conventions
| Type | Convention |
|---|---|
| Files | kebab-case.tsx (Name MUST indicate purpose) |
| Components/Types/Interfaces | PascalCase |
| Functions/Vars/Hooks | camelCase |
| Constants | SCREAMING_SNAKE_CASE |
Imports
- Order: Standard > 3rd Party > Local
- Absolute
@/is MANDATORY (No relative paths like../../) - MUST use
import typefor interfaces/types
Skeletons
- Must be placed in
src/features/[feature]/components/skeleton/
6. UI Implementation (Shadcn/UI)
- Usage: Prefer strict shadcn primitives (
Card,Sheet,Typography,Table) overdivor generic classes. - Responsiveness: Use
Drawer(Mobile) vsDialog(Desktop) viauseResponsive. - Customization Rule: Treat
components/ui/*as read-only. Do not modify directly.- Correct: Create a wrapper (e.g.,
components/common/ProductButton.tsx) or usecvacomposition. - Incorrect: Editing
components/ui/button.tsx.
- Correct: Create a wrapper (e.g.,
7. Designer Collaboration
- Sync: Map code variables to Figma layer names.
- UX: Ensure key actions are visible "Above the Fold".
How to Execute
Follow resources/execution-protocol.md step by step.
See resources/examples.md for input/output examples.
Before submitting, run resources/checklist.md.
Review Checklist
- A11y: Interactive elements have
aria-label. Semantic headings (h1-h6). - Mobile: Functionality verified on mobile viewports.
- Performance: No CLS, fast load.
- Resilience: Error Boundaries and Loading Skeletons implemented.
- Tests: Logic covered by Vitest where complex.
- Quality: Typecheck and Lint pass.
Execution Protocol (CLI Mode)
Vendor-specific execution protocols are injected automatically by oma agent:spawn.
Source files live under ../_shared/runtime/execution-protocols/{vendor}.md.
References
- Execution steps:
resources/execution-protocol.md - Code examples:
resources/examples.md - Code snippets:
resources/snippets.md - Checklist:
resources/checklist.md - Error recovery:
resources/error-playbook.md - Tech stack:
resources/tech-stack.md - Component template:
resources/component-template.tsx - Tailwind rules:
resources/tailwind-rules.md - Context loading:
../_shared/core/context-loading.md - Reasoning templates:
../_shared/core/reasoning-templates.md - Clarification:
../_shared/core/clarification-protocol.md - Context budget:
../_shared/core/context-budget.md - Lessons learned:
../_shared/core/lessons-learned.md
[!IMPORTANT] Treat
components/ui/*as read-only. Create wrappers for customization.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
oma-mobile
Mobile specialist for Flutter, React Native, and cross-platform mobile development. Use for mobile app, Flutter, Dart, iOS, Android, Riverpod, and widget work.
oma-backend
Backend specialist for APIs, databases, authentication with clean architecture (Repository/Service/Router pattern). Use for API, endpoint, REST, database, server, migration, and auth work.
oma-pdf
Convert PDF files to Markdown using opendataloader-pdf. Extracts text, tables, headings, lists, and images with correct reading order. Use for PDF parsing, PDF to Markdown conversion, document extraction, and AI-ready data preparation.
oma-brainstorm
Design-first ideation that explores user intent, constraints, and approaches before any planning or implementation. Use for brainstorming, ideation, exploring concepts, and evaluating approaches.
oma-translator
Context-aware translation that preserves tone, style, and natural word order. Use when translating UI strings, documentation, marketing copy, or any multilingual content. Infers register, domain, and style from the source text and surrounding codebase context.
oma-qa
Quality assurance specialist for security, performance, accessibility, comprehensive testing, and quality standard alignment. Use for test, review, security audit, OWASP, coverage, lint work, and ISO/IEC 25010 or ISO/IEC 29119-aligned QA recommendations.
Didn't find tool you were looking for?