Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/dark-retro-webpage/llms.txt

Use this file to discover all available pages before exploring further.

The Case Studies page (/case-studies) presents detailed project retrospectives in a long-form narrative format. Each case study uses four distinct visual styles for its sections — a Win98 error dialog for the problem statement, a Wikipedia-style infobox for the goals, an IRC chat log for the process, and metric cards for results. A sticky sidebar table of contents anchors the reader as they scroll through the narrative.

Layout structure

The page uses a two-column layout on large screens (md:flex-row): a sticky sidebar on the left (md:w-64) and the main content area filling the remaining space (flex-1). On mobile, the columns stack with the sidebar rendered above the content.
┌────────────────────┬──────────────────────────────────┐
│  Sticky TOC        │  Case study narrative            │
│  ─────────────────│  ─────────────────────────────── │
│  01. Problem       │  01. Problem (Win98 error)       │
│  02. Goal          │  02. Goal (Wikipedia infobox)    │
│  03. Process       │  03. Process (IRC chat log)      │
│  04. Result        │  04. Result (metric cards)       │
└────────────────────┴──────────────────────────────────┘
The sidebar is a <div className="sticky top-24 bevel-window p-4 bg-[#0c0814]"> panel titled "INDEX.HTML". It renders an ordered list of section anchors that correspond to the four case study sections. The active section is highlighted in text-[#22d3ee] with a blinking dot indicator; inactive items are in text-[#94a3b8].
// Sidebar TOC pattern (from assets/main.js)
<div className="sticky top-24 bevel-window p-4 bg-[#0c0814]">
  <h3 className="font-display text-sm text-[#ff2bd6] mb-4">INDEX.HTML</h3>
  <ul className="font-mono text-sm space-y-3">
    <li className="flex items-center gap-2 text-[#22d3ee]">
      <span className="w-2 h-2 bg-[#22d3ee] rounded-full blink" /> 01. Problem
    </li>
    <li className="flex items-center gap-2 text-[#94a3b8] hover:text-[#e2e8f0] cursor-pointer">
      <span className="w-2 h-2 border border-[#94a3b8] rounded-full" /> 02. Goal
    </li>
    <li className="flex items-center gap-2 text-[#94a3b8] hover:text-[#e2e8f0] cursor-pointer">
      <span className="w-2 h-2 border border-[#94a3b8] rounded-full" /> 03. Process
    </li>
    <li className="flex items-center gap-2 text-[#94a3b8] hover:text-[#e2e8f0] cursor-pointer">
      <span className="w-2 h-2 border border-[#94a3b8] rounded-full" /> 04. Result
    </li>
  </ul>
</div>

The four section styles

01. Problem — Win98 error dialog

The problem section is rendered as a <Win98Window> titled "01_The_Problem.txt". The section body describes the legacy codebase state, pain points, or business problem in a narrative paragraph, preceded by a red-tinted error headline. Visual characteristics:
  • Window title: "01_The_Problem.txt"
  • Headline: text-lg font-bold text-red-400
  • Error box: bg-black p-4 font-mono text-sm text-red-500 border border-red-900
  • Body text: font-sans text-[#c0c8d8]
// Problem section pattern (from assets/main.js)
<Win98Window title="01_The_Problem.txt">
  <div className="font-sans space-y-4">
    <p className="text-lg font-bold text-red-400">
      CRITICAL ERROR: Legacy Codebase Detected
    </p>
    <p>
      The client's existing platform was built on a 10-year-old monolithic
      architecture. Page load times were exceeding 8 seconds, and the
      development team was terrified to deploy changes because everything
      was tightly coupled.
    </p>
    <div className="bg-black p-4 font-mono text-sm text-red-500 border border-red-900">
      Fatal Exception 0E has occurred at 0028:C0011E36 in VxD VMM(01).
      The current application will be terminated.
    </div>
  </div>
</Win98Window>

02. Goal — Wikipedia infobox style

The goal section adopts a Wikipedia-style layout: narrative text on the left and a “Quick Facts” infobox on the right. The infobox is rendered as a w-48 panel with a bg-[#475569] header row, mimicking the classic Wikipedia article sidebar. Visual characteristics:
  • Two-column layout: prose left, infobox right (flex flex-col md:flex-row gap-6)
  • Infobox: w-48 border border-[#475569] bg-[#0c0814] p-3 text-sm font-sans
  • Infobox header: font-bold text-center bg-[#475569] text-white mb-2
  • Label/value rows: flex justify-between border-b border-[#475569] py-1
  • Label text: text-[#94a3b8]
// Goal section — Wikipedia infobox pattern (from assets/main.js)
<div className="border border-[#475569] bg-[#1a0f24] p-6 relative">
  <div className="flex flex-col md:flex-row gap-6">
    {/* Narrative prose */}
    <div className="flex-1 font-sans space-y-3">
      <p>
        We needed to incrementally migrate the frontend to a modern React
        stack without disrupting existing users.
      </p>
    </div>

    {/* Wikipedia-style infobox */}
    <div className="w-48 border border-[#475569] bg-[#0c0814] p-3 text-sm font-sans">
      <div className="font-bold text-center bg-[#475569] text-white mb-2">
        Quick Facts
      </div>
      <div className="flex justify-between border-b border-[#475569] py-1">
        <span className="text-[#94a3b8]">Timeline:</span>
        <span>6 Months</span>
      </div>
      <div className="flex justify-between border-b border-[#475569] py-1">
        <span className="text-[#94a3b8]">Role:</span>
        <span>Lead FE</span>
      </div>
    </div>
  </div>
</div>

03. Process — IRC chat log

The process section renders the development timeline as a simulated IRC chat log, with timestamps, usernames, and message lines. It uses a left border accent in border-[#22d3ee] and a dark bg-[#0c0814] background. Visual characteristics:
  • Background: bg-[#0c0814] border-l-4 border-[#22d3ee] p-6
  • Monospace font throughout: font-mono text-sm
  • Timestamps: text-[#a855f7] in [HH:MM] format
  • Username: text-[#a855f7] or text-[#94a3b8] followed by message
  • System messages: text-[#a3ff12] italic
  • Build success message: text-[#ff2bd6]
// IRC chat log entry pattern (from assets/main.js)
<div className="bg-[#0c0814] border-l-4 border-[#22d3ee] p-6 font-mono text-sm space-y-4">
  <h2 className="text-xl text-[#22d3ee] mb-4 font-bold">
    03. The Process (Chat Logs)
  </h2>
  <div className="space-y-2">
    <div>
      <span className="text-[#a855f7]">[10:00]</span>{" "}
      &lt;Alex&gt; Starting the strangler fig pattern implementation today.
    </div>
    <div className="text-[#a3ff12] italic">
      * Alex commits 4,000 lines of code *
    </div>
    <div>
      <span className="text-[#ff2bd6]">[14:30]</span>{" "}
      &lt;System&gt; Build successful. Deploying to staging.
    </div>
  </div>
</div>

04. Result — metric cards

The result section displays key project outcomes as a grid of metric cards inside a bevel-window wrapper. Each card shows a large headline number and a short label. Visual characteristics:
  • Outer wrapper: bevel-window p-2 bg-[#c0c8d8]
  • Inner container: bg-black p-6 text-center border-2 border-dashed border-[#475569]
  • Section title: font-display text-xl text-[#a3ff12]
  • Grid: grid grid-cols-3 gap-4 font-mono
  • Metric number: large colored text — text-3xl text-[#22d3ee], text-3xl text-[#ff2bd6], or text-3xl text-[#a3ff12]
  • Label: text-xs text-[#94a3b8]
// Metric card grid (from assets/main.js)
<div className="bevel-window p-2 bg-[#c0c8d8]">
  <div className="bg-black p-6 text-center border-2 border-dashed border-[#475569]">
    <h2 className="font-display text-xl text-[#a3ff12] mb-4">04. THE RESULT</h2>
    <div className="grid grid-cols-3 gap-4 font-mono">
      <div className="bg-[#1a0f24] p-4 border border-[#475569]">
        <div className="text-3xl text-[#22d3ee] mb-2">1.2s</div>
        <div className="text-xs text-[#94a3b8]">Avg Load Time</div>
      </div>
      <div className="bg-[#1a0f24] p-4 border border-[#475569]">
        <div className="text-3xl text-[#ff2bd6] mb-2">100</div>
        <div className="text-xs text-[#94a3b8]">Lighthouse Score</div>
      </div>
      <div className="bg-[#1a0f24] p-4 border border-[#475569]">
        <div className="text-3xl text-[#a3ff12] mb-2">0</div>
        <div className="text-xs text-[#94a3b8]">Downtime</div>
      </div>
    </div>
  </div>
</div>
The example case study — PROJECT_PHOENIX — achieved a 1.2 s average load time, a Lighthouse score of 100, and zero downtime during the migration.

Adding a case study

The page currently renders a single hardcoded case study. To add another, duplicate the narrative section blocks in assets/main.js and add a corresponding entry to the sidebar TOC list.
// In assets/main.js — case study data
const caseStudy = {
  title: "PROJECT_PHOENIX",
  subtitle: "Deep Dive Log #001",
  problem: "The client's existing platform was built on a 10-year-old monolithic architecture...",
  goal: {
    body: "We needed to incrementally migrate the frontend...",
    facts: [
      { label: "Timeline", value: "6 Months" },
      { label: "Role",     value: "Lead FE"  },
    ],
  },
  processLog: [
    { time: "10:00", user: "Alex",   text: "Starting the strangler fig pattern implementation today." },
    { time: "10:05", user: "Client", text: "Sounds good. Will the old URLs still work?" },
    { time: "14:30", user: "System", text: "Build successful. Deploying to staging.", accent: "#ff2bd6" },
  ],
  results: [
    { value: "1.2s", label: "Avg Load Time",   color: "#22d3ee" },
    { value: "100",  label: "Lighthouse Score", color: "#ff2bd6" },
    { value: "0",    label: "Downtime",          color: "#a3ff12" },
  ],
};
Only one case study is shown at a time in the current implementation. If you add multiple entries, add a navigation UI (e.g., a list of .bevel-button links at the top of the page) to let visitors switch between them.

Customization

Add IRC log entries: Append objects to the processLog array. Each entry needs time, user, and text. For system messages use an accent color like #a3ff12 to render them in italic lime text. Change result metric colors: Update the color field on each result entry. The value is applied directly as the text color on the large metric number. Expand the infobox: Add more { label, value } objects to the facts array to extend the Wikipedia-style quick-facts box. Add a fifth section: Create a new section block and add a corresponding anchor item to the sidebar TOC following the 01–04 naming pattern.

Projects

Overview grid of all portfolio projects

Writing

Blog posts in three distinct retro visual styles

Skills

Technology proficiency organized by category

Contact

Contact form and guestbook

Build docs developers (and LLMs) love