Skip to content

fix(web): reorder header, pad mobile sheet, repoint dead GitBook links - #154

Draft
heyoub wants to merge 9 commits into
CodeForPhilly:developfrom
heyoub:fix/site-check-153
Draft

fix(web): reorder header, pad mobile sheet, repoint dead GitBook links#154
heyoub wants to merge 9 commits into
CodeForPhilly:developfrom
heyoub:fix/site-check-153

Conversation

@heyoub

@heyoub heyoub commented Aug 24, 2026

Copy link
Copy Markdown

Addresses #153 (three of its four items; the fourth is documented below rather than built).

Spec-first per specs/README.md: specs/behaviors/app-shell.md and specs/screens/volunteer.md change in this PR before the code, and plans/site-check-153.md is the plan record.

What changed

  • Desktop header — the nav is now two clusters: content (Projects · Help Wanted · Members · About ▾) next to the logo, and a right-pinned utility cluster (GitHub icon · Search · Sign in · Volunteer), with the green Volunteer button rightmost per the issue's recommendation. The redundant ml-1-on-top-of-gap-1 spacing is gone (single gap-2).
  • GitHub link — icon-only, labelled "Code for Philly on GitHub" → https://github.com/CodeForPhilly ("can't hurt either", per the issue). Also in the mobile sheet as a text row.
  • Mobile sheet — was flush to both edges (SheetContent ships no padding and the header only added pt-8). Now uses the intended shadcn structure: SheetHeader + SheetTitle ("Menu") + px-4 on nav/search. The SheetTitle also gives the Radix dialog its missing accessible name. Every item now closes the sheet, including the Contact mailto:.
  • Dead links — the whole codeforphilly.gitbook.io space 404s ("Content owner not found"). Volunteer.tsx's two constants now point at live equivalents: "When we meet →" → the Meetup group (same target as the footer's Meetup icon), and "Read the guide →" → the surviving canonical source, CodeForPhilly/partnerships/.../first-steps.md. Same fix PR fix(web): route anonymous "Start a Project" CTA to login #128 made on the Home screen; this was the leftover twin. New Volunteer.test.tsx carries the dead-link regression assertion.
  • Footer — stale codeforphilly-rewrite repo URL → codeforphilly-ng.
  • Small header ARIA cleanups that belonged to this rewrite: loading skeleton aria-hidden, About trigger named by its visible text, hand-written aria-expanded removed (Radix supplies it).

Not implemented, deliberately

The issue's "mailing list invite in hero" recommendation is blocked: there is no anonymous mailing-list mechanism anywhere (only the auth-gated /account checkbox), and public newsletter signup is explicitly deferred by spec (app-shell.md Connect column, deferred.md). Recorded in the plan's Follow-ups — it needs a spec + mechanism decision first, and the hero is untouched here.

Judgment calls for review

  • Mobile sheet order now mirrors desktop, so Volunteer sits last in the sheet (the issue only asked about mobile padding). Easy to move back up if you'd rather keep it near the top.
  • The header GitHub icon targets the org, not this repo (the footer already links the repo).

Validation

type-check, lint, web tests 96/96, shared 75/75. Headed-Chrome check of the desktop header and the open sheet (screenshots in the plan's validation notes). apps/api tests were not affected (no api files changed); note that store.test.ts has a pre-existing Windows-only failure — /dev/null/impossible-path is a creatable path on Windows — unrelated to this PR and only relevant to Windows contributors.

🤖 Generated with Claude Code

heyoub and others added 8 commits August 24, 2026 11:47
Issue CodeForPhilly#153 walks the live site on desktop and mobile and collects five
findings. Four are shippable together because they all land in the app
shell or in one screen's outbound links; the fifth (replace the Home hero
CTA with a mailing-list invite) has no mechanism to build against, so the
plan records the block up front rather than inventing one.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Specs lead, so both files change before the code does.

