From 284c66cc47e01df618be97688179187e9c1112ff Mon Sep 17 00:00:00 2001 From: Brendan Samek Date: Fri, 16 Oct 2026 13:52:03 -0600 Subject: [PATCH 1/2] Replace the key dates card on /toronto with a volunteer call to action Advance voting and the mail-in deadlines have passed, so the homepage card now points to Build the Vote with the volunteer page's three steps. Co-Authored-By: Claude Opus 5.5 --- src/app/toronto/page.tsx | 46 ++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/app/toronto/page.tsx b/src/app/toronto/page.tsx index 608710c..2b76d08 100644 --- a/src/app/toronto/page.tsx +++ b/src/app/toronto/page.tsx @@ -13,11 +13,8 @@ import { ELECTION } from "./vote/2026/data"; import { STAGE_ONE } from "./vote/survey-questions/questions"; import { SURVEY_PATH } from "./vote/survey-questions/path"; import { WARD_GEO, WARD_SHAPES } from "./vote/2026/wardGeo"; -import { - ELECTION_DAY, - KEY_DATES_PATH, - VOTING_PERIODS, -} from "./vote/2026/key-dates"; +import { ELECTION_DAY } from "./vote/2026/key-dates"; +import { VOLUNTEER_PATH } from "./volunteer/build-the-vote"; import { EmailCapture } from "./EmailCapture"; import { WardLookupCard } from "./WardLookupCard"; import { HeroSurface } from "./HeroSurface"; @@ -251,10 +248,13 @@ function ElectionCard(props: ElectionCardProps) { * what it is. */ function ElectionCardsSection() { - // Four topics against Yes/No, to match the four date rows beside it. const questions = STAGE_ONE.slice(0, 4); - // Off the shared calendar, so these can't drift from the page they link to. - const dates = [...VOTING_PERIODS, ELECTION_DAY]; + // The volunteer page's three steps, cut down to fit beside the survey rows. + const steps = [ + { title: "Sign up", detail: "About a minute" }, + { title: "Get matched", detail: "With a campaign" }, + { title: "Show up", detail: "Oct 26, as little as 2 hours" }, + ]; const button = "bg-dark text-linen-100 border-dark group-hover/card:bg-accent group-hover/card:border-accent"; @@ -269,27 +269,27 @@ function ElectionCardsSection() { ElectionCard). */}
-
- {dates.map((d) => ( -
+ {steps.map((step, i) => ( +
  • -
    - {d.title} -
    -
    - {d.dateLabel} -
    -
  • + + {i + 1}. {step.title} + + + {step.detail} + + ))} -
    +
    Date: Fri, 16 Oct 2026 13:52:03 -0600 Subject: [PATCH 2/2] Remove the Log in link from the nav It was the only thing the nav's /api/auth/me fetch was for, so that goes too. Co-Authored-By: Claude Opus 5.5 --- src/components/Navbar.tsx | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 0a342b4..f157b10 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -10,7 +10,6 @@ import { SOCIALS } from "@/constants/socials"; import { NAV_LINKS, TORONTO_NAV_LINKS } from "@/constants/nav-links"; export default function Navbar() { - const [viewer, setViewer] = useState<{ admin: boolean } | null>(null); const [menuOpen, setMenuOpen] = useState(false); const [showEmoji, setShowEmoji] = useState(false); const hasScrolled = useRef(false); @@ -18,20 +17,7 @@ export default function Navbar() { const pathname = usePathname(); const isToronto = pathname?.startsWith("/toronto") ?? false; const isPolling = pathname === "/polls" || pathname?.startsWith("/polls/"); - const navLinks = [...(isToronto ? TORONTO_NAV_LINKS : NAV_LINKS)]; - if (!viewer) navLinks.push({ - label: "Log in", - href: `/api/auth/login?redirect=${encodeURIComponent(pathname || "/")}`, - }); - - useEffect(() => { - let cancelled = false; - fetch("/api/auth/me", { cache: "no-store" }) - .then((response) => response.ok ? response.json() : { user: null }) - .then(({ user }) => { if (!cancelled) setViewer(user); }) - .catch(() => { if (!cancelled) setViewer(null); }); - return () => { cancelled = true; }; - }, [pathname]); + const navLinks = isToronto ? TORONTO_NAV_LINKS : NAV_LINKS; // full-screen page, no site chrome — every region's pledge page const isChromeless = isPledgePath(pathname);