- Add complete backend/ directory with full Django application - Add frontend/ directory with Vite + TypeScript setup ready for Next.js - Add comprehensive shared/ directory with: - Complete documentation and memory-bank archives - Media files and avatars (letters, park/ride images) - Deployment scripts and automation tools - Shared types and utilities - Add architecture/ directory with migration guides - Configure pnpm workspace for monorepo development - Update .gitignore to exclude .django_tailwind_cli/ build artifacts - Preserve all historical documentation in shared/docs/memory-bank/ - Set up proper structure for full-stack development with shared resources
15 KiB
ThrillWiki Design System Documentation
Last Updated: June 25, 2025
Version: 1.0
Status: Production Ready
Overview
ThrillWiki employs a modern, professional dark theme design system featuring purple-to-blue gradients, excellent typography, and responsive design patterns. This document captures the design patterns, components, and guidelines observed during the comprehensive design assessment.
Design Principles
1. Dark-First Design
- Primary design approach uses dark backgrounds with light text
- High contrast ratios for excellent readability
- Professional appearance suitable for entertainment industry
2. Gradient Aesthetics
- Purple-to-blue gradient system creates visual depth
- Consistent gradient application across components
- Sophisticated color transitions enhance user experience
3. Responsive Excellence
- Mobile-first responsive design approach
- Seamless adaptation across Desktop (1920x1080), Tablet (768x1024), Mobile (375x667)
- Fluid layouts with intelligent content prioritization
4. Performance-Driven
- Fast HTMX interactions for dynamic content
- Optimized asset loading and caching
- Smooth transitions and animations
Color System
Primary Colors
/* Primary Purple */
--primary-purple: #8B5CF6;
/* Primary Blue */
--primary-blue: #3B82F6;
/* Gradient Combinations */
--gradient-primary: linear-gradient(135deg, #8B5CF6 0%, #3B82F6 100%);
Background Colors
/* Dark Backgrounds */
--bg-dark-primary: #1F2937;
--bg-dark-secondary: #374151;
--bg-dark-tertiary: #4B5563;
/* Card Backgrounds */
--bg-card: rgba(31, 41, 55, 0.8);
--bg-card-hover: rgba(55, 65, 81, 0.9);
Text Colors
/* Primary Text */
--text-primary: #FFFFFF;
--text-secondary: #E5E7EB;
--text-muted: #9CA3AF;
/* Interactive Text */
--text-link: #60A5FA;
--text-link-hover: #93C5FD;
Status Colors
/* Success */
--color-success: #10B981;
/* Warning */
--color-warning: #F59E0B;
/* Error */
--color-error: #EF4444;
/* Info */
--color-info: #3B82F6;
Typography
Font Stack
/* Primary Font Family */
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
Typography Scale
/* Headings */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px */
Font Weights
--font-normal: 400;
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;
Spacing System
Spacing Scale
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-5: 1.25rem; /* 20px */
--space-6: 1.5rem; /* 24px */
--space-8: 2rem; /* 32px */
--space-10: 2.5rem; /* 40px */
--space-12: 3rem; /* 48px */
--space-16: 4rem; /* 64px */
--space-20: 5rem; /* 80px */
Responsive Breakpoints
Breakpoint System
/* Mobile First Approach */
--breakpoint-sm: 640px; /* Small devices */
--breakpoint-md: 768px; /* Medium devices (tablets) */
--breakpoint-lg: 1024px; /* Large devices */
--breakpoint-xl: 1280px; /* Extra large devices */
--breakpoint-2xl: 1536px; /* 2X large devices */
Tested Viewports
- Desktop: 1920x1080 (Excellent adaptation)
- Tablet: 768x1024 (Seamless responsive behavior)
- Mobile: 375x667 (Optimized mobile experience)
Component Patterns
Card Components
.card {
background: var(--bg-card);
border-radius: 0.5rem;
padding: var(--space-6);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
transition: all 0.2s ease-in-out;
}
.card:hover {
background: var(--bg-card-hover);
transform: translateY(-2px);
box-shadow: 0 8px 25px -5px rgba(0, 0, 0, 0.2);
}
Button Components
.btn-primary {
background: var(--gradient-primary);
color: var(--text-primary);
padding: var(--space-3) var(--space-6);
border-radius: 0.375rem;
font-weight: var(--font-medium);
transition: all 0.2s ease-in-out;
}
.btn-primary:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);
}
Navigation Components
.nav-link {
color: var(--text-secondary);
padding: var(--space-2) var(--space-4);
border-radius: 0.25rem;
transition: all 0.2s ease-in-out;
}
.nav-link:hover {
color: var(--text-primary);
background: rgba(139, 92, 246, 0.1);
}
.nav-link.active {
color: var(--primary-purple);
background: rgba(139, 92, 246, 0.2);
}
Layout Patterns
Container System
.container {
max-width: 1280px;
margin: 0 auto;
padding: 0 var(--space-4);
}
@media (min-width: 640px) {
.container {
padding: 0 var(--space-6);
}
}
@media (min-width: 1024px) {
.container {
padding: 0 var(--space-8);
}
}
Grid System
.grid {
display: grid;
gap: var(--space-6);
}
.grid-cols-1 { grid-template-columns: repeat(1, 1fr); }
.grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
.grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
@media (min-width: 768px) {
.grid-cols-md-2 { grid-template-columns: repeat(2, 1fr); }
.grid-cols-md-3 { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 1024px) {
.grid-cols-lg-3 { grid-template-columns: repeat(3, 1fr); }
.grid-cols-lg-4 { grid-template-columns: repeat(4, 1fr); }
}
Interactive Elements
Form Components
.form-input {
background: var(--bg-dark-secondary);
border: 1px solid var(--bg-dark-tertiary);
color: var(--text-primary);
padding: var(--space-3);
border-radius: 0.375rem;
transition: all 0.2s ease-in-out;
}
.form-input:focus {
outline: none;
border-color: var(--primary-purple);
box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);
}
Search Components
.search-container {
position: relative;
width: 100%;
}
.search-input {
width: 100%;
padding: var(--space-3) var(--space-4);
padding-left: var(--space-10);
background: var(--bg-dark-secondary);
border: 1px solid var(--bg-dark-tertiary);
border-radius: 0.5rem;
color: var(--text-primary);
}
.search-results {
position: absolute;
top: 100%;
left: 0;
right: 0;
background: var(--bg-dark-primary);
border: 1px solid var(--bg-dark-tertiary);
border-radius: 0.5rem;
margin-top: var(--space-1);
max-height: 300px;
overflow-y: auto;
z-index: 50;
}
Animation & Transitions
Standard Transitions
/* Default transition for interactive elements */
.transition-default {
transition: all 0.2s ease-in-out;
}
/* Hover effects */
.hover-lift:hover {
transform: translateY(-2px);
}
.hover-scale:hover {
transform: scale(1.02);
}
/* Focus states */
.focus-ring:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.3);
}
Loading States
.loading-spinner {
border: 2px solid var(--bg-dark-tertiary);
border-top: 2px solid var(--primary-purple);
border-radius: 50%;
width: 20px;
height: 20px;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
Accessibility Guidelines
Color Contrast
- All text meets WCAG AA contrast requirements (4.5:1 minimum)
- Interactive elements have clear focus indicators
- Color is not the only means of conveying information
Keyboard Navigation
- All interactive elements are keyboard accessible
- Focus indicators are clearly visible
- Tab order follows logical page flow
Screen Reader Support
- Semantic HTML structure used throughout
- ARIA labels provided for complex interactions
- Alternative text for images and icons
Performance Considerations
CSS Optimization
- Critical CSS inlined for above-the-fold content
- Non-critical CSS loaded asynchronously
- CSS custom properties used for consistent theming
Asset Loading
- Images optimized and properly sized
- Lazy loading implemented for below-the-fold content
- Static assets cached with appropriate headers
HTMX Integration
- Smooth AJAX-style interactions without page reloads
- Progressive enhancement approach
- Graceful degradation for non-JavaScript environments
Component Library
Core Components Identified
- Navigation Bar - Main site navigation with responsive behavior
- Search Components - Park and ride search with autocomplete
- Card Components - Content cards for parks, rides, and entities
- Filter Components - Search and category filtering interfaces
- Statistics Display - Homepage statistics presentation
- Detail Pages - Individual park and ride information layouts
- Form Components - Input fields, buttons, and form layouts
Component States
- Default - Standard appearance
- Hover - Interactive feedback on mouse over
- Focus - Keyboard navigation indicators
- Active - Currently selected or pressed state
- Disabled - Non-interactive state when applicable
Browser Support
Tested Browsers
- Modern Chrome, Firefox, Safari, Edge
- Mobile Safari (iOS)
- Chrome Mobile (Android)
Feature Support
- CSS Grid and Flexbox
- CSS Custom Properties
- Modern JavaScript (ES6+)
- HTMX for dynamic interactions
Implementation Notes
CSS Framework
- Appears to use Tailwind CSS or similar utility-first approach
- Custom CSS for specific component styling
- Consistent spacing and sizing system
JavaScript Framework
- HTMX for dynamic interactions
- Minimal custom JavaScript
- Progressive enhancement approach
Django Integration
- Server-side rendering with Django templates
- Static file handling through Django's static files system
- Template inheritance for consistent layouts
Critical Layout Issues Identified (June 26, 2025)
⚠️ SEVERE DESIGN PROBLEMS REQUIRING IMMEDIATE ATTENTION
Assessment Date: June 26, 2025 Assessment Type: Comprehensive Detail Pages Design Evaluation Status: CRITICAL ISSUES IDENTIFIED
1. SPACE UTILIZATION FAILURES
- Oversized Cards: Cards with excessive padding waste 30-40% of available screen space
- Poor Information Density: Single lines of text in massive containers throughout detail pages
- Empty State Waste: Placeholder sections consume valuable screen real estate
- Inconsistent Card Heights: Visual imbalance across grid layouts
2. LAYOUT INCONSISTENCIES
- No Standardized Grid System: Different card sizing approaches between page types
- Asymmetrical Layouts: Especially problematic in ride detail headers
- Mixed Grid Patterns: 2-column vs 4-column vs mixed approaches without consistency
- Poor Content Organization: No clear information hierarchy patterns
3. MOBILE RESPONSIVENESS ISSUES
- Excessive Mobile Padding: Cards maintain desktop padding on mobile devices
- Poor Viewport Optimization: Inefficient use of limited mobile screen space
- Suboptimal Information Consumption: Mobile layouts not optimized for content density
4. SPECIFIC TEMPLATE PROBLEMS
Park Detail Pages (templates/parks/park_detail.html)
- Left sidebar massively oversized for minimal content
- Stats cards have inconsistent heights creating visual imbalance
- "About" section wastes enormous space with single line of text
- Location map takes excessive vertical space
Ride Detail Pages (templates/rides/ride_detail.html)
- Asymmetrical layout disaster - unbalanced card sizing
- Reviews section: massive card for placeholder text
- Trivia section: oversized card for one sentence
- Quick Facts: only 2 facts in large card with excessive padding
Company Detail Pages (templates/companies/manufacturer_detail.html)
- Inconsistent card sizing creates visual chaos
- Stats cards different widths/heights - no grid discipline
- Redundant website buttons (top button + website card)
- About section: single line in massive card
🚨 CRITICAL RECOMMENDATIONS FOR IMMEDIATE IMPLEMENTATION
HIGH PRIORITY (Critical UX Impact)
- Reduce Card Padding by 30-40% - Immediate space savings across all detail pages
- Fix Asymmetrical Layouts - Especially ride detail header balance
- Consolidate Empty State Sections - Remove placeholder waste
- Standardize Card Grid System - Consistent sizing patterns
MEDIUM PRIORITY (User Experience)
- Convert Park Detail Sidebar - Change to horizontal stats bar
- Balance Ride Detail Header - Reduce card sizes and improve layout
- Standardize Company Detail Grid - Remove redundancy and chaos
- Optimize Mobile Layouts - Better space utilization on small screens
LAYOUT RESTRUCTURING NEEDED
- Park Detail: Convert sidebar to horizontal stats bar
- Ride Detail: Balance header layout, reduce card sizes
- Company Detail: Standardize grid system, remove redundancy
📊 IMPACT ASSESSMENT
- Current State: Significant space waste and poor information density
- User Impact: Excessive scrolling required, poor information accessibility
- Professional Impact: Layouts appear unprofessional due to poor space utilization
- Mobile Impact: Particularly poor experience on mobile devices
🎯 SUCCESS METRICS FOR FIXES
- Space Efficiency: 30-40% reduction in wasted screen space
- Information Density: More content visible per screen area
- Layout Consistency: Standardized grid systems across all detail pages
- Mobile Optimization: Improved responsive patterns for better mobile UX
Future Considerations
Design System Evolution
- Component Documentation - Formal component library documentation
- Design Tokens - Formalized design token system
- Accessibility Audit - Comprehensive accessibility testing
- Performance Monitoring - Ongoing performance optimization
- 🚨 LAYOUT OPTIMIZATION - CRITICAL: Address space utilization and consistency issues
Potential Enhancements
- Dark/Light Theme Toggle - Fix existing theme toggle functionality
- Animation Library - Enhanced micro-interactions
- Icon System - Consistent icon library implementation
- Print Styles - Optimized printing experience
- 🚨 RESPONSIVE REDESIGN - CRITICAL: Fix mobile responsiveness and information density
Conclusion
UPDATED ASSESSMENT (June 26, 2025): While ThrillWiki's design system demonstrates excellent implementation of modern web design principles with a cohesive dark theme and strong performance characteristics, CRITICAL LAYOUT ISSUES have been identified that severely impact user experience.
IMMEDIATE ACTION REQUIRED: The detail pages require significant layout optimization to improve space utilization and user experience. The visual design system (colors, typography, theming) is solid, but the fundamental layout patterns waste screen space and create poor information density.
PRIORITY STATUS: Layout optimization is now a CRITICAL PRIORITY that must be addressed before the system can be considered truly production-ready for optimal user experience.