From 3d5b36283db3d85165e0268b84c3eb66ecd66479 Mon Sep 17 00:00:00 2001 From: Kol Tregaskes Date: Tue, 19 May 2026 15:02:15 +0100 Subject: [PATCH 1/4] feat: add Zine prototype (May 2026 design pack) Self-contained vanilla port of StackScout Prototype.html under prototype/ implementing Phase 1 of CLAUDE-HANDOFF-2026-05-zine.md: - 5-mood palette with localStorage persistence - Stack Scout wordmark + accent dot (two words, no issue number) - Cycling lead, sparklines, hover stripes, magnetic CTA, cursor spotlight - Film grain, marquee, live UTC clock, count-ups - Home rendered with placeholder data; Releases/Wire/List/Subscribe stubbed Adds DESIGN-2026-05-zine.md and CLAUDE-HANDOFF-2026-05-zine.md alongside the existing DESIGN.md so the new design spec is in-repo without overwriting the legacy spec. Live index.html is unchanged. Design pack source: W:\Websites\LOCAL-ONLY\stackscout\design-2026-05-19\ Source session: WEBSITE CODER (Linear KOL-533 family) Co-Authored-By: Claude Opus 4.7 --- CLAUDE-HANDOFF-2026-05-zine.md | 108 +++ DESIGN-2026-05-zine.md | 224 +++++++ prototype/README.md | 50 ++ prototype/index.html | 1121 ++++++++++++++++++++++++++++++++ 4 files changed, 1503 insertions(+) create mode 100644 CLAUDE-HANDOFF-2026-05-zine.md create mode 100644 DESIGN-2026-05-zine.md create mode 100644 prototype/README.md create mode 100644 prototype/index.html diff --git a/CLAUDE-HANDOFF-2026-05-zine.md b/CLAUDE-HANDOFF-2026-05-zine.md new file mode 100644 index 0000000..feefe0e --- /dev/null +++ b/CLAUDE-HANDOFF-2026-05-zine.md @@ -0,0 +1,108 @@ +# Stack Scout — Handoff to Claude Code + +This pack is for Claude Code to build the production site from. Read `DESIGN.md` first for the design spec; this file covers _how to ship it_. + +## What this is + +A complete, working HTML prototype at `StackScout Prototype.html` plus the design system in `DESIGN.md`. The prototype is build-with-Babel-in-browser React for iteration speed; production must be vanilla HTML/CSS + a thin JS layer, matching the existing `stackscout/` codebase pattern. + +## What you're replacing + +The existing `stackscout/` repo: +- builds a public site from `content/stackscout/site-source.json` + `tools-source.json` + `updates-source.json` +- via `scripts/build-stackscout.js` → static HTML in `index.html`, `catalog/`, `categories/`, etc. +- with `styles.css` + `app.js` providing the chrome +- targeting GitHub Pages + +Keep the shared source layer. Replace the chrome + page templates + IA with the design from this prototype. + +## Build order + +### Phase 1 · Shell + palette (~half day) + +1. Port `wireframes/zine-shell.jsx`'s palette + animation system to vanilla CSS custom properties + a tiny JS module. + - 5 palette presets are five CSS custom-property classes (`.mood-graphite`, `.mood-midnight`, etc.) on ``. + - Mood swap = swap class on ``. Persist to `localStorage`. Read on `DOMContentLoaded`. + - Pull `--ink`, `--muted`, `--rule`, `--rule-strong` to `:root`. Mood classes only set `--bg` and `--accent`. +2. Masthead: wordmark + dot + nav + mood toggle. No issue number, no tagline. Active page state via `data-page` attribute on ``. +3. Footer: live UTC clock chip + "Sources & method →" link to `/sources/`. Marquee with the 6 manifesto lines, CSS-only. +4. Page-header strip: breadcrumb on the left, configurable right slot. Becomes a partial in your template engine. +5. CSS keyframes: `ss-reveal-in`, `ss-rule-in`, `ss-pulse`, `ss-marquee-scroll`, `ss-text-cycle-in`, `ss-spark-rise`. All five live in one stylesheet block. + +### Phase 2 · Pages from source manifests (~1–2 days) + +Build templates for the 6 pages. Each page reads from the source layer and renders the markup the prototype shows. + +| Page | Source | Template should do | +|---|---|---| +| `index.html` (home) | `updates-source.json` (latest 4), `tools-source.json` (5 setlist + 5 list) | Cycling lead uses 4 most recent wire items. Setlist = next-90-days releases. Wire = last 48h. | +| `releases/index.html` | `tools-source.json` | Group by `releaseWindow` (week / month / quarter). Calendar view is a separate URL param or `#calendar` hash. | +| `wire/index.html` | `updates-source.json` | Paginated. Filter via query string (`?kind=funding`). | +| `list/index.html` | `tools-source.json` | Ranked list. Manual rank field; default order if missing. | +| `subscribe/index.html` | static + archive from `updates-source.json` grouped by week | Form posts to whatever subscribe endpoint Kol picks. | +| `sources/index.html` | new `sources-source.json` (Claude Code creates the schema) | Grouped Primary / Secondary / Aggregators + method explainer. | + +### Phase 3 · Filters and tags (~half day) + +The filter pills in the prototype are visual-only. Make them work. + +1. Reads from query string on load. +2. Updates query string + filters DOM on click (no router needed). +3. Tag chips on tool cards / wire items are anchor tags to the filtered URL. + +### Phase 4 · Real data hookup (Kol) + +The prototype uses placeholder data with intentionally fixed dates. Replace with: + +- `tools-source.json` entries — Claude 4.5, Cursor 2.5, GPT-5.5, Suno v5.5, Gemini 3.1 Pro/Flash, etc. +- `updates-source.json` — wire items from official changelogs only. +- `sources-source.json` — new file; see Sources page in prototype for shape. + +## Things to preserve from the prototype + +| Interaction | Where in prototype | +|---|---| +| Mood toggle (5 swatches) | `zine-shell.jsx` → `ColorToggle` | +| Cycling lead (4 headlines, blur-fade, hover-pause, click-to-jump dots) | `zine-extras.jsx` → `CyclingLead` | +| Magnetic CTA | `zine-extras.jsx` → `MagneticCta` | +| Sparkline | `zine-extras.jsx` → `Sparkline` | +| Count-up numbers | `zine-extras.jsx` → `CountUp` | +| Cursor spotlight on home hero | `zine-shell.jsx` → `Spotlight` | +| Hover stripes on rows | `zine-shell.jsx` → `HoverStripe` | +| Footer marquee, pause on hover | `zine-shell.jsx` → `FooterMarquee` | +| Live UTC clock | `zine-shell.jsx` → `useUtcClock` | +| Film grain overlay | `.ss-grain` class on `` | +| Page transitions | 200ms opacity + 4px translate on `
` swap | + +## Things to drop from the prototype + +- React + Babel — the prototype runs these in-browser for speed. Production is vanilla. +- The `ZineShell` state-machine routing — real URLs only. +- The hard-coded `DATA_HOME` / `DATA_RELEASES` / `DATA_WIRE` / `DATA_LIST` / `DATA_SOURCES` constants — read from the shared source layer. +- `Spotlight`'s mousemove handler attached to a ref — port as a one-line event listener on the home hero element. + +## Things to confirm with Kol before shipping + +See `DESIGN.md` § 7 "Open questions for Kol". + +In particular: + +- **Domain** for the wordmark. +- **List page ranking** — manual `rank` field in `tools-source.json` is the assumption. +- **Sources schema** — make a draft `content/stackscout/sources-source.json` based on the Sources page and let Kol fill it. + +## Acceptance checklist + +- [ ] 6 pages render from source manifests, no hard-coded content in templates. +- [ ] 5 palette moods work, persist across reloads. +- [ ] Filter pills filter (query string + DOM update). +- [ ] Calendar view of Releases works. +- [ ] Sources page renders Primary / Secondary / Aggregators with method explainer. +- [ ] All animations from the table above are intact. +- [ ] No 2px borders, no boxed cards (hairlines only). +- [ ] Every Wire and Release item shows a primary source. +- [ ] No fake decimal scores; verdict labels only. +- [ ] No "Issue 026" or "field log for the AI stack" in the masthead — these were design-round artefacts. +- [ ] Wordmark reads "Stack Scout" (two words), not "StackScout". +- [ ] Lighthouse desktop ≥ 95 perf, ≥ 95 a11y. +- [ ] Service worker + PWA install still works (already in `pwa.js`, `service-worker.js`). diff --git a/DESIGN-2026-05-zine.md b/DESIGN-2026-05-zine.md new file mode 100644 index 0000000..934c166 --- /dev/null +++ b/DESIGN-2026-05-zine.md @@ -0,0 +1,224 @@ +# Stack Scout — Design specification + +**Status:** Round 03 — page-by-page prototype, ready for Claude Code build +**Owner:** Kol +**Designer pass:** Claude (Anthropic) +**Last updated:** 19 May 2026 + +The prototype that this document describes lives at `StackScout Prototype.html` with all components under `wireframes/`. The existing `stackscout/` codebase (vanilla HTML + `styles.css` + `app.js` driven by JSON manifests) is the production target — this design replaces the chrome and IA of that codebase but keeps the shared source layer underneath. + +--- + +## 1. Identity + +| | | +|---|---| +| **Name** | Stack Scout (two words, not "StackScout") | +| **Tagline** | _A field log for the AI stack._ (Used sparingly — not in every header.) | +| **Tone** | Editorial · independent · used-not-listed · sharp without being shouty | +| **Mood** | Dark editorial. Closer to a printed broadsheet at night than a SaaS dashboard. | +| **What it is not** | A directory · an aggregator · "Product Hunt for AI" · ad-funded | + +The page identifies the site to the reader with the wordmark + accent dot in the masthead. No issue numbers in the masthead (these belonged to a previous round and have been removed). The tagline appears only on the Subscribe and Sources pages where it earns its place. + +--- + +## 2. Information architecture + +Top-level navigation, left to right in the masthead: + +| Slug | Label | What it is | +|---|---|---| +| `home` | Home | Front page — cycling lead news, the day's wire, the setlist of upcoming releases, the weekly stance. | +| `releases` | Releases | Every shipping date being tracked. Toggles between **List** view (grouped by window) and **Calendar** view (3-month strip). Filter rail at the top. | +| `wire` | Wire | 48-hour activity stream from primary sources. Filter rail at the top. | +| `list` | Top tools | A short, opinionated ranked list. Curated, not algorithmic. Filtered by editorial verdict. | +| `subscribe` | Subscribe | Email signup + past-issue archive. | + +Footer-only entry point (not in the top nav): + +| `sources` | Sources & method | Where the data comes from + what "Verified / Window / Confirmed / Shipped" mean. | + +### Page-shape contract (non-home pages) + +Every non-home page begins with: + +1. `"]} rightSlot={…}>` — a narrow strip with a breadcrumb on the left and a stat/clock/view-toggle on the right. +2. A 22px-padded filter rail (where relevant). +3. A hairline ``. +4. The content list. + +**Non-home pages do not get a hero block.** The breadcrumb + filter rail is the chrome; the data is the content. (This was a Round 02 mistake — the hero box on Releases and Wire wasted vertical space.) + +--- + +## 3. Visual system + +### 3.1 Palette + +Five **mood** palettes, swap-able from the toolbar in the masthead top-right. The toggle changes only `background` and `accent`. Everything else is fixed across moods so nothing flickers on swap. + +| ID | Name | Background | Accent | Use | +|---|---|---|---|---| +| `graphite` | Graphite | `#14171c` | `#6dbab1` | **Default.** Warm charcoal + dusty teal. | +| `midnight` | Midnight | `#0f1622` | `#7fb8d2` | Cool blue-black + steel. | +| `obsidian` | Obsidian | `#0a0c0f` | `#6dd5b8` | Near-black + mint. Darkest option. | +| `slate` | Slate | `#1a1d22` | `#8ec2a8` | Warm grey + sage. | +| `carbon` | Carbon | `#181b22` | `#88bdd1` | Deep blue-grey + powder blue. | + +Fixed across all moods: + +```css +--ink: #ede5d3; /* cream body text */ +--muted: #7d8086; /* metadata, captions */ +--rule: rgba(237,229,211,0.18); /* dashed hairlines */ +--rule-strong: rgba(237,229,211,0.45); /* solid hairlines, primary divisions */ +``` + +The accent is reserved for: hero verb (e.g. _without the wobble_), active nav underline, active filter pill, hover stripes, sparkline bars, the subscribe button, list-page rank numbers, calendar release dots, the live-pulse dot, and `::selection`. Nothing else. + +### 3.2 Type + +| Role | Family | Notes | +|---|---|---| +| Display + body | **Newsreader** | Variable, italic supported. Used for everything that reads like prose. | +| Captions / labels / nav / marquee / mono | **IBM Plex Mono** | All caps, ~0.16–0.22em letter-spacing. The other voice of the site. | + +There is no third font. Headings are weight 500–700, italic when emphatic. Body sizes scale from 14px (Lede small) to 96px (page hero). Bigger heroes use Newsreader Italic for the highlighted verb only. + +### 3.3 Structure + +- **No boxed containers.** Sections divide on whitespace + hairline rules. +- **No coloured cards.** No drop shadows. +- **One accent per page.** Everything else stays in the cream/muted scale. +- **Sources visible.** Every release and wire item must show its primary source. +- **No fake decimal scores.** Verdicts are editorial labels: _Recommended · Worth watching · Specialist pick · Shipped_. +- **Filter pills, not chiclets.** Round 999, 1px border, accent fill at 10% opacity when active. + +--- + +## 4. Interactions & motion + +Every animation lives in `wireframes/zine-shell.jsx` (` + + + + +
+ + + +
+ +
+ + +
+ + +
+
+ + +
+

Lead · cycling

+

 

+

 

+
+
+ + +
+ +
+ + +
+ Also today ▾ +
+ OpenAI ships smaller-model price drop across the API tier. + OpenAI release notes · 14:20 UTC +
+
+ Cursor 2.5 changelog confirms multi-window edit reviews in stable. + Cursor changelog · 12:08 UTC +
+
+ Suno v5.5 lifts the loop-token cap; longer-form clips now in beta. + Suno blog · 09:47 UTC +
+
+ +
+ + +
+
+

Setlist · next ninety days

+ All releases → +
+
+
+ +
+ + +
+
+

+ + Wire · last 48 hours +

+ All wire → +
+
+
+ + +
+

+ This week we are with small models that ship
+ and against roadmap theatre. +

+ +
+
+ + +
+ +
+
+ + + + + + + + + +
+
+

+ Phase 2 of the build wires this page to content/stackscout/tools-source.json. + List view groups by release window; calendar view is a 3-month strip. See KOL-540 (TBC) for the plumbing ticket. +

+
+ + +
+ +
+

+ Phase 2 wires this page to content/stackscout/updates-source.json with query-string filters. +

+
+ + +
+ +
+

+ Phase 2 reads the manual rank field in tools-source.json. + Filter rail: All / Recommended / Worth watching / Specialist pick. +

