ThrillWiki Comprehensive theme park database platform with user-generated content, expert moderation, and rich media support Django REST Framework 120+ Parks Rides Companies Users Django 5.0+ Django REST Framework PostgreSQL with PostGIS Redis Celery NO React/Vue/Angular allowed Cloudflare Images Direct Upload with variants and transformations pghistory for all model changes TrackedModel parks/ OPERATOR PROPERTY_OWNER rides/ MANUFACTURER DESIGNER accounts/ media/ moderation/ core/ NEVER mix park/ride company roles - fundamental business rule TrackedModel (all models inherit) SluggedModel for slugs with history Nested URLs (/parks/{slug}/rides/{slug}/) Mandatory trailing slashes RichChoiceField with metadata color, icon, description, css_class NEVER use Django tuple choices CloudflareImagesField photo types and attribution PostGIS for geographic data separate location models uv run manage.py runserver_plus python manage.py uv run manage.py makemigrations uv run manage.py migrate uv add <package> pip install Always use `uv run manage.py <command>` Token-based USER MODERATOR ADMIN SUPERUSER 25+ parameters 15+ parameters Standard DRF pagination Rich error responses with details Multi-level (Redis, CDN, browser) Signal-based invalidation NEVER MOCK DATA - All responses must use real database queries RichChoiceField(choice_group="group_name", domain="domain_name") domain-specific choices.py using RichChoice dataclass register_choices() function in domain __init__.py color icon description css_class NO tuple-based choices allowed anywhere in codebase Dynamic updates Client state management Styling framework Progressive enhancement required Latest 2 versions of major browsers First Contentful Paint < 1.5s Time to Interactive < 2s Core Web Vitals compliance All models must inherit from TrackedModel Use SluggedModel for entities with slugs and history tracking Always use RichChoiceField instead of Django choices Must include trailing slashes and follow nested pattern Use CloudflareImagesField for all image handling Use PostGIS fields and separate location models Parks domain: Only OPERATOR and PROPERTY_OWNER roles Rides domain: Only MANUFACTURER and DESIGNER roles CRITICAL: Never allow cross-domain company roles All model changes must be tracked via pghistory All API responses must use real database data Geographic data must use PostGIS for accuracy Use uv for all Python package operations Use runserver_plus for enhanced development server Always use uv run for Django management commands All functionality must work with progressive enhancement ALWAYS use Context7 MCP for documentation lookups before making changes Use for CSS utility classes, responsive design, and component styling Use for models, views, forms, URL patterns, and Django-specific patterns Use for component creation, template organization, and Cotton-specific syntax Use for dynamic updates, form handling, and AJAX interactions Use for client-side state management, reactive data, and JavaScript interactions Use for API design, serializers, viewsets, and DRF patterns Use for database queries, PostGIS functions, and advanced SQL features Use for geographic data handling and spatial queries Use for caching strategies, session management, and performance optimization Before editing/creating code: Query Context7 for relevant library documentation During debugging: Use Context7 to verify syntax, patterns, and best practices When implementing new features: Reference Context7 for current API and method signatures For performance issues: Consult Context7 for optimization techniques and patterns For geographic data handling: Use Context7 for PostGIS functions and best practices For caching strategies: Refer to Context7 for Redis patterns and best practices For database queries: Utilize Context7 for PostgreSQL best practices and advanced SQL features Creating new Django models or API endpoints Implementing HTMX dynamic functionality Writing AlpineJS reactive components Designing responsive layouts with Tailwind CSS Creating Django-Cotton components Debugging CSS, JavaScript, or Django issues Implementing caching or database optimizations Handling geographic data with PostGIS Utilizing Redis for session management Implementing real-time features with WebSockets Always call Context7:resolve-library-id first to get correct library ID Then use Context7:get-library-docs with appropriate topic parameter responsive design, flexbox, grid, animations models, views, forms, admin, signals components, templates, slots, props hx-get, hx-post, hx-swap, hx-trigger, hx-target x-data, x-show, x-if, x-for, x-model serializers, viewsets, routers, permissions joins, indexes, transactions, window functions geospatial queries, distance calculations, spatial indexes caching strategies, pub/sub, data structures