The Contact page turns the act of reaching out into a classic arcade high-score entry screen. The left side of the page features an initials input — three single-character fields with automatic focus advancement — plus an optional message textarea and a TRANSMIT SIGNAL submit button. The right side shows a leaderboard table populated from theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev-mode-arcade/llms.txt
Use this file to discover all available pages before exploring further.
guestbook array in data/mockData.js, displaying rank, score, initials, and a short message. The form is entirely client-side: it uses React useState for local state management and does not submit to any backend. To wire up real form submission, the TRANSMIT SIGNAL button’s handler is the integration point.
Route
| Property | Value |
|---|---|
| Path | /contact |
| File (compiled) | assets/main.js — ContactPage component |
| Data export | guestbook (exported as g from mockData.js) |
| Theme colors | arcade-lime · arcade-purple · arcade-cyan |
| Screen title | NEW HIGH SCORE |
Layout
The page uses a two-column layout on desktop, stacking to a single column on mobile.| Column | Contents |
|---|---|
| Left | Initials inputs + message textarea + TRANSMIT SIGNAL button |
| Right | Guestbook leaderboard table |
Left Column — Form
Initials Input
Three separate single-character<input> fields spell out the player’s initials, styled to look like the letter-entry row on a classic arcade cabinet. When a character is typed in one field, focus automatically advances to the next field. Backspacing in an empty field returns focus to the previous field.
State is managed as an array of three strings:
maxLength={1} and styled with a large pixel font and a lime border glow.
Message Textarea
An optional free-text<textarea> beneath the initials row. The placeholder text invites a short message. The field is not required — the form can be submitted with initials only.
TRANSMIT SIGNAL Button
AnArcadeButton in lime color that triggers the form submission handler. In the default implementation, the handler only updates local state (clears the form). To integrate real submission, replace the handler body with your preferred delivery method.
The Contact form has no backend integration out of the box. Submitted data is never sent anywhere — the form resets client-side only. To capture real messages, integrate a service such as Formspree, Netlify Forms, or EmailJS in the
handleSubmit function.Right Column — Guestbook Leaderboard
The leaderboard table renders all entries from theguestbook array. It mirrors a high-score board with four columns:
| Column | Data Field | Description |
|---|---|---|
| RANK | Derived from array index + 1 | #1, #2, etc. |
| SCORE | score | Numeric score, formatted with commas |
| NAME | initials | Three-character initials in pixel font |
| MESSAGE | message | Short message string |
Default Entries
| Rank | Score | Name | Message |
|---|---|---|---|
| #1 | 999,999 | AAA | HIRED. |
| #2 | 500,000 | MOM | Very proud of you sweetie |
| #3 | 1,337 | H4X | Nice CSS. |
| #4 | 100 | DOG | Woof. |
Data Schema
Each entry in theguestbook array must conform to the following shape:
Field Reference
| Field | Type | Displayed As | Notes |
|---|---|---|---|
initials | string | NAME column, pixel font | Exactly 3 chars, uppercase |
score | number | SCORE column | Rendered with toLocaleString() |
message | string | MESSAGE column | Keep under 30 chars for table fit |
Customization
Editing default guestbook entries Opendata/mockData.js and update the guestbook array (exported as g). Reorder, add, or remove entries as desired. Rank is derived from position in the array, so sort entries by descending score for correct display.
handleSubmit stub with a call to your preferred form service. Below is an example using the fetch API with Formspree:
Auto-Focus Logic
The initials auto-focus behavior is handled in theonChange handler for each input. When a character is entered, the handler calls .focus() on the next input ref. On keyDown for Backspace in an empty field, it calls .focus() on the previous ref.
Related Pages
Home
The attract screen that routes visitors to the Contact page via ArcadeButton.
ArcadeButton
The TRANSMIT SIGNAL button component used to submit the form.
Mock Data Reference
Full schema for the guestbook export and all other mockData.js arrays.
Customization Guide
Step-by-step guide for wiring up the Contact form to a real backend.