Web Design / App Design
• Product / UX / UI / Frontend (React + TypeScript)
• Web + PWA (offline-ready)
"Circuit Collection" is a minimalist Formula 1 2026-season poster gallery Web application. It presents SVG circuit track layouts rendered as stroked elements on dark, theme-able cards. Each track has a special color, and the gallery has many features. It has themes, multiple card formats, export capabilities, a 3D globe map view, live F1 standings data, weather information, compare mode, slideshow, and eleven hidden Easter eggs.
The application is built as a single-page React app (no routing needed) with a focus on pixel-perfect rendering, smooth animations, and a premium Dark aesthetic inspired by F1 broadcast graphics.
Most circuit diagrams you find online are just static images with varying styles. I wanted to create a space where the circuits felt like a cohesive collection. They should look good, like posters, but also useful for real use. They should show what's coming up, where things are, and what's happening right now.
• Make circuit layouts feel premium and consistent across the whole season
• Enable fast exploration: search, filter, favorites, quick navigation
• Provide meaningful season context: next race, timeline, standings, weather
• Support sharing and making: SVG/PNG export and batch download
• Keep UX smooth at scale: large grid performance and responsive layout
• Fans who want a satisfying way to browse circuits like a gallery
• Creators who want poster exports (SVG/PNG) for wallpapers, prints, sharing
• Curious explorers who want map-based discovery and "what's next"
1) Two exploration modes: Grid + Map
• Grid supports "poster browsing" (fast scanning, collecting, favoriting).
• Map supports geographic curiosity: "Where are the races?"
This intentionally serves two mindsets: visual collecting vs spatial exploration.
2) Fullscreen detail modal (not a page jump)
A circuit opens into a fullscreen modal so the user stays anchored in the collection, while still getting an immersive view with left/right navigation, swipe, and arrow keys.
3) "Next race" as a first-class UI concept
The app detects the upcoming race and threads it through the UX:
• Highlighted card and timeline emphasis
• Countdown and weather
• Quick-jump affordances
This reduces "what do I click?" friction and adds season relevance.
4) Power features without UI clutter
I kept the interface minimal but made speed available:
• Ctrl/Cmd+K to focus search
• Keyboard navigation and shortcuts help ("?")
• Context menu actions (open/compare/export/copy SVG)
5) Lightweight progress motivation
Tracking viewed circuits adds a subtle completion loop for exploration without forcing gamification.
Poster-first aesthetic
Dark, restrained UI so the track artwork is always the hero - less chrome, more "collector poster."
SVG craft for "premium linework"
Each circuit uses layered strokes (glow → core → highlight) and optional ripple/echo effects to create depth while preserving clarity at any scale.
Consistent UI tokens
Whole-pixel typography and shared button components keep the experience crisp and cohesive across lots of controls, states, and layouts.
Theme system as a feature
43+ built-in themes plus a custom theme builder lets users make the collection feel personal (not just "skin-deep" styling).
• 49 circuits (2026 season and classic/historic set) with metadata
• Card formats: portrait/square/landscape + A3/phone/desktop
• Search + filters (country chips, favorites, and logic)
• Detail modal with navigation and sharing/export entry points
• Export: PNG (2x), full SVG, minimal SVG, copy SVG, batch Zip
• Season context: timeline, next race, countdown, weather, and standings
• Persistence: favorites, viewed, preferences, themes via localStorage
• PWA + offline caching via service worker strategy
• 3D flip “trading card” back with stats
• Compare mode (side-by-side stats)
• Slideshow mode (fullscreen playback)
• Mobile shake-to-shuffle and shuffle cascade animation
• Easter eggs (Konami, Matrix/DRS/Rain, Lights Out sequence, for example)
• IntersectionObserver lazy rendering (LazyCard) to keep the grid smooth and responsive
• 150ms debounced search for responsive filtering
• URL state sharing (theme/format/search/track) for deep links without heavy routing
• Service worker caching tiers for fast repeat loads and offline resilience
• End-to-end UX thinking: browse → discover → focus → export/share
• Strong design systems: themes, formats, consistent components
• Craft + polish: SVG rendering quality, motion details, keyboard UX
• Performance awareness: smooth interaction at collection scale
Scroll down this page to explore webpage Showcase. You can click on the thumbnail to open the Gallery mode view.
Circuit Collection is a poster gallery for Formula One circuits (season and classics). Each circuit is represented by a manually traced SVG track path plus metadata (stats, colors, layout), rendered into a consistent poster template with many themes and formats.
• Browse circuits with search, filters, country chips, and favorites
• Detail modal for full poster view + fast navigation (keys/swipe)
• Flip cards to a stats “trading card” back side
• Compare two circuits side-by-side
• Fullscreen slideshow mode
• Globe map view (interactive SVG orthographic projection)
• Export posters as PNG/SVG, or batch export a Zip
• Share state via URL query params
• Works offline as a PWA with update banners
Core
• React 18+ (functional components, hooks)
• TypeScript (strict)
• Tailwind CSS v4
• Vite (build tool)
Animation
• Motion (Framer Motion successor) via motion/react
• CSS @keyframes for lightweight effects (draw-on strokes, pulsing dots, subtle glows)
UI libraries
• Lucide React (icons)
• Radix UI (primitives: collapsible, calendar, etc.)
• Sonner (toast notifications)
Export
• html-to-image (toPng) for PNG export
• JSZip for batch export archives
• FileSaver.js to trigger downloads
Data sources
• Jolpica F1 API (Ergast successor) for live standings
• Open-Meteo API for weather (no key required)
• Natural Earth 110m land boundaries (TopoJSON via CDN) for the globe map
Fonts
• Inter (body, 300/400/500)
• Titillium Web (headings/labels/captions, 300/400/500/700)
• Circuits dataset: 49 total (24 season / 25 classic-historic)
• Each circuit includes: manually traced SVG path, viewBox, accent color
• Optional start position metadata
• Stats + location fields (laps, length, lap record, first GP, turns, direction, country/city)
• Posters are layered SVG strokes (glow/core/highlight), with “draw-on” animation
• Start/finish marker + pulse effects; hover scale/glow interactions
• 43+ themes (including team-inspired palettes)
• Theme controls: background gradient + optional patterns (dots/grid/cross/scanlines/tiles/none)
• Text/accent colors (per-track or fixed), stroke styles, optional echo/ripple layers
• Optional “flag fill” mode
• Theme Builder for custom themes + persistence
• Formats: portrait/square/landscape/A3/phone/desktop + grid density modes
• Search across track name, country, city, and IDs; shortcut: Ctrl/Cmd + K
• Country “flag chips” for quick filtering; favorites stored persistently
• Detail modal: navigate (buttons/keyboard/swipe), export/share/compare/add-to-calendar (ICS)
• 3D flip between poster front and stats back; mobile long-press support
• Compare mode: two circuits + stats table, swap actions
• Slideshow: fullscreen auto-advance, timing controls, keyboard shortcuts
• Map view: orthographic SVG globe (no WebGL), dots plotted via lat/lng
• Next race detection → highlights circuit + countdown + timeline emphasis
• Weather via Open-Meteo with caching + manual refresh controls
• Standings via Jolpica API with cache indicators + fallback handling
• PNG export: DOM-to-image via html-to-image at 2× scale
• SVG export: “full” vs “minimal”, plus copy-to-clipboard
• Batch export: zip of visible posters (2× PNG) with progress UI + cancel
• URL state: sync track/theme/format/search/filter/favorites into query params for deep links
• Centralized state via useGalleryState custom hook (no external store)
• localStorage: preferences, favorites/viewed, weather cache, custom themes
• Performance: IntersectionObserver lazy rendering (LazyCard), memoization, debounced search, batched animations
• Accessibility: skip link, semantic structure, keyboard navigation + focus management, print stylesheet
• PWA: service worker app-shell + API/image caching, offline + update banners
• Extras: optional easter eggs (Konami triggers, special visual modes, shake-to-shuffle) without blocking core UX