The Projects page (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/press-start/llms.txt
Use this file to discover all available pages before exploring further.
F component, route /projects) takes the conventional portfolio grid and wraps it in a Game Select screen metaphor. Each project appears as an arcade game cartridge with a neon-bordered label area, a category badge, and five decorative “cartridge slot” bars along the bottom edge. Hovering a card tilts it with a 3D perspective transform and reveals a blinking INSERT COIN tooltip. Clicking opens a full-screen detail modal with the project description, tech stack chips, and action links.
Route
/projects
Filter bar
Above the grid, a horizontal row of category buttons lets visitors narrow the display. The current filter is tracked in local state (useState("ALL GAMES")). The available tabs are:
border-arcade-green text-arcade-green bg-arcade-green/10; inactive tabs are muted and gain a white highlight on hover. Clicking "ALL GAMES" resets the filter and shows every project.
Project data
Projects are defined in them array inside the F component block. Each object has the following shape:
Field reference
| Field | Type | Required | Notes |
|---|---|---|---|
id | number | Yes | Unique identifier; used as the React key and for cabinet ID display |
title | string | Yes | Uppercase; displayed in Press Start 2P font on the cartridge |
category | string | Yes | Must match one of the filter tab values for filtering to work |
desc | string | Yes | Displayed in the detail modal |
stack | string[] | Yes | Rendered as chip badges in the modal tech-stack section |
links | object | Yes | All three keys (demo, source, manual) are optional; omit a key to hide its button |
color | string | Yes | CSS custom property string, e.g. "var(--neon-magenta)"; sets the cartridge border and title colour |
isSample | boolean | Yes | When true, a DEMO ROM badge appears in the modal title row |
Adding a project
- Add a new object to the
marray, giving it the next sequentialid. - Set
categoryto one of the existing filter values, or add a new string to both thementry and theUfilters array so the new category tab appears. - Replace
"#"link values with real URLs.
Card interaction
Each card in the grid uses CSS 3D transforms on hover:- translateY(-1rem) lifts the card upward.
- rotateX(12deg) tilts it away from the viewer, simulating a cartridge being picked up.
- The
INSERT COINtooltip fades in below the card viaopacity-0 group-hover:opacity-100.
selectedProject state).
Detail modal
Clicking a card sets thet state to the selected project object, which renders a fixed full-screen overlay with:
- Header row — project title in its accent colour, plus the
DEMO ROMbadge ifisSampleistrue. - Description — the
descstring in body font. - Tech stack — each
stackentry rendered as a dark chip with a#444border. - Action buttons — conditionally rendered based on which keys exist in
links:demo→ green▶ PLAY DEMObuttonsource→ cyan</> VIEW SOURCEbuttonmanual→ magenta📖 READ MANUALbutton
- Stats sidebar (desktop only) — fixed arcade stats:
PLAYER: 1 / STAGE: CLEAR / SCORE: 999400plus the cabinet ID derived from the project’sidpadded to four digits.
✕ button in the top-right corner, which sets t back to null.