Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/webmaster/llms.txt

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

The Blog page (/blog) faithfully recreates the look of a late-1990s phpBB or vBulletin forum board. A blue gradient table header sits above five alternating-row thread entries. Hot threads (top two) get a 🔥 icon; quieter threads get 📄. Each row shows reply count, view count, and last-post timestamp. Below the table, a bevel-button “New Thread” control and simple numeric pagination complete the illusion.

Route

PathComponent function
/blogme() in assets/main.js

Thread Data Array

All five threads are defined in the xe constant above me():
const xe = [
  {
    title:    "Why CSS Grid is better than tables (finally)",
    replies:  45,
    views:    1337,
    lastPost: "Today 10:23 AM",
  },
  {
    title:    "My thoughts on the new React Server Components",
    replies:  128,
    views:    5042,
    lastPost: "Yesterday 08:15 PM",
  },
  {
    title:    "HELP! How to center a div???",
    replies:  9001,
    views:    99999,
    lastPost: "10/20/2023",
  },
  {
    title:    "Nostalgia: Who remembers the <blink> tag?",
    replies:  32,
    views:    404,
    lastPost: "10/15/2023",
  },
  {
    title:    "Tutorial: Building a custom cursor in 2024",
    replies:  15,
    views:    256,
    lastPost: "10/01/2023",
  },
];
The replies: 9001 and views: 99999 values on the centering-a-div thread are deliberate internet humour (“It’s over 9000!”). The views: 1337 on the CSS Grid thread is leet-speak for “elite”. The views: 404 on the blink tag thread references HTTP 404.
The section title and a “Welcome back, Guest” widget are displayed in a flex row:
<div className="flex items-center justify-between mb-6">
  <h2 className="text-4xl text-white bg-blue-800 px-4 py-2 font-bold border-2 border-blue-900 shadow-[4px_4px_0_#000]">
    My Writings (Forum)
  </h2>
  <div className="font-pixel text-sm bg-white px-2 py-1 border border-black">
    Welcome back, <span className="font-bold text-blue-600">Guest</span>
  </div>
</div>

Forum Table

The table sits inside a bevel-container bg-silver p-1 wrapper. It uses border-collapse with per-cell borders for the classic forum grid look.

Header Row

<tr className="bg-gradient-to-b from-blue-600 to-blue-800 text-white font-pixel text-sm">
  <th className="p-2 text-left border border-blue-900 w-12">Icon</th>
  <th className="p-2 text-left border border-blue-900">Thread Title</th>
  <th className="p-2 text-center border border-blue-900 w-24">Replies</th>
  <th className="p-2 text-center border border-blue-900 w-24">Views</th>
  <th className="p-2 text-left border border-blue-900 w-40">Last Post</th>
</tr>

Thread Rows

Rows alternate between bg-blue-50 (even index) and bg-white (odd index). The hot-thread icon threshold is r < 2:
{xe.map((s, r) => (
  <tr key={r} className={r % 2 === 0 ? "bg-blue-50" : "bg-white"}>

    {/* Icon cell */}
    <td className="p-2 border border-blue-200 text-center text-xl">
      {r < 2 ? "🔥" : "📄"}
    </td>

    {/* Thread title cell */}
    <td className="p-2 border border-blue-200">
      <a href="#" className="text-blue-700 hover:text-red-600 hover:underline font-bold font-comic">
        {s.title}
      </a>
      <div className="text-xs text-gray-500 font-pixel mt-1">Started by Webmaster</div>
    </td>

    {/* Replies */}
    <td className="p-2 border border-blue-200 text-center font-pixel text-sm">{s.replies}</td>

    {/* Views */}
    <td className="p-2 border border-blue-200 text-center font-pixel text-sm">{s.views}</td>

    {/* Last post — random "UserXX" suffix */}
    <td className="p-2 border border-blue-200 font-pixel text-xs text-gray-600">
      {s.lastPost}<br />
      by <span className="text-blue-600">User{Math.floor(Math.random() * 99)}</span>
    </td>
  </tr>
))}
The User{Math.floor(Math.random() * 99)} in the Last Post cell generates a different random username on every render. This is intentional — it mimics an active forum where different users are always posting.
Thread titles use text-blue-700 by default and switch to text-red-600 hover:underline on hover — matching the classic vBulletin link behaviour.

Bottom Controls

Below the table, a flex row separates the “New Thread” button from the pagination:
<div className="mt-4 flex justify-between items-center font-pixel text-sm">
  <button className="bevel-button px-4 py-1 font-bold">New Thread</button>
  <div className="flex gap-1">
    <span className="px-2 py-1 bg-blue-800 text-white font-bold">1</span>
    <a href="#" className="px-2 py-1 bg-white border border-gray-400 hover:bg-gray-200">2</a>
    <a href="#" className="px-2 py-1 bg-white border border-gray-400 hover:bg-gray-200">3</a>
    <a href="#" className="px-2 py-1 bg-white border border-gray-400 hover:bg-gray-200">Next ></a>
  </div>
</div>
Page 1 is highlighted with bg-blue-800 text-white font-bold. Pages 2, 3, and the “Next >” link use bg-white border border-gray-400 hover:bg-gray-200.

Customisation Guide

// assets/main.js — append to the xe array
{
  title:    "My new blog post title",
  replies:  0,
  views:    1,
  lastPost: "Just now",
},
// The row will automatically receive the 📄 icon since r >= 2.
// To make it hot, insert it at index 0 or 1 in the array.

Build docs developers (and LLMs) love