Project Explorer

Files

Story files

Browse the notes, research, decisions, and workshops used to develop the series.

Browse the files used to develop the story.

Search 577 documents about the world, characters, plot, research, decisions, workshops, and earlier ideas.

Current document iainreiddotdev/docs/BUILD_NOTES.md

Build Notes

Homepage

index.php is a thin composition. It loads the portfolio data, then requires one partial per region:

includes/partials/
  head.php           metadata, social cards, Person JSON-LD, no-flash theme script
  icons.php          the three inline SVG icons, drawn with currentColor
  site-header.php    compact sticky header, four section links, appearance toggle
  intro.php          role, name, statement, actions, and the concerns card
  work.php           the Selected work section
  project-entry.php  one project entry, used by work.php
  approach.php       the four principles and their per-project ties
  foundations.php    four grouped capability lists
  about.php          portrait and the note about the maker
  contact.php        address, copy control, profiles
  site-footer.php    footer and the Showdown trigger
  showdown.php       the Showdown dialog

Every fact comes from includes/portfolio.php and nowhere else. Edit portfolio content there; the header comment in that file documents which keys a project record takes and which blocks are optional.

Styling is assets/css/site.css (tokens, primitives, regions, responsive) and behaviour is assets/js/site.js. There is no package manager, bundler, or build step, and the page has no third-party runtime dependency.

What the page needs to keep working

  • The appearance toggle stores theme in localStorage and is applied by a

small inline script in head.php before first paint. Without JavaScript the page still follows prefers-color-scheme.

  • The Showdown dialog posts to showdown-gate.php, which is unchanged. The

riddle wording and the single response message must stay exactly as they are.

  • Colour is defined once per token in OKLCH, with the dark palette repeated

in two blocks (a prefers-color-scheme query and a [data-theme="dark"] selector) so the toggle can override the system in both directions. The prefers-contrast: more overrides are gated by appearance as well as contrast — see the comment there for why.

VibeKB

VibeKB is a supporting software project. Its public page lives at saas-lab/index.php (URL path /devsite/iainreiddotdev/saas-lab/ for deploy continuity). Update that page's copy in place; keep the existing layout and components. It and the account pages under auth/ and admin/ use assets/css/style.css, assets/css/saas-lab.css, assets/css/auth.css, and assets/js/app.js. The homepage does not, so those files stay in place and were not touched by the homepage redesign.

Seeds of the Throne Project Explorer

project-explorer/index.php reads the deployed repository root through includes/repository-explorer.php. The helper builds an allowlist from non-hidden .md files, so a query parameter is never used as an arbitrary filesystem path. Symlinks, hidden directories, non-Markdown files, and paths outside the repository are excluded.

The page renders common Markdown structures without a package or external runtime. Raw HTML is escaped. Resolvable relative Markdown links and Obsidian wiki links return to the explorer; external HTTP, HTTPS, and email links remain normal links. The folder tree uses native details and summary controls and the search is a server-rendered GET form, so both remain usable without JavaScript. Its only page-specific asset is project-explorer/assets/project-explorer.css; appearance behavior is reused from assets/js/site.js.

The front page also presents a spoiler-aware Story Completion summary. It reads the weekly TODO pointer, the current weekly checklist, and the completion workflow pointer directly from the deployed Markdown vault. Those records remain the source of truth: the page calculates progress from priority-task checkboxes and displays the current sweep and task without duplicating or modifying story state. Public-facing labels deliberately describe broad working fronts rather than unresolved story content. If any required source is unavailable, the module shows an unavailable state instead of inventing values. Its full-roadmap link opens docs/todo.html.

The public page intentionally has only two working areas after its introduction: the Story Completion summary and the repository explorer. The former build ledger was removed; its useful scope description and live document count now appear in the explorer introduction.

Retro (MEOWNET BBS)

retro/index.php is a self-contained joke page: a 1990s dial-up bulletin board about cats, linked from the homepage footer. It is one file plus assets/css/retro.css and assets/js/retro.js, and it uses none of the homepage's stylesheet, script, or partials — only includes/portfolio.php, and only for the escape helper and the sysop's real name and profile links, so those cannot disagree with the homepage.

All of its copy (bulletins, messages, file listing, doors, one-liners, stats) lives in arrays at the top of the page. Edit content there.

  • Screens are five role="tabpanel" sections driven by a role="tablist"

menu. Without JavaScript every screen renders stacked and readable; the script sets data-ready on the panel container and hides all but one.

  • Hotkeys 14, 0, and P are extras on top of the menu buttons, which

stay clickable and arrow-key navigable. They are ignored while a field has focus.

  • Phosphor green or amber, stored as retro-phosphor in localStorage and

driven by data-phosphor on <body>; every colour downstream is a token.

  • The artwork is text. The page requests no images at all, so the banner

must stay 65 columns wide — .banner__art sizes itself from the viewport on that assumption.

Deployment

The complete repository deploys to /home/iainmcok/public_html/devsite/; this application remains nested at /home/iainmcok/public_html/devsite/iainreiddotdev/. The cPanel task extracts git archive HEAD into that directory, so every tracked explorer file and every tracked Markdown document is included without maintaining a second file list.

Because the deploy never deletes, files the repository removed stay on the server. The retired three.js homepage (assets/js/vendor/, assets/js/workbench/, assets/js/doc.js, assets/css/workbench.css) is no longer referenced by any page, so a stale copy is inert — but it is about 950 KB of dead weight and can be removed over SSH:

rm -rf ~/public_html/devsite/iainreiddotdev/assets/js/vendor \
       ~/public_html/devsite/iainreiddotdev/assets/js/workbench \
       ~/public_html/devsite/iainreiddotdev/assets/css/workbench.css \
       ~/public_html/devsite/iainreiddotdev/assets/js/doc.js