1.7 KiB
1.7 KiB
Component System Architecture
Neo-Brutalism Design Principles
Visual Identity:
- Sharp corners (0px radius) - no rounded edges
- Bold borders (4px solid shadows) for depth
- High contrast colors with hard edges
- Gold (#FFD700) primary, Orange (#ff6f00) secondary
- Space Mono headings, Inter body text
Component Styling:
// Base button pattern - no border-radius, hard shadows
className="border-4 border-black shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]
hover:translate-x-1 hover:translate-y-1 hover:shadow-[2px_2px_0px_0px_rgba(0,0,0,1)]"
Component Organization
src/components/
├── layout/ # Layout primitives (Header, Footer, AnnouncementBar)
├── locale/ # I18n utilities (LocaleSwitcher)
├── project/ # Project-specific components (ProjectCard, ProjectDetail)
├── search/ # Search functionality (SearchBar)
└── ui/ # Base UI components (Button, Card, Badge)
Component Patterns
Composition Pattern
- Build complex components from small reusable primitives
- Example:
ProjectCard=Card+Badge+ExternalLink
Server Components First
- Default to Server Components for data fetching
- Use Client Components (
"use client") only for interactivity - Pass server data via props to client components
Responsive Design
- Mobile-first Tailwind classes:
grid-cols-1 md:grid-cols-2 lg:grid-cols-3 - Breakpoints: md (768px), lg (1024px)
Accessibility
- Semantic HTML elements
- Keyboard navigation support
- ARIA labels where needed
State Management
- Server state: Prisma queries in Server Components
- Client state: React hooks (useState, useEffect) for interactivity
- Global state: Context providers for locale, theme