3 KiB
3 KiB
System Patterns - Architecture & Design
Overall Architecture
- Framework: Next.js 15+ with App Router
- Language: TypeScript for type safety
- Styling: Tailwind CSS for responsive design
- Deployment: Docker containerization (dev and production)
Key Technical Decisions
Frontend Architecture
- App Router: Uses Next.js App Router for file-based routing
- Component Structure: Organized by feature and shared components
- State Management: React hooks and context providers
- Animations: Framer Motion for smooth UI transitions
- Icons: Lucide React and React Icons
Backend Architecture
- API Routes: Next.js API routes for server-side functionality
- Email Service: Nodemailer with Gmail SMTP integration
- Rate Limiting: Upstash Redis for distributed rate limiting
- Validation: Custom input validation and sanitization
Security Patterns
- Input Sanitization: XSS prevention through input cleaning
- Rate Limiting: IP-based request limiting to prevent abuse
- Environment Variables: Sensitive data stored in environment variables
- Validation: Multi-layer validation (client and server-side)
Directory Structure Patterns
src/
├── app/ # Next.js App Router pages
│ ├── api/ # API route handlers
│ ├── [page]/ # Individual page routes
├── components/ # React components
│ ├── home/ # Home page specific components
│ ├── layout/ # Layout components (Header, Footer, Nav)
│ ├── providers/ # Context providers
│ ├── shared/ # Reusable components
│ └── ui/ # Basic UI components
├── data/ # Static data and configurations
├── lib/ # Utility functions and configurations
├── styles/ # Global styles
└── types/ # TypeScript type definitions
Component Patterns
- Separation of Concerns: UI components separate from business logic
- Reusability: Shared components in dedicated directories
- Type Safety: TypeScript interfaces for all component props
- Responsive Design: Mobile-first approach with Tailwind CSS
API Patterns
- RESTful Design: Standard HTTP methods and status codes
- Error Handling: Consistent error response format
- Validation: Input validation before processing
- Rate Limiting: Applied to all public API endpoints
Email System Patterns
- Transporter Configuration: Reusable SMTP configuration
- Template System: HTML email templates with inline styles
- Error Handling: Graceful failure handling with user feedback
- Environment Configuration: SMTP settings via environment variables
Development Patterns
- Docker: Containerized development and production environments
- Package Management: PNPM for efficient dependency management
- Code Quality: ESLint for code consistency
- Type Safety: Strict TypeScript configuration