Writing Page: Journal, GeoCities, and Forum Blog Posts
The Writing page lists blog posts in three retro visual styles — journal, GeoCities, and forum thread — each with mood, music metadata, and an archive sidebar.
Use this file to discover all available pages before exploring further.
The Writing page (/writing) is a blog post listing that deliberately avoids a uniform card design. Each post is rendered in one of three distinct retro visual styles — a dark journal entry, a garish GeoCities-inspired panel, or a Windows 98–style forum thread — giving the feed an eclectic, handcrafted feel. Every post also carries metadata fields for mood (as an emoji) and currently-playing music, reinforcing the personal-web aesthetic. A sidebar provides an archive breakdown by year and a tag cloud for browsing by category.
The page is a two-column layout on large screens: the main post list on the left (lg:col-span-3) and a sticky archive sidebar on the right (lg:col-span-1). On smaller screens, both columns stack vertically.
┌───────────────────────────────┬──────────────────┐│ Post list │ Archive sidebar ││ (journal | geocities | forum)│ ─────────────── ││ ───────────────────────── │ 2026 ............││ Post 1 (journal style) │ 2025 ............││ Post 2 (geocities style) │ 2024 ............││ Post 3 (forum style) │ ││ ... │ Tags │└───────────────────────────────┴──────────────────┘
The journal style evokes a personal diary or dev log. The card has a dark purple background and a thick left accent border in the site’s --purple color.Visual characteristics:
Background: bg-[#1a0f24] with border-l-4 border-[#a855f7]
Title: font-mono in text-[#e2e8f0]
Mood + music metadata line: small text-xs row in text-[#94a3b8]
Sample post using this style:“Why I Still Use CSS Variables in 2026” — mood: caffeinated ☕, music: The Midnight - Sunset
The GeoCities style is deliberately loud and nostalgic, mimicking mid-90s personal homepages with tiled background patterns, ridge-style borders, and brightly colored text.Visual characteristics:
Background: tiled PNG pattern via bg-[url('data:image/png;base64,...')]
Sample post using this style:“Rebuilding the Webring for Modern React” — mood: nostalgic 📼, music: Boards of Canada - Dayvan Cowboy
The forum style mimics a classic Windows 98 / early-2000s bulletin board thread. It uses the .bevel-window class and renders a blue bg-[#000080] title bar identical to the <Win98Window> chrome, with the post body in a padded content area below.Visual characteristics:
Outer wrapper: bevel-window p-0
Title bar: bg-[#000080] text-white p-2 font-bold text-sm flex justify-between
Body: p-6 with font-sans leading-relaxed text-[#c0c8d8]
Mood + music: same font-mono text-xs metadata row as other styles
Below the year list, a wrapping row of tag pills. Clicking a tag filters posts by that category. Current tags include React, CSS, Rants, Tutorials, and Life.
Blog posts are defined in an array inside the Writing component in assets/main.js. To publish a new post, append an object to the array:
// In assets/main.js — posts data arrayconst posts = [ { id: 1, title: "Why I Still Use CSS Variables in 2026", date: "10/24/2026", style: "journal", mood: "caffeinated ☕", music: "The Midnight - Sunset", excerpt: "Tailwind is great, but sometimes you just need the raw power...", }, // Add your new post here: { id: 4, title: "My New Post Title", date: "11/01/2026", style: "forum", // "journal" | "geocities" | "forum" mood: "focused 🎯", music: "Aphex Twin - Windowlicker", excerpt: "Opening paragraph of the post...", },];
Change which posts use which style: Update the style field on any post object to "journal", "geocities", or "forum" to reassign its visual presentation.Add a new style variant: Add a new style string (e.g., "newspaper") to the style discriminator and add a new conditional rendering branch in the post map function in assets/main.js.Reorder the archive years: The sidebar year list is derived from the posts array. To add a year with zero posts to the archive, you can manually add it to a static archiveYears array defined in the component.Disable the mood/music metadata: Remove the metadata line (mood, music) from all three style renderers to create a cleaner listing.