The Blog page — titled “Web Log” in the UI — is a love letter to early-2000s personal blogging culture. Its design is directly inspired by LiveJournal and similar platforms of the era: each post entry includes not just a title and date, but also a mood field (complete with a tiny emoji) and a music field showing what the author was listening to when they wrote it. The page header mimics the banded, pastel aesthetics of classic blog skins, and post excerpts are rendered in serif or pixel fonts for maximum authenticity.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/y2k-web/llms.txt
Use this file to discover all available pages before exploring further.
Blog Post Data Structure
Posts are stored as an array of objects at the top of the Blog component. Each object has the following shape:| Field | Type | Description |
|---|---|---|
id | number | Unique identifier used as the React list key |
title | string | Post headline displayed in the entry header |
date | string | Human-readable date string (e.g. "May 28, 2026 @ 11:45 PM") |
mood | string | Current mood label shown below the date |
music | string | ”Currently playing” track shown below the mood |
content | string | Full post body text displayed inside the modal |
Post List Rendering
Each post is mapped to a summary card that shows the title, date, mood, and music fields alongside a truncated excerpt and a “Read More” button. The “Read More” button setsselectedPost in component state, which triggers the modal to open:
Full-Post Modal with Framer Motion
Clicking “Read More” stores the selected post object in local state.AnimatePresence from Framer Motion watches for the presence of selectedPost and animates the modal WindowFrame in and out with a scale + opacity transition:
setSelectedPost(null). Setting state to null causes AnimatePresence to detect the child’s removal and play the exit animation before unmounting.
Route Registration
The Blog component (Vp in the compiled bundle) is mounted at /blog: