The Contact page (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/neon-retro-web/llms.txt
Use this file to discover all available pages before exploring further.
/contact) is split into two columns at the md breakpoint. The left column (one third of the grid) renders a pixel-perfect AIM Instant Messenger 5.x Buddy List panel — complete with the navy-to-powder-blue gradient title bar, the _ and X window control buttons, a DevUser99 | Online status row, and a collapsible buddy list split into Socials (GitHub, LinkedIn, Twitter) and Direct (Email Me). A mocked ad banner fills the panel footer. The right column (two thirds of the grid) holds a Window component titled Sign_My_Guestbook.cgi with a full guestbook form. The form manages its own idle → submitting → success state machine with a simulated 1.5-second delay before showing the success screen.
Page Structure
AIM Buddy List Panel
The AIM panel is not the sharedWindow component — it replicates AIM 5.x chrome from scratch using hardcoded colours:
| Element | Colour / Class |
|---|---|
| Title bar background | bg-gradient-to-r from-[#0a246a] to-[#a6caf0] |
| Panel background | bg-[#ece9d8] (Windows XP tan) |
| Buddy list body | bg-white border-2 border-gray-500 border-r-white border-b-white |
| Window control buttons | bg-[#ece9d8] border border-white border-r-gray-500 border-b-gray-500 |
| Username | DevUser99 in bold, status Online in gray |
Buddy List Groups
120×60 ad banner image. Both href="#" links and the mailto: address need to be updated to real URLs.
Guestbook Form
The guestbook is inside aWindow component. When formState === "idle" or "submitting", the form is rendered. When formState === "success", the form is replaced by a success screen.
Form Fields
Label:
Name / Handle:Placeholder: xX_CoolDev_Xx. Required field (required attribute). Disabled while formState === "submitting".Label:
Email (Optional):Placeholder: nobody@example.com. Type email for browser-native validation. Not required. Disabled while submitting.Label:
Message:A <textarea> with min-h-[150px] and resize-none. Placeholder: Great site! Best viewed in Netscape Navigator.... Required. Disabled while submitting.Form State Machine
Success Screen
WhenformState === "success", the form is replaced by a centered, animate-pulse success panel:
Customising This Page
Update social links in the Buddy List
In your source project, replace the three
<a href="#"> links in the Socials group and the <a href="mailto:hello@example.com"> in the Direct group with your actual GitHub, LinkedIn, and Twitter/X URLs. Change hello@example.com to your real email address.Rename the AIM username
In the source project, the
DevUser99 username and Online status label are plain text strings. Update both inside the AIM status header bar elements.Change the buddy list group counts
The group headings read
Socials (3/3) and Direct (1/1). These are static strings — update the counts in the source project if you add or remove buddy list entries.Wire up a real form backend
The current
handleSubmit fires a setTimeout instead of sending data anywhere. No message data is stored or transmitted. To collect guestbook submissions, replace the setTimeout in the source project with a real fetch call to one of these services:- Formspree:
fetch("https://formspree.io/f/YOUR_ID", { method: "POST", body: new FormData(e.target) }) - Netlify Forms: Add
netlifyandname="guestbook"attributes to the<form>tag — Netlify’s build step handles the rest. - EmailJS: Use
emailjs.sendForm(serviceId, templateId, e.target)for client-side email delivery. - Custom API: POST to any REST endpoint with
{ name, email, message }as JSON body.
try/catch and call setFormState("success") in the .then() handler.The AIM Buddy List ad banner at the bottom of the panel uses a
via.placeholder.com image (120×60, black background, teal text “AD SPACE”). This service may not be reliable in all environments. In the source project, replace it with a locally hosted image or a self-promotional banner (e.g., a link to your resume PDF).