# System Architecture Documentation

## Overview
ThrillWiki is a Django-based web platform built with a modular architecture focusing on theme park information management, user reviews, and content moderation.

## Technology Stack

### Backend
- **Framework**: Django 5.1.6
- **API**: Django REST Framework 3.15.2
- **WebSocket Support**: Channels 4.2.0 with Redis
- **Authentication**: django-allauth, OAuth Toolkit
- **Database**: PostgreSQL with django-pghistory

### Frontend
- **Templating**: Django Templates
- **CSS Framework**: Tailwind CSS
- **Enhancement**: HTMX, JavaScript
- **Asset Management**: django-webpack-loader

### Infrastructure
- **Static Files**: WhiteNoise 6.9.0
- **Media Storage**: Local filesystem with custom storage backends
- **Caching**: Redis (shared with WebSocket layer)

## System Components

### Core Applications

1. **Parks Module**
   - Park information management
   - Geographic data handling
   - Operating hours tracking
   - Integration with location services

2. **Rides Module**
   - Ride specifications
   - Manufacturer/Designer attribution
   - Historical data tracking
   - Technical details management

3. **Reviews System**
   - User-generated content
   - Media attachments
   - Rating framework
   - Integration with moderation

4. **Moderation System**
   - Content review workflow
   - Quality control mechanisms
   - User management
   - Verification processes

5. **Companies Module**
   - Company profiles
   - Verification system
   - Official update management
   - Park operator features

### Service Layer

1. **Authentication Service**
   ```python
   # Key authentication flows
   User Authentication → JWT Token → Protected Resources
   Social Auth → Profile Creation → Platform Access
   ```

2. **Media Service**
   ```python
   # Media handling workflow
   Upload → Processing → Storage → Delivery
   ```

3. **Analytics Service**
   ```python
   # Analytics pipeline
   User Action → Event Tracking → Processing → Insights
   ```

## Data Flow Architecture

```
┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   Client    │ ──→ │   Django     │ ──→ │  Database   │
│   Browser   │ ←── │   Server     │ ←── │  (Postgres) │
└─────────────┘     └──────────────┘     └─────────────┘
                          ↑ ↓
                    ┌──────────────┐
                    │   Services   │
                    │  (Redis/S3)  │
                    └──────────────┘
```

## Security Architecture

1. **Authentication Flow**
   - JWT-based authentication
   - Social authentication integration
   - Session management
   - Permission-based access control

2. **Data Protection**
   - Input validation
   - XSS prevention
   - CSRF protection
   - SQL injection prevention

## Deployment Model

### Production Environment
```
├── Application Server (Daphne/ASGI)
├── Database (PostgreSQL)
├── Cache/Message Broker (Redis)
├── Static Files (WhiteNoise)
└── Media Storage (Filesystem/S3)
```

### Development Environment
```
├── Local Django Server
├── Local PostgreSQL
├── Local Redis
└── Local File Storage
```

## Monitoring and Scaling

1. **Performance Monitoring**
   - Page load metrics
   - Database query analysis
   - Cache hit rates
   - API response times

2. **Scaling Strategy**
   - Horizontal scaling of web servers
   - Database read replicas
   - Cache layer expansion
   - Media CDN integration

## Search Architecture

### Search Infrastructure
- **Base Pattern**: [`BaseAutocomplete`](core/forms.py:1) provides authentication-first autocomplete foundation
- **Park Search**: [`ParkAutocomplete`](search/mixins.py:1) + [`ParkSearchForm`](search/forms.py:1) with HTMX integration
- **Ride Search**: Planned extension following same pattern with park relationship context

### Search Components
1. **Autocomplete Layer**
   - Authentication requirement enforced at base level
   - Query limiting (10 results) for performance
   - HTMX-driven real-time suggestions

2. **Form Layer**
   - Django forms with autocomplete widgets
   - Filter integration for advanced search
   - Clean validation and error handling

3. **Frontend Integration**
   - HTMX for dynamic updates (`hx-get`, `hx-trigger`)
   - AlpineJS for local state management
   - Tailwind CSS for consistent styling

### Database Optimization
- Indexes on searchable fields (`name`, foreign keys)
- `select_related()` for relationship queries
- Query result limiting for performance

## Integration Points

1. **External Services**
   - Email service (ForwardEmail.net)
   - Social authentication providers
   - Geographic data services
   - Media processing services

2. **Internal Services**
   - WebSocket notifications
   - Background tasks
   - Media processing
   - Analytics processing

## System Requirements

### Minimum Requirements
- Python 3.11+
- PostgreSQL 13+
- Redis 6+
- Node.js 18+ (for frontend builds)

### Development Tools
- black (code formatting)
- flake8 (linting)
- pytest (testing)
- tailwind CLI (CSS processing)