6.2 KiB
6.2 KiB
System Patterns: OCD Website
Architecture Patterns
Component Architecture
-
Atomic Design Methodology
- Atoms: Basic building blocks (buttons, inputs, icons)
- Molecules: Simple groups of UI elements (form fields, cards)
- Organisms: Complex UI components (navigation, forms)
- Templates: Page layouts without specific content
- Pages: Templates with real content
-
File Organization
- Components grouped by type (atoms, molecules, organisms)
- Pages in Next.js app directory structure
- Shared utilities in separate folders
- Clear separation between frontend and backend
State Management
- React Context API for global state
- Authentication context for user sessions
- UI context for theme and preferences
- Toast notification context for system messages
- Local component state for UI-specific state
- Form state handled with controlled components
- API state managed with custom hooks
Data Flow Patterns
- Unidirectional data flow
- Props down, events up
- Context providers at appropriate levels
- Container/Presenter pattern
- Container components handle data fetching and state
- Presenter components are pure rendering functions
- Custom hooks for reusable logic
- useAuth for authentication
- useFetch for data fetching
- useForm for form handling
Frontend Patterns
Styling Approach
- Utility-first CSS with Tailwind
- Consistent design tokens through Tailwind config
- Custom utilities for project-specific needs
- Component classes for common patterns
- CSS variables for theming
- Core colors defined as CSS variables
- Dark mode implementation using CSS variables
- Responsive design using Tailwind breakpoints
- Component-specific styles when needed
- Modules used for complex styling needs
- Animation styles with Framer Motion
Responsive Design
- Mobile-first approach
- Default styles for mobile
- Progressive enhancement for larger screens
- Breakpoint system
- sm: 640px and up
- md: 768px and up
- lg: 1024px and up
- xl: 1280px and up
- 2xl: 1536px and up
- Flexible layouts
- CSS Grid for page layouts
- Flexbox for component layouts
Form Handling
- Controlled components for form inputs
- Field validation with client-side validation
- Error handling with inline error messages
- Form submission with loading states
- Accessibility considerations
- Proper labeling
- Error association
- Keyboard navigation
Routing
- Next.js App Router
- File-based routing for pages
- Dynamic routes for entity details
- Route groups for organization
- Layouts for shared UI elements
- Protected routes for admin sections
- Auth middleware
- Redirect to login if unauthorized
Backend Patterns
API Design
- RESTful endpoints
- Resource-based URLs
- Appropriate HTTP methods
- Consistent response format
- Status codes for error handling
- Controller pattern
- Route handlers for request parsing
- Controllers for business logic
- Services for reusable operations
- Models for data access
Authentication
- JWT-based authentication
- JWTs stored in HTTP-only cookies
- Short expiration with refresh tokens
- CSRF protection with tokens
- Permission-based authorization
- Role-based access control
- Resource ownership checks
- Fine-grained permissions
Error Handling
- Centralized error handling middleware
- Consistent error format
- Appropriate status codes
- Detailed error messages in development
- Sanitized messages in production
- Try/catch blocks for async operations
- Validation errors for input validation
Database Patterns
Schema Design
- Document-based design for MongoDB
- Embedded documents for related data
- References for shared entities
- Denormalization for performance
- Validation schemas with Mongoose
- Required fields
- Field types and constraints
- Custom validators
- Indexes for frequently queried fields
Query Patterns
- Repository pattern for data access
- Encapsulated database operations
- Reusable query methods
- Consistent error handling
- Pagination for large collections
- Limit/skip approach
- Cursor-based pagination for efficiency
- Filtering with query parameters
- Dynamic filter building
- Validation of filter parameters
Testing Patterns
Unit Testing
- Component testing with React Testing Library
- Component rendering
- User interactions
- State changes
- Hook testing with custom test utilities
- Service testing for business logic
Integration Testing
- API endpoint testing
- Request validation
- Response structure
- Error handling
- Database interaction testing
- Create, read, update, delete operations
- Schema validation
- Indexing performance
End-to-End Testing
- User flow testing
- Critical user journeys
- Form submissions
- Authentication flows
- Accessibility testing
- Automated a11y checks
- Manual screen reader testing
- Keyboard navigation testing
Deployment Patterns
Docker Containerization
- Multi-stage builds for production
- Build stage for dependencies and compilation
- Production stage for runtime
- Minimal production image
- Docker Compose for local development
- Service definitions
- Volume mappings
- Network configuration
Environment Configuration
- Environment-specific variables
- Development settings
- Production settings
- Testing settings
- Secret management
- Environment variables for sensitive data
- Docker secrets for production
Accessibility Patterns
WCAG 2.2 Compliance
- Semantic HTML
- Proper heading hierarchy
- Meaningful element choices
- Landmark regions
- ARIA attributes when needed
- Role definitions
- State indications
- Relationship attributes
- Keyboard navigation
- Focus management
- Logical tab order
- Skip links
- Screen reader support
- Alt text for images
- Descriptive link text
- Status announcements
- Color contrast
- Meeting WCAG AA contrast ratios
- Not relying on color alone
- Motion sensitivity
- Respecting reduced motion preferences
- Careful use of animations