dev-mode is built from a small set of purpose-built React components that carry the retro arcade aesthetic throughout the portfolio.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev-mode/llms.txt
Use this file to discover all available pages before exploring further.
ArcadeButton drives all navigation with neon glow styling, ScanlineOverlay layers the CRT scanline and vignette effect on top of every page, and StatBar renders the pixel-art progress bars used to visualise developer skills. Each component is self-contained, uses only Tailwind CSS and Framer Motion, and accepts no external state.
ArcadeButton
ArcadeButton is the primary navigation element used in the AppShell bottom bar. It renders a React Router NavLink styled as a pixel-font arcade button with a neon border glow. When the linked route is active, the button fills with its neon color and shows a blinking ▶ cursor to the left of the label. On hover, the button shifts down by 2 pixels; on press it shifts down 6 pixels and scales to 95% — simulating a physical button press.
The bottom navigation bar renders seven instances of this component:
Props
The React Router destination path, e.g.
/about or /projects. Passed
directly to the underlying NavLink component.The button text. Rendered in uppercase using the
font-pixel class and
tracking-widest letter-spacing.The neon accent color applied to the button border, text, and glow shadow.
Maps to the
arcade-cyan, arcade-lime, and arcade-magenta Tailwind color
tokens respectively.Color reference
| Value | Inactive border/text | Active background | Glow shadow |
|---|---|---|---|
"cyan" | #00f0ff | #00f0ff | 0 0 20px rgba(0,240,255,0.8) |
"lime" | #9eff00 | #9eff00 | 0 0 20px rgba(158,255,0,0.8) |
"magenta" | #ff2bd6 | #ff2bd6 | 0 0 20px rgba(255,43,214,0.8) |
Usage example
components/ArcadeButton.js is a pre-compiled ES module. The friendly
component name is not preserved in the compiled export. The examples below
reflect the source-level prop API as used inside AppShell.The active state is determined automatically by comparing
to against the
current React Router pathname via useLocation. You do not need to pass an
isActive prop.ScanlineOverlay
ScanlineOverlay is a purely visual full-screen overlay that replicates the look of a CRT monitor. It is rendered once inside AppShell and sits at z-50 above all page content. Because it uses pointer-events-none, it never intercepts clicks or other user interactions.
The component is made up of three stacked layers:
Static scanlines
An
absolute inset-0 div with a repeating CSS gradient that draws
horizontal scan bands across the entire viewport. Rendered at opacity-30
with mix-blend-overlay so the page content shows through.Animated scanline band
A second
absolute inset-0 div with height 10% and a soft vertical
gradient (from-transparent via-white/5 to-transparent). This band
continuously sweeps from top (translateY -100%) to bottom
(translateY 100%) over 8 seconds using the animate-scanline Tailwind
keyframe, simulating the beam refresh of a real CRT.Props
ScanlineOverlay accepts no props. It is a zero-configuration presentational component.
Usage example
components/ScanlineOverlay.js is a pre-compiled ES module that exports the
component as the minified name S. It is consumed internally by
assets/main.js (the compiled AppShell). The example below reflects the
source-level API.StatBar
StatBar renders a pixel-art progress bar used to display developer skill levels on the About / Character Select page. It draws a row of equal-width segments inside a bordered track; filled segments use the color prop as a Tailwind background class and emit a subtle box-shadow glow, while unfilled segments are transparent. A text label and the current value (or "MAX" when value === max) sit above the bar.
Props
The stat name displayed above the progress bar in the
font-pixel typeface,
e.g. "CURIOSITY" or "CAFFEINE LEVEL".The current level. Must be between
0 and max (inclusive). When value
equals max, the value display shows "MAX" instead of the number.The total number of segments in the bar. Defaults to
10.A Tailwind background utility class applied to filled segments, e.g.
"bg-arcade-cyan" or "bg-arcade-magenta". The value label colour is
derived from this prop by replacing the bg- prefix with text-.Usage example
StatBar is compiled into assets/main.js and is not available as a
standalone module. The examples below reflect the component’s source-level
prop API as used inside the About page.StatBar is currently used exclusively on the About page inside the
Character Select panel. It does not carry its own animation — the parent page
component controls entry animations via Framer Motion on the containing
motion.div.