The Contact page (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dark-retro-webpage/llms.txt
Use this file to discover all available pages before exploring further.
/contact) lets visitors reach the developer through a Windows 98–styled contact form, browse and sign a retro guestbook, and jump to external social profiles via icon links. The layout is a two-column grid: the contact form and social links on the left and the guestbook on the right.
Layout structure
On large screens, the page uses a two-column grid (lg:grid-cols-12) inside a max-w-6xl centered container. The left column spans five columns (lg:col-span-5) and holds the contact form and social links; the right column spans seven (lg:col-span-7) and holds the guestbook panel. On smaller screens the columns stack vertically with the contact form rendered first.
Contact form
The contact form lives inside a<Win98Window> titled "Send_Message.exe". It contains three labeled fields (Your Name, Email Address, Message) and a submit button. Each input uses .bevel-inset styling to create the characteristic sunken look of Win98 text fields.
.bevel-inset class applies the inverted border colors of .bevel-window, giving inputs a sunken appearance:
Social links section
Below the contact form, a<div className="bevel-window p-4 bg-[#1a0f24]"> panel titled "EXTERNAL_LINKS" holds a row of .bevel-button icon links pointing to the developer’s external profiles. Each link wraps a lucide-react icon.
href attributes on the three anchor tags in the Contact component in assets/main.js and replace the placeholder "#" values with your actual profile addresses.
Guestbook
The guestbook is a separate panel on the right side of the layout. It uses aborder-4 border-ridge border-[#c0c8d8] bg-[#0c0814] outer wrapper with a bg-[#c0c8d8] text-black header bar — distinct from the <Win98Window> chrome used by the contact form. The panel has two parts: a sign form at the top and a scrollable list of existing entries below.
Sign form
The sign form uses.bevel-inset inputs and a bevel-button submit button. On submission the new entry is prepended to the entries list in component state.
Existing entries
Each guestbook entry is rendered as a.bevel-inset card with the author’s handle in text-[#22d3ee] font-mono, the message in font-sans text-[#e2e8f0] italic, and a date stamp in a top-right corner badge with bg-[#475569] styling.
The default seed entries sourced from the component are:
| Handle | Date | Message |
|---|---|---|
CoolHacker99 | 10/24/2026 | "First! Awesome site layout. Reminds me of my old Angelfire page." |
DesignGuru | 10/23/2026 | "The bevels are exquisite. 10/10 would click again." |
Mom | 10/20/2026 | "Very nice dear. Are you eating enough vegetables?" |
im array (the guestbook entries constant) in assets/main.js:
Guestbook entries added through the sign form are stored only in React component state. They are lost on page refresh unless you persist them to a backend (e.g., a simple key–value store or database). To add persistence, fire an API call in the sign handler and fetch initial entries on component mount.
CSS utilities used
| Class | Purpose |
|---|---|
.bevel-window | Raised Win98 outer window container |
.bevel-inset | Sunken input field style |
.bevel-button | Interactive button with bevel border |
text-[#a855f7] | Purple label/accent text |
text-[#22d3ee] | Cyan username text in guestbook entries |
text-[#94a3b8] | Muted secondary text (timestamps, hints) |
font-mono | DM Mono — used throughout the form UI |
Customization
Wire up the contact form: Add anonSubmit handler that calls an external email API. A minimal Formspree integration requires only changing <form> to <form action="https://formspree.io/f/YOUR_ID" method="POST">.
Add a CAPTCHA: Insert a hCaptcha or Cloudflare Turnstile widget between the message textarea and the submit button to reduce spam on both the contact form and guestbook.
Persist guestbook entries: Replace the static im array with a useEffect that fetches entries from a REST API on mount, and update the sign handler to POST new entries to the same endpoint.
Add more social icons: Import additional lucide-react icons (e.g., Mail, Codepen, Youtube) and add .bevel-button anchor tags following the existing social link pattern.
Related pages
Home
Site entry point with hero section and navigation
About
Developer bio, quick facts, and interests
Projects
Filterable portfolio with GitHub and live links
Writing
Multi-style retro blog post listing