Skip to content

chore: land #6–#8 on main (stacked PRs merged into intermediate branches) - #9

Merged
BK5102 merged 14 commits into
mainfrom
chore/add-ci-cd
Oct 3, 2026
Merged

BK5102 merged 14 commits into
mainfrom
chore/add-ci-cd

Conversation

@BK5102

@BK5102 BK5102 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Why

PRs #6, #7 and #8 were stacked: each targeted the branch below it, not main. Their head branches weren't deleted, so GitHub didn't retarget them to main when the PR below merged. Each one merged into an intermediate branch instead, and all of that work now sits on chore/add-ci-cd, 14 commits ahead of main. Only #5 reached main.

Because deploy.yml (added in #7) isn't on main, nothing has deployed. gh-pages was last updated on 2026-09-24, so devilquant.com doesn't include #5–#8 yet.

What

This PR merges chore/add-ci-cd into main. It brings in the already-reviewed and merged contents of:

There are no new code changes.

After merge

The push to main runs CI, then Deploy (publishes to gh-pages), then pages-build-deployment. If Deploy doesn't start, run it manually from Actions → Deploy → Run workflow.

To avoid this with future stacks, a repo admin can turn on Settings → General → "Automatically delete head branches".

Checks (local, 3e00ba1)

  • npm run lint: 0 errors
  • npm run check-links: no internal dead links
  • npm run perf: all lighthouserc.cjs budgets pass

Performance (Lighthouse, mobile, median of 3, local Edge)

Page Score FCP LCP TBT CLS Weight
#/ 98 1.63 s 2.14 s 83 ms 0.000 197 KB
#/about 96 1.62 s 2.57 s 114 ms 0.000 388 KB

BK5102 and others added 14 commits October 1, 2026 04:23
Performance
- Compress headshots to 28-88 KB JPEGs (were up to 1.4 MB).
- Remove hero background video (14 MB) and unused old video (46 MB);
  the hero will be redesigned.
- Store project images locally instead of hotlinking Unsplash.

Bugs / fragile code
- Add catch-all NotFound route (unknown URLs rendered an empty page).
- Navbar Contact: scroll via router state instead of a 100 ms setTimeout.
- pulse-grid: deterministic pattern instead of Math.random() in render.
- Centralize Discord/LinkedIn/Sun Devil Central URLs in src/data/links.js.

Lint (10 errors -> 0)
- Remove unused imports; comment out hidden-guide imports.
- Replace setState-in-effect in Navbar and Resources with derived state.

Dead code
- Delete react.svg, duplicate src/assets/DQ.png, public/vite.svg,
  interactive-grid-pattern.jsx, tailwind.config.js (ignored by v4),
  unused gridFade keyframes, aspect-w-* classes, Navbar scroll listener,
  unused bradley headshot.

Data / content
- About: derive Founders from leaders.json; exact headshot filename
  lookup; stable list keys.
- leaders.json: fix typo/capitalization, "" -> null.
- index.html: add meta description and Open Graph tags.
- .github/workflows/ci.yml: on every PR, run lint, check-links, and build;
  on push to main, re-run checks and deploy dist/ to gh-pages.
- .github/workflows/links.yml: weekly/manual external link check (lychee).
- scripts/check-links.mjs (npm run check-links): fail on plain hrefs to app
  routes, missing/hidden guide slugs, broken in-guide anchors, public/
  redirect pages drifting from src/data/links.js, missing headshot files.
- Pin Node 22 (.nvmrc) and engines >=20.19 (Vite 7 minimum).
- CONTRIBUTING.md: document automatic deploys and the new checks.
- CLAUDE.md: update architecture notes; import PROMPT.md.
- PROMPT.md: working brief with goals, constraints, and audit status.
Replace the plain black look with a dark graph-paper notebook world so a
visitor immediately sees what DevilQuant is and how to join.

Homepage
- Hero: "DevilQuant" display, the approved claim handwritten on a
  highlighter stroke, and a pen-drawn tree from "you" to the two ways to
  join (Discord primary, Sun Devil Central secondary).
- Desktop red-pen margin note with member placements; placements logo
  grid; closing "Your move." with one Join the Discord action.
- Motion: one-time pen-draw + highlighter swipe, off for reduced motion.

Site-wide
- Navbar: monogram wordmark, red-pen loop on the current page, highlighter
  CTA, full-screen mobile menu (switches at lg).
- About, Projects, Resources, 404, footer and redirect pages restyled into
  the same tokens; content and behavior unchanged. Year picker is a native
  select. Placements icon cloud replaced by the logo grid.
- Tokens in src/index.css (@theme): pad, rule, chalk, pencil, highlighter,
  redpen; Lexend + Kalam self-hosted via @fontsource.
- Placement logos: official wordmarks from Wikimedia Commons for Amazon,
  Capital One, General Dynamics, Microsoft, ServiceNow; Wells Fargo
  background box removed; viewBoxes trimmed (sources in placements.js).
- Removed magicui patterns and the motion, clsx, tailwind-merge deps.

Docs
- PRODUCT.md (product truth), DESIGN.md + .impeccable/design.json (design
  system), homepage direction contract in .impeccable/surfaces/.
- CLAUDE.md style notes and PROMPT.md status updated.
Review on #6 measured the Contact link at ~2-2.5s under CPU/network
throttling. Profiling (4x CPU, ~1.6 Mbps) showed scrollIntoView is called
as soon as About renders (~0.7s); the delay was the *smooth* scroll being
starved by a ~1.5s main-thread task from About's DotPattern (~1,000
animated SVG nodes) and IconCloud mounting. (On main the 100 ms timeout
fires before About renders under throttling, so it never scrolls at all.)

