# ThrillWiki - Theme Park & Ride Encyclopedia ## Overview ThrillWiki is a community-driven web application for discovering, reviewing, and tracking theme parks, rides, and related entities globally. Its core purpose is to provide a centralized platform for enthusiasts to research attractions and contribute to a collaborative knowledge base through user contributions and reviews, offering a comprehensive encyclopedia for the theme park world. ## Recent Changes **October 2025 - Bug Fixes & Stability Improvements** - Fixed Fast Refresh/HMR issues by separating hook exports from component files (useSidebar, uploadPendingImages) - Added comprehensive null/undefined safety checks across PhotoModal, EntityHistoryTimeline, useEntityVersions, and EntityEditPreview components - Improved error handling with specific file names in upload error messages - Enhanced AutocompleteSearch dropdown UX with proper loading state visibility - Implemented deep object comparison in EntityEditPreview for accurate change detection - Verified memory leak prevention (object URL cleanup, subscription cleanup, timeout cleanup all properly implemented) ## User Preferences Preferred communication style: Simple, everyday language. ## System Architecture ### Frontend - **Tech Stack:** React + TypeScript with Vite, Radix UI + Tailwind CSS (shadcn/ui), TanStack Query for state management, React Router v6 for routing. - **Component Structure:** Utilizes layout, page-level, reusable UI, and custom domain components. - **Design System:** HSL-based color system, dark/light theme support, custom gradients, Inter font, responsive and mobile-first design. - **State Management:** TanStack Query for server state, React Context for authentication, custom hooks for business logic, and Realtime subscriptions for live updates. ### Backend - **Database (Supabase PostgreSQL):** Stores core entities (parks, rides, companies), location data, review/rating systems, user profiles, content submission workflows, and image metadata. - **Authentication & Authorization:** Supabase Auth for user management (magic link, email/password), Cloudflare Turnstile for bot protection, role-based access control (user, moderator, admin, superuser), and Row-Level Security (RLS). - **Content Moderation:** Two-tier submission workflow with dependency tracking, conflict resolution, real-time updates for moderation queues, automated slug generation, and status tracking. - **Data Access:** Security definer functions for privileged operations, complex joins, aggregated data, full-text search, and real-time subscriptions. ### Image Management - **Cloudflare Images Integration:** Used for media storage and transformation, with uploads proxied via Supabase Edge Functions. Supports multiple variants for responsive display and stores metadata in Supabase. - **Upload Workflow:** Uppy dashboard for multi-file uploads, image editor integration, progress tracking, and automatic resizing/optimization via Cloudflare. ### Notification System (Novu) - **Architecture:** Multi-channel delivery (in-app, email, push), workflow-based templates, per-workflow user preferences, frequency controls, and headless notifications. - **Features:** Supports subscriber management and preference syncing via Supabase Edge Functions. ### Search & Discovery - **Multi-Entity Search:** Unified search across parks, rides, and companies with autocomplete, recent history, category/type filtering, and advanced filters. - **Location Features:** Automatic unit conversion, geo-based preferences, and distance/measurement system settings. ### User Management - **Profile System:** Customizable usernames, display names, avatars, bios, privacy controls, home park selection, and activity tracking. - **User Blocking:** Functionality to block users and hide their content. - **Role Management:** Hierarchical permission system for superuser, admin, moderator, and user roles, with role-specific UI and routes. ### Admin & Moderation - **Moderation Queue:** Real-time monitoring of submissions, item-level approval/rejection, dependency conflict resolution, bulk actions, and status tracking. - **Admin Settings:** System-wide configuration with category-based organization and audit trails. - **Reports System:** Manages user-generated content reports with status workflows. ## External Dependencies ### Third-Party Services - **Supabase:** PostgreSQL database, authentication, real-time, Edge Functions, storage. - **Cloudflare:** Cloudflare Images for media storage/transformation, Turnstile for CAPTCHA. - **Novu:** Multi-channel notification delivery, workflow management. - **Uppy:** File upload interface and image editor. - **Google Fonts:** For the Inter typeface. - **Radix UI:** For accessible UI components. ### API Integrations - **Supabase Edge Functions:** - `upload-image`: Cloudflare Images upload proxy. - `trigger-novu-notification`: Sends Novu notifications. - `sync-novu-subscriber`: Manages Novu subscribers. - `sync-novu-preferences`: Syncs notification preferences. - **Database Functions (PostgreSQL):** For privacy checks, role-based permissions, and automated tasks.