overhaul: cutover pre-flight, parity records, legacy removal - #28
Merged
Merged
Conversation
CS-5
force-pushed
the
overhaul/11-cutover
branch
2 times, most recently
from
September 7, 2026 00:58
e76b0b3 to
b35d431
Compare
Phase 11's repository half. Every legacy URL requested against the production preview and tabulated in plan/11, with the _redirects rules checked as far as a build can (every on-site target is a built page, no source collides with built output). Visible copy diffed per route against the legacy TSX and compiled into one summary, including three differences no earlier phase logged: the hero heading, the Programs panel taglines, and the footer's sponsor block. README rewritten for the Astro site, and plan/todo.md gains the cutover steps only an owner can take. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vaq66ucygSHc84MJXz1cac
The Next.js site has served its purpose as the parity reference; git history keeps it. With the directory go the legacy entries in tsconfig, knip, Prettier's ignore, the VS Code search exclude, ESLint's global ignore and the import ban, the @source exclusion in global.css, and the architecture row in AGENTS.md. The dependency tree carries no React, HeroUI, framer-motion, embla, Biome, or Next. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vaq66ucygSHc84MJXz1cac
CS-5
force-pushed
the
overhaul/11-cutover
branch
from
September 7, 2026 00:58
b35d431 to
5fbad8e
Compare
…mers /_astro/* gets a year-long immutable Cache-Control (mirrored in the Lighthouse server); ics.ts keeps one Intl.DateTimeFormat per zone and holds EXDATEs in a Set; the countdown stops ticking once passed; the navbar reads its breakpoint from a build-time data attribute. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
- site.ts: frc.teamNumber, location.street/postalCode, named nav routes (programs, robots, contact, about); pages, llms.txt, og-cards and the donate address read them instead of retyping. - programPhotos.ts holds each program's photo and alt; ProgramCard wraps FeatureCard for the home and programs pages; RobotFigure is the robot photo with its corner logo, and the FRC page takes its feature from the frcRobots collection. - Hero renders a compact text-only header and has a logo slot; the calendar and 404 pages use it. Section takes srTitle for a hidden heading. programTrail() builds program breadcrumbs. - Unused props removed: Seo ogType/canonical, Section and CtaBanner headingLevel, Callout side. SeoProps lives in lib/seo.ts. - ambient-pool-neutral sets only --pool-tint; prose-copy and title-rule apply measure and accent-rule. - functions: one res() helper; the calendar page imports the response types. isExternal lives in lib/links.ts. verify-meta folds its title and description checks; the Lighthouse server caches response bodies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
- ics: all-day DATE values resolve to midnight in the site's zone, so they group under their own day and stay upcoming through it; cancelled RECURRENCE-ID overrides still suppress their series instance; WEEKLY steps from WKST (default MO); text unescaping is one pass. - calendar page: day headings carry the local date in datetime; the Google embed link uses the decoded calendar address. - form submit: a malformed body is a 400; missing secrets and a failed Slack post are errors instead of "received"; Turnstile no longer falls back to the always-pass test secret. docs/tooling.md covers .dev.vars. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
CS-5
added this pull request to stack #20
September 24, 2026 20:39
- Eyebrows take primary-bright (fill-vs-text law); one carrying a numeral takes the spec-label voice. - The closing tagline keeps each "Real X." pair together, stacks below sm, and the chalk ovals clear their neighbours. - Section padding is never doubled: the footer drops mt-24 and adjacent sections on one ground share a padding. - FIRST® stands upright in Orbitron headings, its ® drawn by Inter through the display stack. - Only standalone dates take the mono voice; the donate form and its card title rules align. - Meta-refresh stub pages (openhouse, kickoff) also emit a 301 in _redirects. - DESIGN.md §1, §3, §4 record the rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
…wipes - FRC hero h1 is two lines; the rest of the sentence leads the subhead. - Donate's hero carries the PayPal button; Sponsors' hero carries "Become a sponsor". - SponsorTier picks its column count from the sponsor count, and a lone sponsor takes SponsorCard's full-width feature layout. - Highlight swipes run 35% at display sizes and 25% at body size; the styleguide build check measures each against its floor. - DESIGN.md §2.13 and §5 record the rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
Depth drawn rather than rendered: cut into metal, laid on the table. - band (was tint): #121212 drafting table with a primary top edge, the brand edge vignette and a feathered two-weight grid; pockets on it become raised plates. A build step fails any page where two bands touch, footer included. - Buttons are keycaps: a hard 3px offset that lifts on hover and presses flat; the outline keycap's edge meets 3:1. Reduced motion keeps the face still. - Pockets cut deeper with a visible hover; framed media takes a 6px drafted edge; photo heroes carry the grid on their copy side. - Header (md+) and footer use the brand's Light lockup; mobile keeps the colour mark. - The styleguide shows the surfaces and states, and its contrast check covers band, plate, grid crossings and control edges. - DESIGN.md §2, §2.3, §2.4, §4–§8 and §10 record the rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
The panel is a popover in the top layer, where `absolute top-full` resolves against the viewport, so it opened just below the bottom of the screen. CSS anchor positioning places it under the nav item, with a toggle-time fallback where anchors are unsupported. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
The grain tile's gamma goes 4 → 5 and its alpha 0.4 → 1: the spread rises from ~4 to ~6 levels while the mean lift moves only ~5 → ~8, so the sheet reads as textured without lightening. DESIGN.md §2 records the new figures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
The staging rule matched one host by name, so any other preview subdomain (astro.scstem.org) was indexable. https://*.scstem.org/* covers them all; the apex, production, does not match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
Tighter heroes, intros and CTAs across home, programs, FLL, FRC, about,
sponsors, donate, get-involved, contact, calendar, 404, the events and
the FAQ. Each pitch now lives on one page instead of being copied
between several. Facts corrected: two programs, founded 2012, no drone
teams or maker spaces, kickoff from noon. Grammar and typo fixes along
the way ("premier", "partner with", "teamwork", "begins", en dashes).
The robots page is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RFeYttZCfuyKpR2hJqLfK4
CS-5
removed this pull request from stack #20
September 26, 2026 22:07
CS-5
added this pull request to stack #29
September 26, 2026 22:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 11 of the stacked overhaul (
plan/11-cutover.md), stacked on #27 per D23. This is the top of the stack: merging it cascades every layer below intostaging.What this does
Phase 11 is mostly dashboards and a deployed URL. This PR is the half a repository can do, so that what remains for the owner is a checklist rather than an investigation.
Parity pass, by hand, recorded in
plan/11-cutover.md§ As built. Every URL the Next.js site served was requested against the production preview of this build: all thirteen answer200, an unknown path gets the branded404.html, and_redirectsand_headersboth reachdist/(Pages reads them from there). Every on-site redirect target is a built page, and no redirect source collides with built output. Visible copy was diffed per route against the legacy TSX and compiled into one table.Three copy differences no earlier phase logged, now in
plan/todo.mdfor a keep-or-revert decision:Also flagged:
/programs/fllis the one page whose copy is new rather than ported, because legacy had only an under-construction placeholder there. Everything else on the list was logged in the phase that made it.legacy/is deleted (second commit, separable), with every exclusion that guarded it:tsconfig.json,knip.jsonc,.prettierignore,.vscode/settings.json, the ESLint global ignore andno-restricted-importspattern, the@source notline inglobal.css, and theAGENTS.mdrow. The plan's §5 sequences this after launch; D11 says "deleted at cutover", the stack lands as one cascade, and git history keeps the old site, so it is here. If you would rather hold it until after the staging soak, drop the second commit.Dependency audit: the lockfile carries no React, HeroUI, framer-motion, embla, Biome, or Next. The only name match is
css-to-react-native, a transitive dependency ofsatori. knip is green without thelegacy/**ignore.README rewritten for the Astro site: what it is,
mise install && pnpm install, where to read next, the Pages deploy model.Not done here, and why
src/pages/orsrc/components/changed, and the CI job runs it on this PR.plan/todo.md§ Cutover lists each with what is already in the repository waiting for it.Seen in passing
Astro preserves
<!-- -->comments from component templates in the built HTML: eleven ship on the homepage fromNavbar,Hero, and friends. Developer notes, a few hundred bytes per page. Noted inplan/11as a follow-up, not changed here.Verification
pnpm check(typecheck, lint, format, knip) andpnpm buildgreen on the final commit;check:metaverifies all 16 pages. Built under Node 22 in this environment; CI runs the mise pin.🤖 Generated with Claude Code
https://claude.ai/code/session_01Vaq66ucygSHc84MJXz1cac
Generated by Claude Code