Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/neocities-dev/llms.txt

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

The Writing page (READING_ROOM.EXE) presents the developer’s blog posts as a deck of physical cards stacked on top of each other — each slightly offset in position to create a layered visual effect. Clicking any card expands it to fill the entire panel. A “Close Window” button collapses it back into the stack. The interaction pattern mirrors flipping through a stack of index cards or expanding a window on a retro desktop.

What’s on this page

Blog Entry Overview

Three entries are defined in a static array, each with an associated WindowPanel color:
FileTitleTagDateColor
bug-report-001.mdThe Case of the Disappearing DivTECHNICAL10.24.23cyan
reflection-q3.mdWhy I Stopped Using Divs for ButtonsREFLECTION09.15.23magenta
architecture-v2.mdRefactoring the MonolithREPORT08.02.23lime

Stacked Card Layout

All three cards are positioned absolute within a relative container (h-[calc(100%-4rem)]). When collapsed, each card’s top, left, and z-index are derived from its array index, creating a physical stacking effect:
// For each card at index i, when NOT expanded:
const topOffset   = i * 40;   // px — each card is 40px lower than the one above
const leftOffset  = i * 20;   // px — each card is 20px to the right
const zIndex      = entries.length - i; // top card has highest z-index

// When expanded (active card):
const topOffset   = 50;  // pulls card near the top of the container
const leftOffset  = 0;
const zIndex      = 50;  // floats above all other cards
{entries.map((entry, i) => {
  const isExpanded = expandedId === entry.id;
  const zIndex    = isExpanded ? 50 : entries.length - i;
  const top       = isExpanded ? 0  : i * 40;
  const left      = isExpanded ? 0  : i * 20;

  return (
    <div
      key={entry.id}
      className={`absolute transition-all duration-300 ease-in-out ${
        isExpanded
          ? "inset-0"
          : "w-full md:w-3/4 h-64 cursor-pointer hover:-translate-y-2"
      }`}
      style={{ top: `${top}px`, left: `${left}px`, zIndex }}
      onClick={() => !isExpanded && setExpanded(entry.id)}
    >
      <WindowPanel title={entry.file} titleBarColor={entry.color} className="h-full shadow-2xl">
        {/* card contents */}
      </WindowPanel>
    </div>
  );
})}
Cards that are not expanded sit at w-full md:w-3/4 h-64 and gain a hover:-translate-y-2 lift effect on cursor hover — reinforcing the physical card metaphor. Only the topmost card (index 0) is immediately clickable without being obscured; lower cards peek out and become clickable as expected.

Card Content Structure

Each card (expanded or collapsed) renders these elements:
  1. Tag badge — positioned absolute top-0 right-0, monospace 10px text in the card’s accent color, with a matching border.
  2. Datefont-mono text-xs text-y2k-textMuted above the title.
  3. Titlefont-pixel text-3xl text-white.
  4. Body text — truncated to 3 lines (line-clamp-3) when collapsed; full scrollable text when expanded.
<div className="relative h-full flex flex-col">
  {/* Tag badge */}
  <div className={`absolute top-0 right-0 font-mono text-[10px] px-2 py-1 border border-current text-y2k-${entry.color}`}>
    {entry.tag}
  </div>

  {/* Date + Title */}
  <div className="mt-6 mb-4">
    <div className="font-mono text-xs text-y2k-textMuted mb-2">{entry.date}</div>
    <h2 className="font-pixel text-3xl text-white">{entry.title}</h2>
  </div>

  {/* Body — line-clamped when collapsed, scrollable when expanded */}
  <div className={`font-sans text-sm leading-relaxed text-y2k-textMuted ${
    isExpanded ? "overflow-y-auto flex-1" : "line-clamp-3"
  }`}>
    {entry.content}
  </div>

  {/* Close button — only rendered when expanded */}
  {isExpanded && (
    <div className="mt-4 pt-4 border-t border-y2k-panelDark flex justify-end">
      <button
        onClick={(e) => { e.stopPropagation(); setExpanded(null); }}
        className="bevel-button px-4 py-1 font-pixel text-lg bg-y2k-panel text-white hover:text-y2k-magenta"
      >
        Close Window
      </button>
    </div>
  )}
</div>
When a card is expanded, the body text continues beyond the opening paragraph with Lorem ipsum placeholder continuation text. This is intentional in the source — the three real opening sentences establish each post’s topic, and the Lorem ipsum filler simulates a longer article body without requiring fully written content.
The Close Window button calls e.stopPropagation() to prevent the click from bubbling up to the card’s own onClick handler, which would otherwise immediately re-expand the card after collapsing it.

Individual Entry Summaries

bug-report-001.md — The Case of the Disappearing Div

Tag: TECHNICAL  ·  Date: 10.24.23  ·  Color: cyanA debugging post-mortem about tracing a 4-hour CSS z-index mystery that turned out to be a typo in an overflow property. Covers stacking contexts and what the author learned from the investigation.

reflection-q3.md — Why I Stopped Using Divs for Buttons

Tag: REFLECTION  ·  Date: 09.15.23  ·  Color: magentaA reflective piece on accessibility and semantic HTML. The author recounts building custom UI components early in their career and argues that semantic HTML is “the ultimate developer lifehack.”

architecture-v2.md — Refactoring the Monolith

Tag: REPORT  ·  Date: 08.02.23  ·  Color: limeA technical report on breaking a large legacy React application into manageable, feature-based modules — without breaking the build in the process.

Layout Structure

  • Outer: h-full relative max-w-5xl mx-auto
  • Title: READING_ROOM.EXE in font-pixel text-4xl text-white
  • Card container: relative h-[calc(100%-4rem)] — sized to fill below the title
  • All cards are absolute inside this container; transition-all duration-300 ease-in-out drives the expand/collapse animation
The 300ms CSS transition on top, left, width, and height (triggered by switching between inset-0 and explicit pixel values) creates a smooth “window maximizing” animation that reinforces the desktop OS metaphor.

Build docs developers (and LLMs) love