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