Skip to content

Redesign membership pages + 3-step join flow - #541

Open
mohanadft wants to merge 9 commits into
mainfrom
feat/membership-redesign-3step
Open

Redesign membership pages + 3-step join flow#541
mohanadft wants to merge 9 commits into
mainfrom
feat/membership-redesign-3step

Conversation

@mohanadft

Copy link
Copy Markdown
Collaborator

Summary

  • Redesigns /membership and /membership-new around a new hero layout with an always-visible sticky signup card, an "About T4P Membership" nav band, an accordion, a testimonial grid, and a dues/waivers section — both pages share one MembershipMain.astro component.
  • Replaces the 2-step join wizard with 3 steps: About You → Membership Selection → Payment. Visitors now pick Member vs Supporting Member inline instead of being routed to /supporting-member; switching tiers swaps the Qgiv payment form in place without navigation.
  • /membership-new renders with the design system's ts-* typography and section-band conventions (via a designSystem prop threaded through MembershipMain, JoinFlow, and MembershipCalculator); legacy /membership keeps a plain-Tailwind rendering since Layout.astro doesn't load design-system.css.
  • Reworded three membershipBenefits.ts labels to match the new tier-card copy (also updates the /supporting-member comparison table).
  • QgivJoin now re-scans via QGIV.Embed.initializeEmbeds() so a second tier's embed mounts correctly when a visitor switches tiers mid-flow, instead of only working for the first tier visited.
  • Removed the now-unused legacy MembershipPage.tsx.

/supporting-member and /supporting-member-new are unchanged — they keep their existing 2-step flow.

