The Home app is the first thing visitors see when they land on DevOS. It opens automatically as aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev-os/llms.txt
Use this file to discover all available pages before exploring further.
README.md window and plays back a Markdown welcome message one character at a time, mimicking the feeling of a file being written to disk in real time. The Notepad chrome — complete with a menu bar and a UTF-8 status strip — grounds the experience in a familiar OS metaphor without sacrificing any personality.
What It Does
HomeApp renders a three-region layout inside the window body:
- Menu bar — a
bg-gray-100strip with five non-functional labels (File,Edit,Format,View,Help) that complete the Notepad illusion. - Content area — a
font-code text-sm whitespace-pre-wrapscrollable div that displays the progressively revealedwelcomeContentstring followed by a blinking cursor block. - Status bar — a footer strip showing
Ln 1, Col 1on the left andUTF-8on the right, matching the real Windows Notepad layout.
Typewriter Mechanism
The animation uses a singleuseState string and a setInterval inside a useEffect:
- Speed: 3 characters revealed per 10 ms tick — approximately 300 characters per second.
- Cleanup: the effect returns a cleanup function that clears the interval on unmount, preventing memory leaks when the window is closed.
The welcomeContent Template Literal
The full welcome message is defined as a tagged template literal at the top of HomeApp.js. It is divided into five sections:
| Section | Content |
|---|---|
| Greeting | # Hello, World! 👋 heading and a one-sentence mission statement |
| Quick Links | A Markdown list of four [label](href) links — About Me, Projects, Skills, Work History |
| Technical Details | A bullet list of the core technologies powering DevOS (React, Tailwind CSS, Framer Motion, custom Context) |
| Divider | A --- horizontal rule separating content from the tip |
| Tip | An italic hint reminding users they can drag, resize, and minimise windows |
components/apps/HomeApp.js:
Link Handling
The content<div> has an onClick handler that intercepts anchor clicks before the browser can navigate:
windowMap object translates each href value to a window ID recognised by WindowManager. Currently it falls back to an alert — replace the alert call with openWindow(windowMap[href], ...) using the useWindowManager hook to wire up real navigation.
The blinking cursor is a
<span> with the Tailwind classes animate-pulse inline-block w-2 h-4 bg-os-teal ml-1 align-middle. It appears immediately and continues blinking even after the typewriter animation finishes, giving the impression of an active terminal caret. Adjust the bg-os-teal class to any colour token to match your theme.