+
+ + +
+ +
+

+ Phase 2 wires the email form to the chosen subscribe endpoint and renders the past-issue archive + from updates-source.json grouped by week. +

+
+
+ +
+ + + + + + + + + + From f353f8ac5d06de027a5a161ad894392e46a4a546 Mon Sep 17 00:00:00 2001 From: Kol Tregaskes Date: Tue, 19 May 2026 23:55:45 +0100 Subject: [PATCH 2/4] feat: rename Stack Scout -> Stack Gazette, refresh logo mark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stackscout.com is owned by an active server-monitoring company and stack-scout.com (the dashed alternative) is not Kol's preference. DNS check across 30 stack___.com candidates returned NXDOMAIN cleanly for stackgazette.com, which also matches the broadsheet/editorial mood already specified in DESIGN.md sec 1. Changes (prototype only — live site, repo slug, content/, scripts/ all untouched; see prototype/README.md for the cutover open items): - Wordmark: "Stack Scout" -> "Stack Gazette" - Logo mark: 10px accent square + glow ring -> three stacked horizontal bars (narrowest top, full-width middle, medium bottom) in the accent colour. Inline SVG, scales cleanly. - Hover: second word now swaps to accent colour - Title, meta description, canonical, theme-color updated - Crumbs across all stub pages updated - localStorage key renamed (stackscout.mood.v1 -> stackgazette.mood.v1) - Footer wordmark updated Co-Authored-By: Claude Opus 4.7 --- prototype/README.md | 40 ++++++++++++++++++++++---- prototype/index.html | 67 +++++++++++++++++++++++++++++--------------- 2 files changed, 78 insertions(+), 29 deletions(-) diff --git a/prototype/README.md b/prototype/README.md index a04b6e9..3d61cb3 100644 --- a/prototype/README.md +++ b/prototype/README.md @@ -1,13 +1,13 @@ -# Stack Scout prototype +# Stack Gazette prototype -A self-contained vanilla port of `StackScout Prototype.html` from the May 2026 design pack. +A self-contained vanilla port of `StackScout Prototype.html` from the May 2026 design pack, renamed from "Stack Scout" → **Stack Gazette** because `stackscout.com` is owned by an active server-monitoring company. ## What this is A single-file static prototype demonstrating Phase 1 of [CLAUDE-HANDOFF-2026-05-zine.md](../CLAUDE-HANDOFF-2026-05-zine.md): - 5-mood palette toggle (graphite / midnight / obsidian / slate / carbon) with `localStorage` persistence -- Masthead with "Stack Scout" wordmark + accent dot (no issue number, no tagline) +- Masthead with "Stack Gazette" wordmark + three-bar stack mark (no issue number, no tagline in chrome) - Footer marquee + live UTC clock - Film grain overlay - Reveal / cycling-lead / sparkline / hover-stripe / magnetic-CTA / cursor-spotlight animations @@ -33,11 +33,29 @@ python -m http.server 4173 ## Source design pack -Staged at `W:\Websites\LOCAL-ONLY\stackscout\design-2026-05-19\` (private). The `DESIGN-2026-05-zine.md` and `CLAUDE-HANDOFF-2026-05-zine.md` files at the repo root are copies of the design pack's authoritative spec and build plan. +Staged at `W:\Websites\LOCAL-ONLY\stackscout\design-2026-05-19\` (private). The `DESIGN-2026-05-zine.md` and `CLAUDE-HANDOFF-2026-05-zine.md` files at the repo root are copies of the design pack's authoritative spec and build plan, kept under the original "Stack Scout" name as a historical record of the round 03 design. ## Domain -Recommendation: `stack-scout.com` (matches the two-word brand from DESIGN.md § 1; `stackscout.com` is already taken by a server-monitoring company). Update CNAME + canonical when confirmed. +**Recommended: `stackgazette.com`** — DNS check returned NXDOMAIN (the strongest signal that a .com is genuinely available rather than parked or owned). + +Why renamed from Stack Scout: + +- `stackscout.com` resolves to a Vercel-hosted server-monitoring product (in active use, not buyable) +- `stack-scout.com` was the dash-free alternative, but Kol's preference is no dashes +- User wanted a `stack___.com` that exists; "Gazette" matches the broadsheet/editorial mood already in DESIGN.md § 1 ("printed broadsheet at night") + +Other clean alternatives that came back NXDOMAIN if `gazette` doesn't land: `stackbulletin.com`, `stackpulse.com`, `stackdrop.com`. Avoid `stacklog.com`, `stackdaily.com`, `stackedge.com`, `stacktake.com` — all parked on Sedo (priced to extort). + +## Logo refresh + +The original wordmark was `[10px accent square] Stack Scout`. Refreshed to: + +- Three horizontal bars stacked, narrowest on top, full-width middle, medium bottom — literal "stack" mark in the accent colour +- Glow ring removed (the old `box-shadow` halo on the square is gone) +- Hover state: the second word ("Gazette") swaps to accent colour + +The mark scales cleanly because it's inline SVG. Light edit if you want a different stack shape — `.brand__mark svg rect` in the CSS. ## Phase 2-4 — outstanding @@ -47,4 +65,14 @@ Per the handoff doc, the remaining work is: - **Phase 3:** Filter pills read from query string and update DOM. - **Phase 4:** Real data hookup (Kol). -To be tracked in Linear as children of the Stack Scout launch parent. +To be tracked in Linear as children of the Stack Gazette launch parent (or KOL-533 if you want it under the same umbrella). + +## Naming-rename open items + +The repo itself is still `stackscout` (folder, GitHub repo, content/stackscout/, scripts/build-stackscout.js, manifests). Phase 2 should decide: + +- Rename the repo on GitHub: `koltregaskes/stackscout` → `koltregaskes/stack-gazette` (or keep the slug for repo continuity and only rename the public brand) +- Rename the content folder `content/stackscout/` → `content/stack-gazette/` and update the build script +- Update the legacy `DESIGN.md`, `SCOPE.md`, and `README.md` at the repo root with the new brand + +None of these affect the prototype — they're separate cutover work. Recommended: keep the repo slug as `stackscout` for git history, change only the visible brand. Cheap, low-risk. diff --git a/prototype/index.html b/prototype/index.html index 74bda8a..7944fd1 100644 --- a/prototype/index.html +++ b/prototype/index.html @@ -3,11 +3,11 @@ - Stack Scout — A field log for the AI stack - + Stack Gazette — A field log for the AI stack + - - + + /* ────────────────────────────────────────────────────────────────────── - Stack Scout · Zine prototype (vanilla port of StackScout Prototype.html) + Stack Gazette · Zine prototype (vanilla port of StackScout Prototype.html) Phase 1 of CLAUDE-HANDOFF-2026-05-zine.md Source design: DESIGN-2026-05-zine.md + Wordmark renamed from "Stack Scout" → "Stack Gazette" (stackscout.com + was taken; stackgazette.com matches the broadsheet mood in DESIGN.md § 1). + Logo refreshed: replaced the single accent square with three stacked + horizontal bars (literal "stack" mark, no glow ring). ────────────────────────────────────────────────────────────────────── */ /* Fixed cream/muted scale — never changes between moods */ @@ -152,17 +156,21 @@ padding: 0; cursor: pointer; display: inline-flex; - align-items: baseline; - gap: 12px; + align-items: center; + gap: 14px; } - .brand__dot { + /* Logo mark — three stacked horizontal bars, accent colour. + Reads as "stack" literally; sits flush with the wordmark baseline. */ + .brand__mark { display: inline-block; - width: 10px; height: 10px; - background: var(--accent); - border-radius: 2px; - box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent); - transform: translateY(-1px); - transition: background 400ms ease, box-shadow 400ms ease; + width: 18px; + height: 16px; + flex-shrink: 0; + transform: translateY(2px); + } + .brand__mark rect { + fill: var(--accent); + transition: fill 400ms ease; } .brand__word { font-family: 'Newsreader', serif; @@ -172,6 +180,14 @@ line-height: 1; color: var(--ink); } + /* Optional italic accent on the second word, used on hover */ + .brand:hover .brand__word-second { + color: var(--accent); + transition: color 240ms ease; + } + .brand__word-second { + transition: color 240ms ease; + } .nav-and-mood { display: inline-flex; align-items: center; gap: 28px; } .nav { display: inline-flex; gap: 22px; } .nav__btn { @@ -660,9 +676,14 @@
-