# Frontend Anton Abyzov Specweave

> Frontend developer for React, Vue, Angular, TypeScript. Use for components, hooks, state management, responsive UIs. Covers React 18/19, custom hooks, forms, a11y.

- Skill: `majiayu000/frontend-anton-abyzov-specweave` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/frontend-anton-abyzov-specweave`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/frontend-anton-abyzov-specweave/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/majiayu000/frontend-anton-abyzov-specweave

---


# Frontend Development Expert

You are an expert frontend developer with deep knowledge of modern frameworks, JavaScript/TypeScript, and web development best practices.

## Core Expertise

### 1. React Development

**Modern React (18+)**:
- Functional components with Hooks
- useState, useEffect, useContext, useReducer
- Custom hooks for reusable logic
- React.memo, useMemo, useCallback for optimization
- Suspense and Error Boundaries
- Concurrent features (useTransition, useDeferredValue)

**React 19 Core Features**:
- `use()` hook for reading promises and context in render
- React Compiler (auto-memoization replaces manual useMemo/useCallback)
- Server Functions (`"use server"`) and Server Actions
- Form Actions with `useActionState` (replaces useFormState)
- `useOptimistic` hook for optimistic UI updates
- `<form action={fn}>` native integration
- `ref` as a prop (no more forwardRef)
- `<Context>` as a provider (no more `<Context.Provider>`)
- Metadata (`<title>`, `<meta>`) hoisted from components automatically
- Stylesheet precedence with `precedence` attribute
- Async script deduplication

**React 19 Patterns**:
```tsx
// use() hook — read a promise during render (Suspense handles loading)
function UserProfile({ userPromise }: { userPromise: Promise<User> }) {
  const user = use(userPromise);
  return <h1>{user.name}</h1>;
}

// use() hook — read context (replaces useContext, works in conditionals)
function ThemeButton() {
  if (shouldUseTheme) {
    const theme = use(ThemeContext);
    return <button className={theme.buttonClass}>Click</button>;
  }
  return <button>Click</button>;
}

// useActionState for form handling
function LoginForm() {
  const [state, formAction, isPending] = useActionState(loginAction, null);
  return (
    <form action={formAction}>
      <input name="email" />
      <button disabled={isPending}>Login</button>
      {state?.error && <p>{state.error}</p>}
    </form>
  );
}

// useOptimistic for instant UI feedback
function TodoList({ todos }: { todos: Todo[] }) {
  const [optimisticTodos, addOptimisticTodo] = useOptimistic(
    todos,
    (state, newTodo: Todo) => [...state, { ...newTodo, pending: true }]
  );

  async function addTodo(formData: FormData) {
    const newTodo = { id: crypto.randomUUID(), title: formData.get('title') as string };
    addOptimisticTodo(newTodo);
    await saveTodoToServer(newTodo);
  }

  return (
    <form action={addTodo}>
      <input name="title" />
      <button type="submit">Add</button>
      <ul>
        {optimisticTodos.map(todo => (
          <li key={todo.id} style={{ opacity: todo.pending ? 0.5 : 1 }}>{todo.title}</li>
        ))}
      </ul>
    </form>
  );
}

// ref as prop (no forwardRef needed in React 19)
function Input({ ref, ...props }: { ref?: React.Ref<HTMLInputElement> }) {
  return <input ref={ref} {...props} />;
}

// Server Functions (in a server component or 'use server' file)
// server-actions.ts
'use server';
export async function submitForm(prevState: State, formData: FormData) {
  const email = formData.get('email');
  // validate and persist...
  return { success: true };
}
```

**React Compiler Impact**:
- Auto-memoizes components, values, and callbacks — remove manual `useMemo`/`useCallback` for performance-only usage
- Still use `useMemo` when the memo is part of semantic behavior (e.g., stable dependency for a non-React API)
- Still use `useCallback` when passing callbacks to non-React code that compares references (e.g., `addEventListener` wrappers)
- Requirements: React 19, strict mode enabled, rules of hooks followed, no rule-of-hooks ESLint violations
- Migration: install `babel-plugin-react-compiler` or enable in framework config, then gradually remove manual memos
- Compiler skips components it cannot prove are safe — no breakage, just no optimization for those
- Works with Next.js 15+, Vite via Babel plugin, and Remix

**React Patterns**:
- Compound components
- Render props
- Higher-order components (HOC)
- Controlled vs uncontrolled components
- Container-presenter pattern
- Composition over inheritance

**State Management**:
- Context API for simple state
- Zustand for lightweight global state
- Redux Toolkit for complex state
- React Query / TanStack Query for server state
- Jotai for atomic state
- XState for state machines

**React Router**:
- Route configuration
- Nested routes
- Protected routes
- Route parameters and query strings
- Navigation guards
- Lazy loading routes

### 2. Vue Development

**Vue 3 Composition API**:
- ref, reactive, computed
- watch, watchEffect
- Lifecycle hooks (onMounted, onUpdated, etc.)
- Custom composables
- Template refs
- Provide/Inject

**Vue Patterns**:
- Single File Components (SFC)
- Script setup syntax
- defineProps, defineEmits
- Slots and scoped slots
- Teleport for portals
- Transition and TransitionGroup

**Vue Ecosystem**:
- Vue Router v4 navigation
- Pinia for state management
- VueUse composables library
- Nuxt 3 for SSR/SSG
- Vite for development

### 3. Angular Development

**Angular (17+)**:
- Standalone components
- Signals for reactivity
- Dependency injection
- Services and providers
- RxJS observables
- Reactive forms

**Angular Patterns**:
- Smart vs dumb components
- Observable data services
- Async pipe usage
- OnPush change detection
- Directive composition
- Content projection

**Angular Ecosystem**:
- Angular Router
- NgRx for state management
- Angular Material UI library
- HttpClient and interceptors

### 4. TypeScript

**Type System**:
- Interfaces and types
- Generics for reusable types
- Union and intersection types
- Type guards and type narrowing
- Utility types (Partial, Pick, Omit, Record)
- Mapped types and conditional types

**Advanced TypeScript**:
- Discriminated unions
- Template literal types
- Type inference
- Branded types
- Type-safe API clients
- Strict mode configuration

### 5. Forms and Validation

**Form Handling**:
- Controlled components
- Form libraries (React Hook Form, Formik, Vee-Validate)
- Custom validation logic
- Async validation (API checks)
- Field-level vs form-level validation
- Error message display

**Form Patterns**:
- Multi-step forms (wizards)
- Dynamic form fields
- Auto-save drafts
- Form state persistence
- Optimistic updates
- File uploads with progress

### 6. Data Fetching

**API Integration**:
- Fetch API and Axios
- React Query / TanStack Query
- SWR (stale-while-revalidate)
- Apollo Client for GraphQL
- Error handling and retry logic
- Request cancellation

**Data Fetching Patterns**:
- Suspense for data fetching
- Parallel requests
- Dependent queries
- Polling and real-time updates
- Infinite scrolling / pagination
- Prefetching and caching

### 7. Styling Solutions

**CSS-in-JS**:
- styled-components
- Emotion
- Vanilla Extract (zero-runtime)
- Panda CSS (type-safe)

**Utility-First CSS**:
- TailwindCSS best practices
- Custom Tailwind plugins
- JIT mode optimization
- Responsive design utilities

**CSS Modules**:
- Scoped styles
- Composition
- Typed CSS Modules

**Modern CSS**:
- CSS Variables (custom properties)
- Container Queries (`@container`) and container query units (`cqi`, `cqb`)
- CSS Grid and Flexbox
- Logical properties for i18n
- CSS Nesting (native, no preprocessor required)
- `@layer` for cascade control and specificity management
- `@scope` for scoped styles
- `color-mix()` and relative color syntax
- View Transitions API for page transitions

**Modern CSS Patterns**:
```css
/* Container queries — responsive based on parent, not viewport */
.card-container {
  container-type: inline-size;
  container-name: card;
}
@container card (min-width: 400px) {
  .card { flex-direction: row; }
}

/* CSS nesting — native, no Sass needed */
.nav {
  background: var(--surface);

  & a {
    color: var(--text);

    &:hover {
      color: var(--primary);
    }
  }

  @media (width < 768px) {
    flex-direction: column;
  }
}

/* @layer for cascade control */
@layer reset, base, components, utilities;

@layer components {
  .btn { padding: 0.5rem 1rem; border-radius: 0.25rem; }
}
@layer utilities {
  .p-4 { padding: 1rem; }  /* always wins over components */
}
```

### 8. Performance Optimization

**Rendering Performance**:
- Code splitting (React.lazy, dynamic imports)
- Route-based splitting
- Component-level splitting
- Virtualization for large lists (react-window)
- Debouncing and throttling
- Memoization strategies

**Bundle Optimization**:
- Tree shaking unused code
- Dynamic imports for heavy libraries
- Preloading critical resources
- Lazy loading images
- Font optimization
- Asset compression

**Runtime Performance**:
- Avoiding unnecessary re-renders
- Web Workers for heavy computation
- Service Workers for caching
- IndexedDB for offline storage
- Request batching

### 9. Testing

**Unit Testing**:
- Vitest or Jest
- React Testing Library
- Vue Testing Library
- Testing user interactions
- Mocking API calls (MSW)
- Snapshot testing

**Integration Testing**:
- Testing component integration
- Form submission flows
- Navigation testing
- API integration tests

**E2E Testing**:
- Playwright for E2E
- Cypress for component tests
- Visual regression testing
- Accessibility testing (axe)

### 10. Accessibility (a11y)

**Core Principles**:
- Semantic HTML
- ARIA labels and roles
- Keyboard navigation
- Focus management
- Skip links
- Screen reader compatibility

**WCAG Compliance**:
- Color contrast (AA/AAA)
- Text alternatives for images
- Form labels and error messages
- Landmark regions
- Heading hierarchy
- Link purpose

### 11. Security

**Frontend Security**:
- XSS prevention (sanitization)
- CSRF protection
- Content Security Policy (CSP)
- Secure authentication flows
- JWT handling
- Input validation
- Dependency audits

### 12. Developer Experience

**Build Tools**:
- Vite for fast development
- Webpack for complex builds
- Turbopack (Next.js)
- esbuild for speed

**Code Quality**:
- ESLint configuration
- Prettier for formatting
- TypeScript strict mode
- Husky for Git hooks
- Lint-staged for pre-commit

**Debugging**:
- React DevTools / Vue DevTools
- Browser DevTools profiling
- Source maps
- Error tracking (Sentry)
- Performance profiling

## Common Tasks

### Create Component
```typescript
// React functional component with TypeScript
interface ButtonProps {
  variant?: 'primary' | 'secondary';
  size?: 'sm' | 'md' | 'lg';
  onClick?: () => void;
  children: React.ReactNode;
}

export const Button: React.FC<ButtonProps> = ({
  variant = 'primary',
  size = 'md',
  onClick,
  children,
}) => {
  return (
    <button
      className={`btn btn-${variant} btn-${size}`}
      onClick={onClick}
    >
      {children}
    </button>
  );
};
```

### Custom Hook
```typescript
// Reusable data fetching hook
function useApi<T>(url: string) {
  const [data, setData] = useState<T | null>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<Error | null>(null);

  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await fetch(url);
        const json = await response.json();
        setData(json);
      } catch (err) {
        setError(err as Error);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, [url]);

  return { data, loading, error };
}
```

### Form Handling
```typescript
// React Hook Form example
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { z } from 'zod';

const schema = z.object({
  email: z.string().email(),
  password: z.string().min(8),
});

type FormData = z.infer<typeof schema>;

function LoginForm() {
  const { register, handleSubmit, formState: { errors } } = useForm<FormData>({
    resolver: zodResolver(schema),
  });

  const onSubmit = (data: FormData) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register('email')} />
      {errors.email && <span>{errors.email.message}</span>}

      <input type="password" {...register('password')} />
      {errors.password && <span>{errors.password.message}</span>}

      <button type="submit">Login</button>
    </form>
  );
}
```

### State Management (Zustand)
```typescript
import create from 'zustand';

interface Store {
  count: number;
  increment: () => void;
  decrement: () => void;
  reset: () => void;
}

const useStore = create<Store>((set) => ({
  count: 0,
  increment: () => set((state) => ({ count: state.count + 1 })),
  decrement: () => set((state) => ({ count: state.count - 1 })),
  reset: () => set({ count: 0 }),
}));
```

## Best Practices

1. **Type Everything**: Use TypeScript strict mode
2. **Component Size**: Keep components small and focused
3. **Naming**: Use descriptive, consistent names
4. **Accessibility**: Build with a11y from the start
5. **Performance**: Optimize for Core Web Vitals
6. **Testing**: Write tests for critical paths
7. **Code Splitting**: Split by routes and heavy components
8. **Error Handling**: Implement Error Boundaries
9. **Documentation**: Comment complex logic, document APIs
10. **Security**: Sanitize user input, validate data
11. **Demo-Ready Output**: Every page must render without visual bugs — no `$NaN`, no "No image" boxes, no raw `undefined`

## Data Display & Formatting (MANDATORY)

Never display raw, unformatted, or potentially-null data to users:

```typescript
// Prices — ALWAYS use Intl.NumberFormat, NEVER raw template literals
// BAD:  `$${product.price}` → shows "$NaN" if price is undefined
// GOOD: formatPrice(product.price)
export function formatPrice(cents: number | null | undefined, currency = 'USD'): string {
  if (cents == null || isNaN(cents)) return 'Price unavailable';
  return new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(cents / 100);
}

// Dates — ALWAYS use Intl.DateTimeFormat
export function formatDate(date: string | Date | null | undefined): string {
  if (!date) return '';
  const d = new Date(date);
  if (isNaN(d.getTime())) return '';
  return new Intl.DateTimeFormat('en-US', { dateStyle: 'medium' }).format(d);
}
```

**Images**: Never show "No image" text or broken icons. Use placeholder services:
- Products: `https://picsum.photos/seed/{slug}/600/400`
- Avatars: `https://i.pravatar.cc/150?u={id}`
- Custom: invoke `/sw-media:image` for AI-generated visuals

## Figma Integration

For Figma design-to-code workflows, design tokens, and Code Connect, use the **figma** skill (`/sw-frontend:figma`).

## Tools and Libraries

**React Ecosystem**:
- React Query for server state
- Zustand for client state
- React Hook Form for forms
- Framer Motion for animations
- React Router for routing

**Vue Ecosystem**:
- Pinia for state
- VueUse for composables
- Vee-Validate for forms
- Vue Router for routing

**Common Tools**:
- TypeScript for type safety
- Vite for development
- Vitest for testing
- ESLint + Prettier for code quality
- Storybook for component docs

You are ready to build modern, performant, accessible frontend applications!

