Files
thrillwiki_django_no_react/docs/README.md
pacnpal ca770d76ff Enhance documentation and management commands for ThrillWiki
- Updated backend README.md to include detailed management commands for configuration, database operations, cache management, data management, user authentication, content/media handling, trending/discovery, testing/development, and security/auditing.
- Added a new MANAGEMENT_COMMANDS.md file for comprehensive command reference.
- Included logging standardization details in architecture documentation (ADR-007).
- Improved production checklist with configuration validation and cache verification steps.
- Expanded API documentation to include error logging details.
- Created a documentation review checklist to ensure completeness and accuracy.
2025-12-23 21:28:14 -05:00

396 lines
11 KiB
Markdown

# ThrillWiki - Django + HTMX Application
A comprehensive theme park and roller coaster information system built with Django and HTMX, providing a progressive enhancement approach to modern web development.
## Architecture Overview
ThrillWiki is a **Django monolith with HTMX-driven interactivity**, not a traditional SPA. This architecture provides:
- **Server-side rendering** for SEO and initial page load performance
- **Progressive enhancement** with HTMX for dynamic updates without full page reloads
- **REST API** for programmatic access and potential mobile app integration
- **Alpine.js** for minimal client-side state (limited to form validation and UI toggles)
```
thrillwiki/
├── backend/ # Django application (main codebase)
│ ├── apps/ # Modular Django applications
│ │ ├── accounts/ # User management and authentication
│ │ ├── api/v1/ # REST API endpoints
│ │ ├── core/ # Shared utilities and base classes
│ │ ├── location/ # Geographic data and services
│ │ ├── media/ # File management (Cloudflare Images)
│ │ ├── moderation/ # Content moderation workflows
│ │ ├── parks/ # Theme park data and operations
│ │ └── rides/ # Ride information and relationships
│ ├── config/ # Django settings and configuration
│ │ ├── django/ # Environment-specific settings
│ │ └── settings/ # Modular settings modules
│ ├── templates/ # Django templates with HTMX
│ │ ├── components/ # Reusable UI components
│ │ ├── htmx/ # HTMX partial templates
│ │ └── layouts/ # Base layout templates
│ └── static/ # Static assets (CSS, JS, images)
├── shared/ # Shared resources
│ ├── scripts/ # Development and deployment scripts
│ └── media/ # Shared media files
├── architecture/ # Architecture documentation
├── docs/ # Project documentation
└── tests/ # Test files
```
## Technology Stack
| Technology | Version | Purpose |
|------------|---------|---------|
| **Django** | 5.2.8+ | Web framework |
| **Django REST Framework** | 3.15.2+ | API framework |
| **HTMX** | 1.20.0+ | Dynamic UI updates |
| **Alpine.js** | 3.x | Minimal client-side state |
| **Tailwind CSS** | 3.x | Utility-first styling |
| **PostgreSQL/PostGIS** | 14+ | Database with geospatial support |
| **Redis** | 6+ | Caching and sessions |
| **Celery** | 5.5+ | Background task processing |
| **UV** | Latest | Python package management |
## Quick Start
### Prerequisites
- **Python 3.13+** with [uv](https://docs.astral.sh/uv/) for package management
- **PostgreSQL 14+** with PostGIS extension
- **Redis 6+** for caching and sessions
### Development Setup
1. **Clone the repository**
```bash
git clone <repository-url>
cd thrillwiki
```
2. **Install dependencies**
```bash
cd backend
uv sync --frozen # Use locked versions for reproducibility
```
3. **Environment configuration**
```bash
cp .env.example .env
# Edit .env with your settings
```
4. **Database setup**
```bash
uv run manage.py migrate
uv run manage.py createsuperuser
```
5. **Start development server**
```bash
uv run manage.py runserver
```
The application will be available at `http://localhost:8000`.
## Project Structure Details
### Django Applications
| App | Description |
|-----|-------------|
| **accounts** | User authentication, profiles, preferences, and social auth |
| **api/v1** | RESTful API endpoints with OpenAPI documentation |
| **core** | Shared utilities, managers, middleware, and services |
| **location** | Geographic models, geocoding, and map services |
| **media** | Cloudflare Images integration and file management |
| **moderation** | Content review workflows and moderation queue |
| **parks** | Theme park models, views, and related operations |
| **rides** | Ride models, coaster statistics, and ride history |
### HTMX Patterns
ThrillWiki uses HTMX for server-driven interactivity:
- **Partial templates** (`*_partial.html`) for dynamic content updates
- **HX-Trigger** for cross-component communication
- **hx-indicator** with skeleton loaders for loading states
- **Field-level validation** via HTMX for form feedback
See [HTMX Patterns](./htmx-patterns.md) for detailed conventions.
### Hybrid API/HTML Endpoints
Many views serve dual purposes:
- **HTML response** for browser requests (template rendering)
- **JSON response** for API requests (DRF serialization)
This is achieved through content negotiation and hybrid view mixins.
## Development Workflow
### Running the Development Server
```bash
cd backend
uv run manage.py runserver
```
### Django Management Commands
```bash
# Database operations
uv run manage.py migrate
uv run manage.py makemigrations
uv run manage.py createsuperuser
# Static files
uv run manage.py collectstatic
# Validate configuration
uv run manage.py validate_settings
# Testing
uv run manage.py test
```
### Code Quality
```bash
# Format code
uv run black .
uv run isort .
# Lint code
uv run ruff check .
uv run flake8 .
# Type checking
uv run pyright
```
## Configuration
### Environment Variables
ThrillWiki uses environment variables for configuration. Key variables:
| Variable | Description |
|----------|-------------|
| `SECRET_KEY` | Django secret key (required) |
| `DEBUG` | Debug mode (True/False) |
| `DATABASE_URL` | PostgreSQL connection URL |
| `REDIS_URL` | Redis connection URL |
| `DJANGO_SETTINGS_MODULE` | Settings module to use |
See [Environment Variables](./configuration/environment-variables.md) for complete reference.
### Settings Architecture
ThrillWiki uses a modular settings architecture:
```
config/
├── django/ # Environment-specific settings
│ ├── base.py # Core settings
│ ├── local.py # Development overrides
│ ├── production.py # Production overrides
│ └── test.py # Test overrides
└── settings/ # Modular settings
├── cache.py # Redis caching
├── database.py # Database configuration
├── email.py # Email settings
├── logging.py # Logging configuration
├── rest_framework.py # DRF and CORS
├── security.py # Security headers
└── storage.py # Static/media files
```
## API Documentation
### Interactive Documentation
- **Swagger UI**: `/api/docs/`
- **ReDoc**: `/api/redoc/`
- **OpenAPI Schema**: `/api/schema/`
### API Overview
- **Base URL**: `/api/v1/`
- **Authentication**: JWT Bearer tokens or session-based
- **Content-Type**: `application/json`
See [API Documentation](./THRILLWIKI_API_DOCUMENTATION.md) for complete endpoint reference.
## Key Features
### Park Database
- Comprehensive theme park information worldwide
- Operator and property owner relationships
- Geographic data with PostGIS support
- Operating status and seasonal information
### Ride Database
- Complete ride specifications and statistics
- Roller coaster technical data (height, speed, inversions)
- Manufacturer and designer tracking
- Historical status and name changes
### User Features
- User authentication with social login (Google, Discord)
- Profile management and preferences
- Review and rating system
- Personalized content and contributions
### Content Moderation
- Review and approval workflows
- Moderation queue management
- User moderation actions
- Bulk operations support
### API Capabilities
- Full CRUD for all entities
- Advanced filtering and search
- Pagination and sorting
- Rate limiting and caching
## Documentation
### Core Documentation
- [Backend Documentation](../backend/README.md) - Setup and development details
- [API Documentation](./THRILLWIKI_API_DOCUMENTATION.md) - Complete API reference
- [Setup Guide](./SETUP_GUIDE.md) - Comprehensive setup instructions
### Configuration
- [Environment Variables](./configuration/environment-variables.md) - Complete reference
- [Secret Management](./configuration/secret-management.md) - Secret handling
### Architecture
- [Architecture Decisions](./architecture/) - ADRs for key decisions
- [Deployment Guide](../architecture/deployment-guide.md) - Production deployment
- [Health Checks](./HEALTH_CHECKS.md) - Monitoring endpoints
### Accessibility
- [Keyboard Navigation](./accessibility/keyboard-navigation.md) - Keyboard shortcuts
- [Screen Reader Testing](./accessibility/screen-reader-testing.md) - Testing checklist
- [Component Patterns](./accessibility/component-patterns.md) - Accessible patterns
## Management Commands
ThrillWiki provides 50+ management commands for various operations. See [Backend README - Management Commands](../backend/README.md#management-commands) for complete documentation.
### Quick Reference
```bash
# Configuration
uv run manage.py validate_settings
# Cache management
uv run manage.py warm_cache
uv run manage.py clear_cache
# Data seeding
uv run manage.py seed_initial_data
uv run manage.py create_sample_data
# Development
uv run manage.py rundev
uv run manage.py setup_dev
```
See [Management Commands Reference](./MANAGEMENT_COMMANDS.md) for complete command documentation.
## Testing
### Running Tests
```bash
# Run all tests
uv run manage.py test
# Run specific app tests
uv run manage.py test apps.parks
uv run manage.py test apps.rides
# Run with coverage
uv run coverage run manage.py test
uv run coverage report
```
### Accessibility Testing
```bash
# Run accessibility tests
uv run manage.py test backend.tests.accessibility
```
## Deployment
### Development Environment
```bash
# Start development server
uv run manage.py runserver
# Full development setup
./shared/scripts/dev/setup-dev.sh
```
### Production Deployment
See [Deployment Guide](../architecture/deployment-guide.md) for detailed production setup instructions.
Key production requirements:
- `DEBUG=False`
- SSL/HTTPS enforcement
- Redis for caching and sessions
- PostgreSQL with connection pooling
- Proper secret management
### Production Checklist
See [Production Checklist](./PRODUCTION_CHECKLIST.md) for deployment verification.
## Contributing
We welcome contributions! Please follow these guidelines:
1. **Development Setup** - Follow the setup instructions above
2. **Code Standards** - Follow Django coding standards and use provided linters
3. **Testing** - Write tests for new features
4. **Documentation** - Update documentation as needed
### Quick Contribution Start
```bash
# Fork and clone the repository
git clone https://github.com/your-username/thrillwiki.git
cd thrillwiki
# Set up development environment
cd backend && uv sync
# Create a feature branch
git checkout -b feature/your-feature-name
# Make your changes and test
uv run manage.py test
# Submit a pull request
```
## License
This project is licensed under the MIT License - see the [LICENSE](../LICENSE) file for details.
## Support
- **Issues**: [GitHub Issues](https://github.com/your-repo/thrillwiki/issues)
- **Discussions**: [GitHub Discussions](https://github.com/your-repo/thrillwiki/discussions)
---
**Built with Django + HTMX for the theme park and roller coaster community**