- Jump to the section (behavior: 'auto') instead of animating, so the
  scroll lands when About renders: Contact from Home now settles in
  ~1.2-1.5s throttled vs ~2.6-3.2s, with scrolling starting at render.
- Memoize DotPattern and IconCloud so About re-renders (navigation state,
  year select) don't re-reconcile the dot field.
# Conflicts:
#	src/components/magicui/dot-pattern.jsx
#	src/components/magicui/icon-cloud.jsx
PR checks on #7/#8 showed cancelled "verify" runs and a "deploy" job
marked with "!", which read as CI not running. CI did run and pass: pushing
the stacked branches together fired two pull_request runs per PR, and the
concurrency group (cancel-in-progress on PRs) cancelled the older one. The
deploy job always appeared on PRs as skipped.

- ci.yml: verify only; no concurrency group (runs take ~20s), so duplicate
  runs both complete instead of posting cancelled checks.
- deploy.yml: new; runs via workflow_run after CI passes on a push to main
  (or manually) and publishes the verified commit to gh-pages.
- actions/checkout and actions/setup-node v4 -> v6 (Node 24), in ci.yml,
  deploy.yml, and links.yml, clearing the Node 20 deprecation warnings.
- CONTRIBUTING.md and CLAUDE.md describe the new Deploy workflow.
Design skills with a no-decorative-grid rule (design-taste-frontend) would
otherwise strip the grid during routine UI work. The note also records that
the team may replace the whole direction, in which case DESIGN.md and this
section should change with it.
- ci.yml: new `performance` job runs Lighthouse CI (mobile preset, 3 runs,
  median) on Home and About, fails on budget violations, writes a results
  table to the run summary, and uploads the reports.
- lighthouserc.cjs: budgets for the current pages (score >= 60, LCP <= 3.5s,
  TBT <= 2.5s, CLS <= 0.1, weight <= 1 MB). A ?page= query keeps hash routes
  separate, since LHCI groups URLs without the #hash.
- npm run perf: same check locally; scripts/perf-summary.mjs prints medians.
- CONTRIBUTING.md / CLAUDE.md: run `npm run perf` before every commit/PR and
  report the numbers.

Measured on this branch (local, Edge, mobile preset, median of 3):
  Home  score 94, LCP 2.49s, TBT 0ms,   CLS 0.001, 177 KB
  About score 77, LCP 2.70s, TBT 648ms, CLS 0.014, 384 KB
…oad Lexend

Merges the Lighthouse CI performance job from #7, then ratchets the budgets
to the redesigned site and fixes the one budget it missed:

- vite.config.js: preload the hashed Latin Lexend woff2 so text paints in its
  final face sooner (About's LCP element is a text block that waited on the
  font). FCP 1.93s -> 1.65s, About LCP 2.73s -> 2.56s, Home LCP 2.22s -> 2.13s.
- lighthouserc.cjs: score >= 85, LCP <= 3.0s, TBT <= 400ms, CLS <= 0.05,
  weight <= 600 KB (from 60 / 3.5s / 2.5s / 0.1 / 1 MB on #7).

Measured (local, Edge, mobile preset, median of 3):
  Home  score 98, FCP 1.65s, LCP 2.13s, TBT 82ms,  CLS 0, 197 KB
  About score 96, FCP 1.63s, LCP 2.56s, TBT 100ms, CLS 0, 388 KB
The maintainer keeps Claude Code guidance and the working brief in local,
untracked files outside the repo. Ignore both names so they aren't
recommitted. No runtime change.
feat: redesign site as "The Working Notebook"
@BK5102
BK5102 merged commit 653e123 into main Oct 3, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant