Queue-North-Website/docs/history/HISTORY.md

6.7 KiB

History — Queue North Website

Status: Current
Owner: _null
Last reviewed: 2026-08-18
Governs: the narrative of how this project got to where it is
Review trigger: A decision reversed, a direction abandoned, or a rewrite

What this is for

Queue North Technologies had a working website: one large index.html, a hand-written stylesheet, and main.js doing hash-based routing. The content was good and the presentation was early-2000s. This repository is the rebuild — a Vite + React SPA with an Express API behind it, live at queuenorth.com.

That much is in the code. What is not in the code is which walls were already walked into, and that is what this file is for.

This is a record of then, never a description of now. That distinction is what makes it safe to leave alone as the project changes — a history document that gets edited to stay current is not a history, it is a second and competing description of the present.

If you find yourself updating a sentence here because the code changed, the sentence belongs somewhere else.

Decisions and their reasons

When What was decided Why, at the time
2026-05-11 Vite + React SPA, explicitly not Next.js The rebuild needed a fast client and a small Express API, not SSR or server components. docs/planning/REQUIREMENTS.md states it as a requirement rather than a preference, because it kept getting re-proposed
2026-05-11 better-sqlite3 rather than a hosted database Two forms and two tables. A managed database would have been more infrastructure than the product has data
2026-05-12 Light-first B2B layout with strategic dark navy, evolving the palette rather than replacing it docs/design/REDESIGN_REVIEW.md: the original read as a developer portfolio, and B2B buyers decide on trust in seconds. Rip-and-replace to a light theme would have thrown away the navy brand equity along with the problem
2026-05-13 Zoho forwarding is fire-and-forget, behind SQLite SQLite always writes first. A CRM outage must never cost a lead — the local row is the record and Zoho is a best-effort overlay
2026-05-17 The standalone /8x8 page was merged into the UCaaS and CCaaS service entries Issue #32. A partner page nobody navigated to, when the partnership is better evidenced inside the services it actually powers
2026-06-14 Zoho switched from the REST/OAuth path to WebToLead as the default mode ZOHO_FORWARDING_MODE=webtolead. The OAuth path works and is kept as a standby; WebToLead needed no token lifecycle for what is a single lead form
2026-08-01 Every route is prerendered at build time, and the privacy policy has a server-rendered fallback Meta's crawler does not run JavaScript. See docs/architecture/README.md
2026-08-18 Adopted the project template; retired phase-versioning See below
2026-08-18 queuenorth.com is the permanent public origin, with qn.isnull.dev kept as a second ingress to the same container Asked and answered by _null while closing out the template adoption. It settles #212 and it corrected a mistake made earlier the same day: the first draft of docs/OPERATIONS.md asserted queuenorth.com was not this deployment, written from a DNS lookup rather than a request. Both hostnames serve the identical bundle and this server's own /api/health shape; 24.41.108.95 is this network's own public IP
2026-08-18 The Forgejo repository was made private Adoption committed the previously-gitignored internal documents into docs/. Those hold the agent narrative and internal findings about the client's own marketing claims (#108, #110), which is not material for a public tree. null/fruit-fall was already private and reports to the Command Center normally, so nothing was lost by it

What was tried and dropped

Phase-versioning — the minor number was the phase number

PROJECT.md and STRUCTURE.md both carried the rule: Phase 1 releases are 0.1.x, Phase 5 releases are 0.5.x, and "do not use unrelated semantic version bumps during the overhaul". Bishop was made responsible for enforcing it across package.json, PROJECT.md and HISTORY.md.

It drifted twice, and the second time nobody noticed for two and a half months. At adoption package.json said 0.8.3 while the last four commit subjects said batch 0.9.0 through batch 0.9.3, and both PROJECT.md and STRUCTURE.md still described the project as being in Phase 5.

The rule was not wrong; it was unenforceable. It asked four files to agree, with a human check as the only mechanism, and a rule that needs a person to remember it is a rule that decays. Milestones in the tracker now hold what the phase number was carrying — a batch is a milestone, and closing it is what marks the batch shipped — so the version number no longer has to encode anything.

package.json was corrected to 0.9.3 on adoption to match the commits.

What replaced it: nothing, deliberately. Version numbers are now just version numbers. docs/WORK_CYCLE.md holds what happens at the end of a piece of work.

The markdown backlog

Work was planned in FUTURE.md, with a parallel changelog in HISTORY.md, an agent log in DEVELOPMENT_LOG.md, phase checklists in PROJECT.md and README.md, and 205 issues in Forgejo. Six records of what was happening, and the tracker — the one with atomic state and real timestamps — was the one nothing pointed at.

The specific damage: 205 issues sat in zero milestones, so privacyllc.dev reported the project as not adopted rather than as 87% complete, and the severity labels were spelled P0 Critical / P1 High / P2 Medium, which no query matches.

The markdown records were retired on 2026-08-18. What was reasoning is now in docs/history/BATCH_LEDGER.md; what was work is in the tracker.

The agent pipeline — kept, not dropped

Scarlett designs, Neo implements, Private Hudson reviews security, Bishop verifies, Ripley owns git. Agents do not touch git; Ripley commits and pushes.

This survived adoption because the project earned it — .learnings/ holds four agents' accumulated notes and error logs against it — and because nothing in the template contradicts it. docs/WORK_CYCLE.md says what must be true when a piece of work ends; the pipeline says who does which part. They are different questions.

The one piece of the pipeline that did not survive is Bishop's version-checking duty, which went with phase-versioning above.

What this file is not

  • Not the plan. That is docs/planning/PROJECT_PLAN.md.
  • Not the work list. Open work lives in the tracker as milestones and issues.
  • Not a changelog. Dated entries go in docs/history/DEVELOPMENT_LOG.md.