The Outlook Express window (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/log-portfolio/llms.txt
Use this file to discover all available pages before exploring further.
Y) is a contact form disguised as a Windows 98 email client. Visitors fill in their email address, a subject, and a message body, then click Send. The app plays a brief sending-animation modal before confirming that the message was delivered to the Outbox — all purely cosmetic, with no real email sent.
Visual Design
The window is composed of three layers stacked vertically: Toolbar — a row of icon buttons in the classic Outlook Express style.Send shows a Send arrow icon (text-blue-600) above its label; Attach shows a Paperclip icon (text-gray-600). Both buttons use win-button styling with hover:win-border and active:win-border-inset states. A thin bg-gray-400 vertical divider separates the two buttons.
Email form — four labeled rows inside a <form>:
| Field | Type | Value / Placeholder | Constraint |
|---|---|---|---|
| To | text (readonly) | developer@portfolio.com | Not editable, bg-gray-100 |
| From | email | visitor@internet.com | required |
| Subject | text | Job Opportunity | required |
| Body | <textarea> | Type your message here... | required, fills remaining height |
win-border-inset styling. Labels are right-aligned in a fixed w-16 column.
Sending overlay — when isSending is true, an absolute-positioned bg-black/20 overlay covers the window and shows a win-border win-bg dialog containing:
- A
Mailicon withanimate-bounce text-blue-600 - A bold
Sending Message...label - An indeterminate-style progress bar:
bg-blue-800 w-1/2 animate-[slide_1s_infinite]
Send Flow
Visitor fills the form
The
From, Subject, and Body fields are all required. The browser’s native validation prevents submission if any are empty.onSubmit fires
The
<form onSubmit={handleSubmit}> handler sets isSending to true. The Send toolbar button is also wired to the same handler and is disabled (disabled={isSending}) while the animation plays.Sending modal plays for 2 seconds
A
setTimeout of 2000 ms runs. During this window the overlay is visible, showing the bouncing mail icon and sliding progress bar.Success state appears
After 2 seconds,
isSending becomes false and isSent becomes true. The entire form is replaced with a centered success card:State Reference
| State variable | Type | Initial value | Purpose |
|---|---|---|---|
isSending | boolean | false | Shows/hides the sending overlay |
isSent | boolean | false | Shows/hides the success screen |
Customizing
Change the To address
Find the
Y component in components/Desktop.js and locate the readonly To input. Edit the value prop:Wire up a real submission (optional)
The
handleSubmit function currently only toggles local state. To send a real email, call a serverless function, Formspree endpoint, or EmailJS method inside the onSubmit handler before (or instead of) setting isSending. Keep the 2-second delay as loading feedback while the API call resolves.No email is sent by this form out of the box. The entire flow —
isSending overlay, isSent success screen, and OK reset — is purely cosmetic. You must integrate a backend or third-party email service to actually deliver messages.