# System Patterns ## Architectural Patterns ### MVT Implementation 1. Models - Use abstract base classes for common fields - Implement custom model managers for complex queries - Define clear relationships and constraints - Include field-level validation 2. Views - Prefer class-based views - Use mixins for shared functionality - Implement proper permission checks - Handle HTMX requests explicitly 3. Templates - Maintain hierarchy with base templates - Use partial templates for HTMX responses - Implement component-based structure - Follow progressive enhancement ## Design Patterns ### Data Access 1. Query Patterns - Use select_related() for foreign keys - Implement prefetch_related() for reverse relationships - Create custom model managers - Optimize database queries 2. Caching Strategy - Cache template fragments - Implement model-level caching - Use Redis for session storage - Cache invalidation rules ### Historical Tracking - All model changes create immutable pghistory events - Events contain: - Full object state snapshot - Contextual metadata (user, request fingerprint) - Semantic event label (created, updated, deleted) - Middleware integration: ```python # core/middleware.py pghistory.context(lambda request: { 'user': str(request.user) if request.user.is_authenticated else None, 'ip': request.META.get('REMOTE_ADDR'), 'user_agent': request.META.get('HTTP_USER_AGENT') }) ``` ## Frontend Patterns 1. HTMX Integration ```html
``` 2. AlpineJS Components ```html
``` 3. Tailwind Components ```html
``` ## Authentication Patterns ### User Management 1. Custom User Model - Extended user profiles - Role-based permissions - Activity tracking - Profile customization 2. Authentication Flow - Login/registration process - Password reset workflow - Email verification - Session management ## Content Management ### Moderation Flow 1. Submission Process - Content validation - Automatic checks - Manual review queue - Approval workflow 2. Review System - Rating framework - Media handling - User verification - Content filtering ## Error Handling ### Backend Errors 1. Exception Handling ```python try: # Operation except SpecificException as e: # Specific handling except Exception as e: # Generic handling ``` 2. Response Patterns ```python # Success Response return JsonResponse({'status': 'success', 'data': data}) # Error Response return JsonResponse({'status': 'error', 'message': str(e)}) ``` ### Frontend Errors 1. User Feedback - Toast notifications - Inline validation - Form feedback - Error states ## Testing Patterns ### Unit Tests ```python class ModelTests(TestCase): def setUp(self): # Test setup def test_specific_functionality(self): # Test implementation ``` ### Integration Tests ```python class ViewTests(TestCase): def setUp(self): self.client = Client() def test_view_functionality(self): # Test implementation ``` ## Development Workflows ### Package Management IMPORTANT: When adding Python packages to the project, only use UV: ```bash uv add ``` Do not attempt to install packages using any other method (pip, poetry, etc.). ### Development Server Management Server Startup Process IMPORTANT: Always execute the following command exactly as shown to start the development server: ```bash lsof -ti :8000 | xargs kill -9; find . -type d -name "__pycache__" -exec rm -r {} +; uv run manage.py tailwind runserver ``` Note: These steps must be executed in this exact order as a single command to ensure consistent behavior. ### Feature Development 1. Planning - Technical specification - Component design - Database schema - API endpoints 2. Implementation - Model creation - View implementation - Template design - Testing coverage 3. Review Process - Code review - Testing verification - Documentation update - Deployment planning