Every piece of user-facing content in Log Portfolio — the bio, the project list, the skill meters, the blog post, the testimonials, and the contact address — lives inDocumentation 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.
components/Desktop.js. There is no backend, no CMS, and no environment variables to configure. Personalizing the entire portfolio is a single-file edit.
Because all content is co-located in
components/Desktop.js, you can fork the project and update your personal details in one sitting without touching any other file. The sections below describe what to look for and where to find it in the file.About Me (AboutMe.txt)
The About Me window is a replica of Windows Notepad. The bio text is a template literal string passed directly as the children of a whitespace-pre-wrap div. Line breaks in the source code become line breaks in the rendered output, so formatting is significant.
Find the Notepad component near the top of components/Desktop.js — it’s the component whose root element has bg-white font-pixel text-sm and a menu bar with File, Edit, Format, View, and Help entries. Replace the content inside the template literal:
SKILLS list, and the PROPERTIES section. Keep the backtick template literal syntax intact — it preserves newlines and indentation without needing <br /> tags.
Projects (My Computer)
The Projects window is an Explorer-style file browser. Its file list is defined as an array near the top of components/Desktop.js, just above the Projects component definition. Each entry in the array appears as a file in the large icons, list, and details views.
type field controls which icon is rendered:
type value | Icon shown |
|---|---|
'Application' | Blue document / file icon |
'HTML Document' | Blue document / file icon |
'File Folder' | Yellow folder icon |
'Bitmap Image' | Purple image icon |
MM/DD/YYYY date format for the retro aesthetic, and leave size as an empty string '' for folders.
Skills (Control Panel)
The Skills window shows animated progress bars, one per skill. The skill definitions are stored in an array just above the Control Panel component in components/Desktop.js. Each entry drives a progress bar that counts up from zero to the specified level on mount.
level value is a number from 0 to 100 — a level of 95 animates the bar all the way to 95% width. Bars animate sequentially with a 500ms stagger between each one.
Blog (Internet Explorer)
The Blog window is styled to look like an early-2000s Geocities page. Unlike the other sections, it is not driven by a data array — the blog post content is written directly as JSX inside the Internet Explorer component in components/Desktop.js. Look for the component whose root has bg-black font-comic and a <marquee> element.
Update these three elements inside that component:
Post title and body
Marquee ticker
Visitor counter
The counter is a hardcoded string rendered in a retro LED-style block. Change"00042" to any 5-digit string:
Testimonials (MSN Messenger)
The Testimonials window mimics MSN Messenger. It reads from a messages array defined just above the MSN Messenger component in components/Desktop.js. The component auto-plays the messages one by one with a 2-second delay between each, simulating a live chat conversation.
sender field controls the visual styling:
sender === 'Me'— renders the name in gray (text-gray-600) to represent your outgoing messages- Any other
sendervalue — renders the name in blue (text-blue-700) and usesfont-comicfor the message text
Contact Email (Outlook Express)
The Outlook Express window renders a fake email compose form. The To: field is a read-only input showing the destination email address. Find the Outlook Express component in components/Desktop.js — it’s the component that renders a form with To, From, and Subject fields.
"developer@portfolio.com" to your real email address. Note that the form does not actually send email — clicking the Send button shows a “Message successfully sent to Outbox” dialog, but no email is dispatched. To enable real email delivery, integrate a service like Resend, Formspree, or EmailJS by adding a fetch call in the form’s submit handler inside the Outlook Express component.