app-shell: the header's single "primary nav" table conflated content
navigation with utilities, which is why the Volunteer CTA ended up buried
between Members and About. Splitting it into a content cluster and a
right-pinned utility cluster makes the CTA's position a stated rule
rather than an accident, and gives the GitHub link and the auth control
a declared home. Also states the sheet's accessible name and the
icon-only-controls labelling rule, both of which the header violated.

volunteer: the whole codeforphilly.gitbook.io space now returns 404
"Content owner not found", so the spec was prescribing two dead targets.
The Meetup group and the CodeForPhilly/partnerships first-steps doc are
the live equivalents; both verified reachable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Site check (CodeForPhilly#153) found the Volunteer button buried mid-nav between
Members and About, where it read as one more section link rather than the
call to action. It now closes the utility cluster, after the auth control,
per the reordered app-shell spec. About joins the content links; a GitHub
icon link is added to both breakpoints.

The mobile sheet had no horizontal padding at all: SheetContent's base
classes carry none and the only override here was a pt-8 hack, so nav
items and the search box sat flush against the panel edge. Replaced with
the structure shadcn intends — SheetHeader + SheetTitle, which bring
their own p-4 — plus explicit px-4 on the nav and search. SheetTitle also
gives the underlying Radix dialog the accessible name it never had.

Three ARIA defects fixed while the file was open: aria-label on a roleless
skeleton div (prohibited; now aria-hidden), a hand-written aria-expanded
duplicating what Dialog.Trigger already supplies, and an aria-label
overriding the About trigger's own visible text. The account-menu label
stays — below sm the person's name is display:none, so it is the only
accessible name there.

Per-child ml-1 margins are gone; the parent gap-2 is now the single source
of spacing at the same effective density.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The whole codeforphilly.gitbook.io space now returns 404 "Content owner
not found", so both of the Volunteer screen's outbound CTAs were dead.
PR CodeForPhilly#128 fixed the Home screen's copy of the same URL; these are the last
two in the SPA. "When we meet" goes to the Meetup group, which is where
hack nights are actually announced and which the footer already links to;
"Read the guide" goes to the partnerships repo's first-steps doc, the
surviving source of the GitBook page it replaces.

The footer's "view this site on GitHub" link still named the repo
codeforphilly-rewrite. That only resolves through GitHub's rename
redirect, which is not something to depend on indefinitely.

New Volunteer test asserts both hrefs and, following the Home dead-link
idiom, that no gitbook.io URL survives anywhere in the rendered screen —
so a copy-paste of the old constant cannot come back unnoticed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sheet is a full-height flex column with no scroll container, so a nav
list taller than the viewport was simply unreachable below the fold. That
was already latent; adding the GitHub row makes it one row likelier on
short phones. min-h-0 lets the flex child shrink at all, and overflow-y-auto
gives it somewhere to put the excess.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ticks the criteria verified during implementation and, deliberately,
leaves two unticked rather than rewriting them to match what was
achievable: the browser pass belongs to whoever does UI QA, and the
all-workspaces test gate cannot close on this Windows dev box.

Notes record why. apps/api fails ten tests here on a tree whose API code
is byte-identical to develop, because the fixtures assume POSIX —
store.test.ts injects a write failure via /dev/null/impossible-path,
which Windows will happily create, so the expected rejection never comes.
Reproduces with the files run alone, so it is not runner contention.
Filed as a follow-up rather than fixed: cross-platform fixtures are their
own scope, and silently ticking a gate that did not run is worse than
leaving the box open.

Also flags HomeStub.tsx, which carries the same stale repo URL the footer
had but is imported by nothing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pins the numbers behind the unticked all-workspaces gate so a future
reader can tell a known Windows baseline from a real regression, and
notes the develop re-run that confirms it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Desktop header verified in headed Chrome at 1400px; the sheet verified via
its portal at desktop width because the automation harness could not shrink
a maximized window below md — same limitation web-shell.md's plan recorded.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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