mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 05:51:08 -05:00
Add initial ThrillWiki context configuration with project overview, technology stack, domain architecture, and development standards
This commit is contained in:
212
.clinerules/thrillwiki-context.xml
Normal file
212
.clinerules/thrillwiki-context.xml
Normal file
@@ -0,0 +1,212 @@
|
||||
<thrillwiki_context>
|
||||
<!-- Core Project Information -->
|
||||
<project_overview>
|
||||
<name>ThrillWiki</name>
|
||||
<description>Comprehensive theme park database platform with user-generated content, expert moderation, and rich media support</description>
|
||||
<framework>Django REST Framework</framework>
|
||||
<api_endpoints>120+</api_endpoints>
|
||||
<primary_entities>
|
||||
<entity>Parks</entity>
|
||||
<entity>Rides</entity>
|
||||
<entity>Companies</entity>
|
||||
<entity>Users</entity>
|
||||
</primary_entities>
|
||||
</project_overview>
|
||||
|
||||
<!-- Technology Stack -->
|
||||
<tech_stack>
|
||||
<backend>
|
||||
<framework>Django 5.0+</framework>
|
||||
<api>Django REST Framework</api>
|
||||
<database>PostgreSQL with PostGIS</database>
|
||||
<caching>Redis</caching>
|
||||
<task_queue>Celery</task_queue>
|
||||
</backend>
|
||||
<frontend>
|
||||
<constraint>NO React/Vue/Angular allowed</constraint>
|
||||
<technologies>
|
||||
<tech name="HTMX" purpose="Dynamic updates"/>
|
||||
<tech name="AlpineJS" purpose="Client-side state management"/>
|
||||
<tech name="Tailwind CSS" purpose="Styling"/>
|
||||
<tech name="Django-Cotton" purpose="Component system"/>
|
||||
</technologies>
|
||||
</frontend>
|
||||
<media>
|
||||
<service>Cloudflare Images</service>
|
||||
<method>Direct Upload with variants and transformations</method>
|
||||
</media>
|
||||
<tracking>
|
||||
<system>pghistory for all model changes</system>
|
||||
<base_class>TrackedModel</base_class>
|
||||
</tracking>
|
||||
</tech_stack>
|
||||
|
||||
<!-- Domain Architecture -->
|
||||
<domain_structure>
|
||||
<domain name="parks">
|
||||
<path>parks/</path>
|
||||
<companies>
|
||||
<allowed_roles>
|
||||
<role>OPERATOR</role>
|
||||
<role>PROPERTY_OWNER</role>
|
||||
</allowed_roles>
|
||||
</companies>
|
||||
</domain>
|
||||
<domain name="rides">
|
||||
<path>rides/</path>
|
||||
<companies>
|
||||
<allowed_roles>
|
||||
<role>MANUFACTURER</role>
|
||||
<role>DESIGNER</role>
|
||||
</allowed_roles>
|
||||
</companies>
|
||||
</domain>
|
||||
<core_apps>
|
||||
<app>accounts/</app>
|
||||
<app>media/</app>
|
||||
<app>moderation/</app>
|
||||
<app>core/</app>
|
||||
</core_apps>
|
||||
<critical_rules>
|
||||
<rule>NEVER mix park/ride company roles - fundamental business rule</rule>
|
||||
</critical_rules>
|
||||
</domain_structure>
|
||||
|
||||
<!-- Development Patterns -->
|
||||
<development_patterns>
|
||||
<models>
|
||||
<base_class>TrackedModel (all models inherit)</base_class>
|
||||
<slug_handling>SluggedModel for slugs with history</slug_handling>
|
||||
</models>
|
||||
<api_design>
|
||||
<url_structure>Nested URLs (/parks/{slug}/rides/{slug}/)</url_structure>
|
||||
<trailing_slash>Mandatory trailing slashes</trailing_slash>
|
||||
</api_design>
|
||||
<choices>
|
||||
<system>RichChoiceField with metadata</system>
|
||||
<metadata>color, icon, description, css_class</metadata>
|
||||
<forbidden>NEVER use Django tuple choices</forbidden>
|
||||
</choices>
|
||||
<media_handling>
|
||||
<field_type>CloudflareImagesField</field_type>
|
||||
<features>photo types and attribution</features>
|
||||
</media_handling>
|
||||
<location>
|
||||
<system>PostGIS for geographic data</system>
|
||||
<structure>separate location models</structure>
|
||||
</location>
|
||||
</development_patterns>
|
||||
|
||||
<!-- Development Commands -->
|
||||
<commands>
|
||||
<server>
|
||||
<command>uv run manage.py runserver_plus</command>
|
||||
<forbidden>python manage.py</forbidden>
|
||||
</server>
|
||||
<migrations>
|
||||
<make>uv run manage.py makemigrations</make>
|
||||
<apply>uv run manage.py migrate</apply>
|
||||
</migrations>
|
||||
<packages>
|
||||
<install>uv add <package></install>
|
||||
<forbidden>pip install</forbidden>
|
||||
</packages>
|
||||
<management>
|
||||
<pattern>Always use `uv run manage.py <command>`</pattern>
|
||||
</management>
|
||||
</commands>
|
||||
|
||||
<!-- API Rules and Standards -->
|
||||
<api_standards>
|
||||
<authentication>
|
||||
<type>Token-based</type>
|
||||
<role_hierarchy>
|
||||
<role level="1">USER</role>
|
||||
<role level="2">MODERATOR</role>
|
||||
<role level="3">ADMIN</role>
|
||||
<role level="4">SUPERUSER</role>
|
||||
</role_hierarchy>
|
||||
</authentication>
|
||||
<filtering>
|
||||
<rides>25+ parameters</rides>
|
||||
<parks>15+ parameters</parks>
|
||||
</filtering>
|
||||
<responses>
|
||||
<pagination>Standard DRF pagination</pagination>
|
||||
<errors>Rich error responses with details</errors>
|
||||
</responses>
|
||||
<caching>
|
||||
<levels>Multi-level (Redis, CDN, browser)</levels>
|
||||
<invalidation>Signal-based invalidation</invalidation>
|
||||
</caching>
|
||||
<data_policy>
|
||||
<rule>NEVER MOCK DATA - All responses must use real database queries</rule>
|
||||
</data_policy>
|
||||
</api_standards>
|
||||
|
||||
<!-- Rich Choice Objects System (MANDATORY) -->
|
||||
<rich_choices>
|
||||
<implementation>
|
||||
<field_usage>RichChoiceField(choice_group="group_name", domain="domain_name")</field_usage>
|
||||
<definition_location>domain-specific choices.py using RichChoice dataclass</definition_location>
|
||||
<registration>register_choices() function in domain __init__.py</registration>
|
||||
</implementation>
|
||||
<required_metadata>
|
||||
<metadata>color</metadata>
|
||||
<metadata>icon</metadata>
|
||||
<metadata>description</metadata>
|
||||
<metadata>css_class</metadata>
|
||||
</required_metadata>
|
||||
<forbidden>
|
||||
<rule>NO tuple-based choices allowed anywhere in codebase</rule>
|
||||
</forbidden>
|
||||
</rich_choices>
|
||||
|
||||
<!-- Frontend Constraints -->
|
||||
<frontend_constraints>
|
||||
<architecture>
|
||||
<htmx>Dynamic updates</htmx>
|
||||
<alpinejs>Client state management</alpinejs>
|
||||
<tailwind>Styling framework</tailwind>
|
||||
</architecture>
|
||||
<approach>Progressive enhancement required</approach>
|
||||
<browser_support>Latest 2 versions of major browsers</browser_support>
|
||||
<performance_targets>
|
||||
<fcp>First Contentful Paint < 1.5s</fcp>
|
||||
<tti>Time to Interactive < 2s</tti>
|
||||
<compliance>Core Web Vitals compliance</compliance>
|
||||
</performance_targets>
|
||||
</frontend_constraints>
|
||||
|
||||
<!-- Code Quality Standards -->
|
||||
<code_standards>
|
||||
<model_inheritance>All models must inherit from TrackedModel</model_inheritance>
|
||||
<slug_management>Use SluggedModel for entities with slugs and history tracking</slug_management>
|
||||
<choice_fields>Always use RichChoiceField instead of Django choices</choice_fields>
|
||||
<api_urls>Must include trailing slashes and follow nested pattern</api_urls>
|
||||
<media_fields>Use CloudflareImagesField for all image handling</media_fields>
|
||||
<geographic_data>Use PostGIS fields and separate location models</geographic_data>
|
||||
</code_standards>
|
||||
|
||||
<!-- Business Rules -->
|
||||
<business_rules>
|
||||
<company_roles>
|
||||
<rule>Parks domain: Only OPERATOR and PROPERTY_OWNER roles</rule>
|
||||
<rule>Rides domain: Only MANUFACTURER and DESIGNER roles</rule>
|
||||
<rule>CRITICAL: Never allow cross-domain company roles</rule>
|
||||
</company_roles>
|
||||
<data_integrity>
|
||||
<rule>All model changes must be tracked via pghistory</rule>
|
||||
<rule>All API responses must use real database data</rule>
|
||||
<rule>Geographic data must use PostGIS for accuracy</rule>
|
||||
</data_integrity>
|
||||
</business_rules>
|
||||
|
||||
<!-- Development Workflow -->
|
||||
<workflow>
|
||||
<package_management>Use uv for all Python package operations</package_management>
|
||||
<server_management>Use runserver_plus for enhanced development server</server_management>
|
||||
<database_management>Always use uv run for Django management commands</database_management>
|
||||
<testing>All functionality must work with progressive enhancement</testing>
|
||||
</workflow>
|
||||
</thrillwiki_context>
|
||||
Reference in New Issue
Block a user