The Contact page — labelledDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/space-mission/llms.txt
Use this file to discover all available pages before exploring further.
COMMS in the HUD — simulates an open radio channel between the visitor and mission control. Rather than a plain web form, the interface dresses each field as a transmission parameter: the sender’s name becomes an identification callsign, the reply address becomes a return frequency, and the message body becomes the payload. A CRT scanline overlay adds a retro-terminal texture to the entire form panel, and a multi-state send animation turns form submission into a miniature launch sequence.
Two-Column Layout
The page is divided into two side-by-side panels:| Column | Content |
|---|---|
| Left — Transmission Form | The main contact form with three labelled fields, a submit button, and the scanline overlay |
| Right — Relay Stations | A sidebar listing direct contact links (email, GitHub, LinkedIn) formatted as named relay stations |
Form Fields
All three fields are required. They use a monospace font and render on a dark navy (#020617) background to mimic a terminal interface:
| HUD Label | HTML field | Type | Description |
|---|---|---|---|
IDENTIFICATION | name | text | Sender’s full name |
RETURN FREQUENCY | email | email | Reply-to email address |
PAYLOAD | message | textarea (5 rows) | Message body |
Form States
The submit button and the area beneath the form cycle through three states driven by astatus piece of React state ('idle' | 'sending' | 'sent'):
idle
Default state. The submit button reads TRANSMIT with a paper-plane icon. The form is fully interactive.
sending
Triggered immediately on submit (after event.preventDefault()). The button is disabled and its label switches to ENCRYPTING… with a spinning lock icon. The form fields become read-only. A brief encrypted-character animation runs across the button text to simulate in-progress signal encoding.
sent
Set after the (simulated) 2-second delay resolves. The entire form area is replaced by a success panel:
- A
Terminalicon centred at the top - The heading TRANSMISSION SENT
- A subline noting an approximate ~24 hour response time
- A SEND ANOTHER button that resets
statusback to'idle'and clears all field values
The current implementation simulates the send with a
setTimeout of 2000 ms and never dispatches a real HTTP request. See the Form Submission section below for how to wire it up to a real backend.Relay Stations Sidebar
The right column lists three direct-contact shortcuts styled as named relay stations. Each entry has an icon, a station label, and a clickable link:| Station | Icon | Link |
|---|---|---|
| Email Relay | Mail (Lucide React) | "#" placeholder |
| GitHub Beacon | Github (Lucide React) | "#" placeholder |
| LinkedIn Array | Linkedin (Lucide React) | "#" placeholder |
target="_blank" rel="noopener noreferrer").
Scanline Overlay
The form panel carries a full-coverage CRT scanline effect implemented entirely in CSS. An absolutely positioned<div> with pointer-events: none is layered over the form using Tailwind utility classes that compose the scanline gradient directly:
bg-[length:100%_4px] class causes the gradient to repeat every 4 pixels, creating evenly spaced horizontal bands. The overlay does not interfere with form interaction because pointer-events: none lets all mouse and keyboard events pass through to the underlying inputs.
Updating Contact Link URLs
The relay station links are hardcoded in theContact page component. In the current source all three href values are set to "#" — they are intentional placeholders and must be replaced before the portfolio goes live. Locate the relay stations data array near the top of the component file and update each href:
Form Submission
The contact form currently prevents default browser submission and simulates a network round-trip with a two-second timeout:setTimeout with a real asynchronous call. Three common options are:
Formspree
POST to a Formspree endpoint with
fetch. No backend required — Formspree forwards submissions to your email inbox.EmailJS
Use the EmailJS SDK to send emails directly from the browser using a configured email service template.
Serverless Function
POST to a Next.js API route, Netlify Function, or Vercel Edge Function that calls a transactional email provider (SendGrid, Resend, etc.).
try/catch block and handle the error state by resetting status to 'idle' and showing an inline error message so the user knows the transmission failed.