Test plan

  • pnpm dev and compare /membership vs /membership-new for the intended typography/layout differences (plain Tailwind vs design-system ts-*/tokens)
  • pnpm build && pnpm preview, check devtools console for CSP inline-style violations (production-only CSP enforcement)
  • Join flow, Member path: About You validation → tier selection → payment shows the dafize/embed 88902 iframe prefilled with name/email
  • Join flow, Supporting Member path: payment shows the supportingmembersform/embed 1158315 iframe
  • Tier-swap case: reach payment as Member, go back, switch to Supporting Member, confirm the second iframe renders (this is what QGIV.Embed.initializeEmbeds() fixes)
  • Sticky card behaves correctly at ≥1024px and stacks correctly below it
  • Anchors (#inside, #voices, #dues, #join) scroll correctly with header offset
  • Plausible fires "Membership Join Click" and "Membership-complete" (with the chosen tier) as before
  • /supporting-member and /supporting-member-new still render their existing 2-step flow and comparison table unaffected

🤖 Generated with Claude Code

…p join flow

Replaces the two-step join wizard with a 3-step flow (About You →
Membership Selection → Payment) so visitors pick Member vs Supporting
Member inline instead of being routed to a separate page, and adopts a
new hero layout with an always-visible sticky signup card.

- New JoinFlow.tsx drives the 3-step wizard; keeps both tiers' QgivJoin
  embeds mounted so switching tiers never re-injects Qgiv's embed.js.
- New MembershipMain.astro is shared by both pages, rendering with
  the design system's ts-* typography/tokens on /membership-new and
  plain Tailwind on the legacy /membership (Layout.astro doesn't load
  design-system.css).
- Reworded three membershipBenefits.ts labels to match the new tier
  card copy (also updates the /supporting-member comparison table).
- QgivJoin re-scans via QGIV.Embed.initializeEmbeds() so a second
  tier's embed mounts correctly after switching tiers mid-flow.
- Removed the now-unused MembershipPage.tsx.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 10, 2026

Copy link
Copy Markdown

Deploying website with  Cloudflare Pages  Cloudflare Pages

Latest commit: 13297bf
Status: ✅  Deploy successful!
Preview URL: https://ee2facf1.website-aun.pages.dev
Branch Preview URL: https://feat-membership-redesign-3st.website-aun.pages.dev

View logs

mohanadft and others added 8 commits September 10, 2026 12:18
…p body text

mailto: links silently do nothing when the visitor's browser has no
default mail client registered. "Request a waiver" and "Email us" now
also copy the address to the clipboard and show a confirmation, so
there's always visible feedback regardless of mail client setup.

Also bumps paragraph/body copy sizes by ~1-2px on the legacy
/membership rendering (plain-Tailwind sizes only — /membership-new's
ts-body/ts-body-large sizes are the shared design-system scale and
aren't touched here).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…rolls past

The join card is only sticky within the hero section's own grid row —
once a visitor scrolls past it, there's no persistent way back to the
form until the next inline "Join now" CTA further down the page. Adds
a small floating pill (bottom-right on desktop, bottom bar on mobile)
that appears via IntersectionObserver once #join leaves the viewport
and scrolls back to the real form on click, rather than opening a
second one.

Reuses the existing green pill button styling already established on
the page instead of introducing a new visual treatment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…e too

Drops the full-width mobile bar in favor of the same tiny bottom-right
pill used on desktop.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Native <details> toggles instantly. Intercepts the summary click and
drives the answer's height with the Web Animations API instead,
setting details.open only once the animation settles so it still
reflects real state throughout for assistive tech and the
group-open: icon rotation. Falls back to an instant toggle under
prefers-reduced-motion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…to, supporting-member link

- MembershipCalculator's shell background, corner radius, control
  colors, and result-figure font were unconditionally the -new
  design-system's tokens (bg-page, bg-sand, border-butter,
  rounded-[20px], font-serif). Gated all of them behind the existing
  designSystem prop so the legacy /membership page gets plain
  light-gray surfaces and a bold sans figure instead of the redesign
  bleeding through.
- Dropped tracking-tight from every bold/extrabold heading and label in
  plain mode — negative letter-spacing on heavy weights was reading as
  squished.
- Swapped the "What being a member looks like" section's photo to a
  new panel shot (public/images/membership/member-panel.webp), kept
  separate from supporting-panel.webp since that file is still shared
  by /supporting-member and /supporting-member-new.
- "Become a Supporting Member" in the dues section now links out to
  /supporting-member (or /supporting-member-new) instead of scrolling
  to the on-page form, which only handles the Member tier's dues
  waiver framing, not a full tier comparison.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Mohanad and Veda's quotes on the membership pages now read "Volunteer
& member, Tech for Palestine" regardless of the sitewide
membershipLive flag testimonials.ts otherwise picks a single role
from — this page is specifically about membership, so naming both
roles fits better than picking one via that flag.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ression on supporting-member-new

The plain-mode calculator still read as a separate widget: a tinted
cream shell and grey result tiles that didn't match anything else on
the page. Reworks it to reuse the exact devices JoinFlow already
established one step earlier — a plain white card like every other
card on the page, and the same green tint TierCard uses for "this
one's selected" instead of introducing a third surface color.

Also fixes a regression the designSystem prop introduced: MembershipDues
(still live on /supporting-member-new) rendered <MembershipCalculator />
with no props, so it silently picked up the new plain-mode default even
though that page does load design-system.css. Passes designSystem
explicitly there to restore its original rendering.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
HomeLayout only imported Outfit 400/500, yet font-semibold/bold/
extrabold (600/700/800) are used throughout the design system's
headings, labels, and buttons. Without the actual weight files, the
browser was synthesizing ("faux") bold from the 500 weight instead of
using Outfit's real bold glyphs — which is what reads as cramped,
squished letterforms at larger sizes, not a letter-spacing problem.

This was the same root cause on /membership: it copies HomeLayout's
font-import list. Fixed there too, dropping the now-unused Fraunces
import since the legacy plain-mode rendering never uses font-serif.

Fixes every -new page, not just membership, since HomeLayout is shared.

Co-Authored-By: Claude Sonnet 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