Player One is a single-page portfolio website built around the aesthetic of a classic 1980s arcade cabinet. Every section of the site maps to a familiar video-game metaphor — the home screen is a “TITLE SCREEN”, the bio page is “LORE”, and the contact form is “SAVE GAME” — creating a cohesive retro gaming experience from the moment a visitor lands. The site combines modern React tooling with pixel-perfect nostalgia: CRT scanlines flicker across the viewport, ghost sprites drift across the background, and every navigation transition is animated with Framer Motion fade-and-scale effects, all served as a fully static bundle with zero backend dependencies.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/player-one/llms.txt
Use this file to discover all available pages before exploring further.
Tech Stack
Player One is assembled from the following libraries and tools:- React 18 — UI component model and hooks (
useState,useEffect) power all interactive elements. - React Router (HashRouter) — Client-side routing via hash-based URLs (e.g.
#/about) so the site deploys on any static host without server-side redirect rules. - Framer Motion — Handles page entrance and exit animations; also drives the looping ghost sprite trajectories.
- Tailwind CSS — Utility-first styling with custom arcade color tokens (
arcade-lime,arcade-cyan,arcade-magenta,arcade-orange) defined in the compiled CSS bundle. - Lucide React — Provides the icon set used throughout the HUD and component buttons (Terminal, Coins, Play, GitHub, FileText, and more).
- Vite — Static site bundler that compiles the React app into pre-built JS/CSS chunks and generates one HTML file per route.
- Press Start 2P (Google Fonts) — The primary pixel font used for headings, labels, and the HUD overlay.
- VT323 (Google Fonts) — A softer monospace pixel font used for body copy and secondary text.
Routes
All seven sections of the portfolio are exposed as hash-based routes. The table below maps each URL path to its in-game arcade label and the content it displays:| Path | Arcade Label | Purpose |
|---|---|---|
/ | TITLE SCREEN | Landing / home screen with animated intro |
/about | LORE | Biography and background information |
/projects | LEVEL SELECT | Showcase of work as arcade cabinet cards |
/skills | HIGH SCORES | Skills and proficiency breakdown |
/writing | CODEX | Blog posts and written articles |
/case-studies | BOSS BATTLES | In-depth project case studies |
/contact | SAVE GAME | Contact form to reach out |
Player One uses React Router’s
HashRouter, which means all URLs include a # prefix (e.g. https://yoursite.com/#/about). This is intentional — hash-based routing works on any static file host (GitHub Pages, Netlify, S3, etc.) without configuring redirect or rewrite rules. The browser never sends the hash fragment to the server, so every request simply loads index.html and React Router takes over from there.Key Features
- CRT scanline + vignette overlay — A pair of absolutely-positioned
divlayers (crt-overlay,crt-vignette) sit above the entire viewport, simulating the phosphor-glow and screen curvature of a real CRT monitor. - Glitch text animations — Headings on several pages use CSS keyframe animations to produce horizontal pixel-shift glitch effects.
- Animated ghost sprites —
GhostSprite.jsrenders a pixel-art SVG ghost that travels across the screen using Framer Motion’s loopingx/yanimations with randomised delays and durations. - Arcade cabinet project cards —
ArcadeCabinet.jswraps each project in a three-part layout (marquee header, screen body, control-panel footer) that visually mimics the silhouette of a standing arcade cabinet. - HUD overlay with live clock —
HUD.jsrenders a fixed overlay showingPLAYER_1, a static score of999999, an “INSERT COIN” blinker, aCREDITS: 0counter, and a live clock that updates every second viasetInterval. - Framer Motion page transitions —
PageTransition.jswraps each route’s content in anopacity/scale/blurentrance and exit animation with a 400 ms ease-out curve. - Pixel fonts — Press Start 2P is applied to all headings and HUD labels; VT323 is used as the default body font, giving the entire site a consistent retro terminal feel.
Sections
Getting Started
Understand the repository layout, how the static build is structured, and how to run or deploy the site.
Components
Deep-dives into Navigation, HUD, CRTOverlay, GhostSprite, PageTransition, and ArcadeCabinet.
Design System
Explore the arcade color tokens, pixel font stack, glow utilities, and Tailwind configuration.
Pages
Reference for each of the seven route pages and the content they render.