Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
f559a51
feat(giveback): redesign impact journey, sponsor badges, and claim fe…
tsahimatsliah Jun 17, 2026
c02c34b
style(giveback): fix prettier formatting and tailwind class order
tsahimatsliah Jun 17, 2026
c0976d6
style(giveback): fix prettier formatting in tailwind config
tsahimatsliah Jun 17, 2026
b42a451
chore: re-run CI (flaky useFeeds test, unrelated to changes)
tsahimatsliah Jun 17, 2026
a2ce6b3
feat(giveback): size sponsor cards by tier and use brown for bronze
tsahimatsliah Jun 17, 2026
60914ac
feat(giveback): group sponsor cards into per-tier rows, drop card fill
tsahimatsliah Jun 17, 2026
4068700
feat(giveback): compact single-line sponsor chips
tsahimatsliah Jun 17, 2026
f66f6d3
chore: re-trigger stuck Vercel preview deploy
tsahimatsliah Jun 17, 2026
57c811f
feat(giveback): logo-forward sponsor wall, drop name text
tsahimatsliah Jun 17, 2026
d423cad
feat(giveback): flat monochrome sponsor wall
tsahimatsliah Jun 18, 2026
e666276
fix(giveback): never render a blank sponsor chip
tsahimatsliah Jun 18, 2026
0a3d35d
feat(giveback): three-column sponsor cards with white logo tiles
tsahimatsliah Jun 18, 2026
2cf930b
feat(giveback): divider columns + hover-lit monochrome sponsor chips
tsahimatsliah Jun 18, 2026
c80a3de
fix(giveback): robust sponsor logo render + stronger tier sizing
tsahimatsliah Jun 18, 2026
dcc9fcf
fix(giveback): render viewBox-only sponsor logos (fixed logo height)
tsahimatsliah Jun 19, 2026
5b4383a
feat(giveback): widen sponsor wall beyond the page column
tsahimatsliah Jun 19, 2026
a42e7e7
chore: re-trigger failed Vercel deploy (infra flake, unrelated to cha…
tsahimatsliah Jun 19, 2026
ccd88c3
feat(giveback): compact single bordered sponsor strip
tsahimatsliah Jun 19, 2026
ee8b1f5
feat(giveback): larger logos with stronger per-tier size difference
tsahimatsliah Jun 19, 2026
691d8bf
feat(giveback): stronger size spread across sponsor tiers
tsahimatsliah Jun 19, 2026
c8cdc8d
fix(giveback): per-tier logo max-width so gold actually reads bigger
tsahimatsliah Jun 20, 2026
c86b130
feat(giveback): align sponsor strip to the page column width
tsahimatsliah Jun 20, 2026
9cb1f50
feat(giveback): move 'Sponsored by' label above the strip, left aligned
tsahimatsliah Jun 20, 2026
041a1d2
feat(giveback): left-align sponsor logos inside the strip
tsahimatsliah Jun 20, 2026
3c27718
fix(giveback): rectangular journey connector + polish
tsahimatsliah Jun 20, 2026
94fbc29
feat(giveback): onboarding warm-up funnel before the baseline page
tsahimatsliah Jun 24, 2026
e55cd6a
feat(giveback): choreographed motion + cohesive visuals in the funnel
tsahimatsliah Jun 24, 2026
23de462
feat(giveback): wider funnel, punchier copy, bigger visuals, real act…
tsahimatsliah Jun 24, 2026
327e21c
chore(giveback): remove em-dashes from copy and comments
tsahimatsliah Jun 24, 2026
e8a69d1
feat(giveback): make the funnel real and value-forward
tsahimatsliah Jun 24, 2026
00f1ce2
feat(giveback): persistent floating campaign video in the funnel
tsahimatsliah Jun 24, 2026
3f29242
feat(giveback): make the action ask explicit on the proof step
tsahimatsliah Jun 24, 2026
19f01cf
feat(giveback): restructure the proof step into uniform action cards
tsahimatsliah Jun 24, 2026
9f29ac5
feat(giveback): redesign How it works into a connected milestone track
tsahimatsliah Jun 24, 2026
04682da
feat(giveback): trim funnel to four steps with a personal finale
tsahimatsliah Jun 24, 2026
0fcc364
feat(giveback): slim the page cover - drop video and CTA, fold the me…
tsahimatsliah Jun 24, 2026
2383c97
feat(giveback): gate sponsors behind a flag, move How it works into t…
tsahimatsliah Jun 24, 2026
5aef1eb
feat(giveback): lighter funnel chrome, roomier causes, celebratory fi…
tsahimatsliah Jun 24, 2026
f4af8d0
docs(giveback): Storybook coverage for the giveback feature
tsahimatsliah Jun 24, 2026
780d26a
docs(giveback): start the funnel story with no causes pre-selected
tsahimatsliah Jun 24, 2026
9239418
fix(giveback): funnel stepper uses rounded-rectangle indicators, not …
tsahimatsliah Jun 24, 2026
f6de1d3
feat(giveback): explicit action brief, personal journey, tab split + …
tsahimatsliah Jun 24, 2026
e86e6ed
feat(giveback): rework funnel finale + journey roadmap for clarity, c…
tsahimatsliah Jun 24, 2026
c9ea87c
feat(giveback): meter contrast, compact cause cards, leaner FAQ hero
tsahimatsliah Jun 25, 2026
8fd0759
fix(giveback): align how-it-works step, darken the number tiles
tsahimatsliah Jun 25, 2026
591a5b6
feat(giveback): hero rework, stat-first contribution, compact causes,…
tsahimatsliah Jun 25, 2026
1585498
fix(giveback): solid sticky funnel bar, rounded-rect progress bars
tsahimatsliah Jun 25, 2026
4f5d608
Merge remote-tracking branch 'origin/main' into claude/ecstatic-dewdn…
tsahimatsliah Jun 25, 2026
85b6da7
feat(giveback): compact causes tab, aligned journey actions, prominen…
tsahimatsliah Jun 25, 2026
cf67f2e
feat(giveback): funnel polish, status-ring contribution, clearer impa…
tsahimatsliah Jun 25, 2026
0df2e44
feat(giveback): flat contribution status, funnel footer as funding-ba…
tsahimatsliah Jun 25, 2026
34955c8
fix(giveback): compact funnel footer buttons
tsahimatsliah Jun 25, 2026
7b5f143
feat(giveback): value-prop finale, causes-tab 3-col + remove control
tsahimatsliah Jun 25, 2026
980c98b
feat(giveback): tag-style filters, section-title sizing, take-action …
tsahimatsliah Jun 25, 2026
76a9d56
feat(giveback): compact floating funnel bar, detailed explore cards
tsahimatsliah Jun 25, 2026
30d4380
fix(giveback): fixed-width funnel footer, buttons flex to fill
tsahimatsliah Jun 25, 2026
dc367cc
feat(giveback): filled finale icons, forward CTA on the final step
tsahimatsliah Jun 25, 2026
d9dbbe9
feat(giveback): nested-radius footer, yellow claim, modal scroll, sto…
tsahimatsliah Jun 25, 2026
4100b95
chore: re-trigger CI (flaky webapp HistoryPage test)
tsahimatsliah Jun 25, 2026
2643427
fix(giveback): force-dismiss the "causes saved" toast after its timer
tsahimatsliah Jun 25, 2026
c2c7187
feat(giveback): finale/causes polish, remove funding bar, full descri…
tsahimatsliah Jun 25, 2026
d4b5541
feat(giveback): responsive pass — scrollable tabs, mobile-safe funnel
tsahimatsliah Jun 25, 2026
e8da268
fix(giveback): tighten the gap above the tabs bar
tsahimatsliah Jun 25, 2026
c716c6f
fix(giveback): correct first-segment progress on the reward ladder
tsahimatsliah Jun 25, 2026
eaeb316
fix(giveback): sharpen and correct the campaign messaging
tsahimatsliah Jun 25, 2026
fc7da78
feat(giveback): auto-save causes, scroll/contrast/mobile polish
tsahimatsliah Jun 25, 2026
104f130
style(giveback): balanced titles + pretty body copy across the feature
tsahimatsliah Jun 25, 2026
2764072
fix(giveback): tab scroll-to-top, flat contribution, fixed funnel bg,…
tsahimatsliah Jun 25, 2026
7cc5235
fix(giveback): move the current-goal Take action below the progress bar
tsahimatsliah Jun 25, 2026
530f1b3
fix(giveback): responsive padding, mobile hero + funnel video
tsahimatsliah Jun 25, 2026
35eb989
feat(giveback): scroll filters to top on change (match tab behavior)
tsahimatsliah Jun 25, 2026
8d3abcc
fix(giveback): flat loading skeleton for the contribution stat
tsahimatsliah Jun 25, 2026
00f0a7c
style(giveback): wider, uniform page gutter (hero, tabs, body match)
tsahimatsliah Jun 26, 2026
4f7667d
fix(giveback): mobile hero polish + subtle level badge
tsahimatsliah Jun 26, 2026
12e85f4
fix(giveback): solid dark background for the level badge
tsahimatsliah Jun 26, 2026
f6c0abc
fix(giveback): no filter jump, subtle goal-card border, compact mobile
tsahimatsliah Jun 26, 2026
bc1d274
fix(giveback): compact funnel finale height on mobile
tsahimatsliah Jun 27, 2026
8dca245
fix(giveback): align roadmap highlight, clean up toast timer, throttl…
tsahimatsliah Jun 27, 2026
dd5bf20
fix(giveback): tab clicks swap content without scrolling to the tab s…
tsahimatsliah Jun 27, 2026
2c2ad0a
fix(giveback): bleed gradient under card padding so the corner isn't cut
tsahimatsliah Jun 27, 2026
4a6875b
fix(giveback): drop 'unlocked for your causes' label from contributio…
tsahimatsliah Jun 27, 2026
d589749
copy(giveback): sharpen messaging across hero, funnel, FAQ and stats
tsahimatsliah Jun 27, 2026
4eb29ce
fix(giveback): drop reserved min-height on impact/FAQ tabs to remove gap
tsahimatsliah Jun 27, 2026
578e809
copy(giveback): remove em dashes from user-facing copy
tsahimatsliah Jun 27, 2026
a4ade47
fix(giveback): match FAQ title size to other tab headings (Title2)
tsahimatsliah Jun 27, 2026
bcdeea9
copy(giveback): new hero headline 'Ad budgets buy clicks. Ours funds …
tsahimatsliah Jun 27, 2026
5b1cd79
copy(giveback): make the deal explicit — grow through devs, fund caus…
tsahimatsliah Jun 27, 2026
d27b5ee
fix(giveback): portal funnel overlay to body so it covers the full vi…
tsahimatsliah Jun 27, 2026
29fe182
refactor(giveback): shared GivebackTabHeading for consistent tab titl…
tsahimatsliah Jun 27, 2026
cb39253
fix(giveback): center the how-it-works steps in one column, wrap copy…
tsahimatsliah Jun 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { ComponentType, ReactElement, ReactNode } from 'react';
import React, { useState } from 'react';
import React from 'react';
import classNames from 'classnames';
import {
Typography,
Expand All @@ -15,6 +15,7 @@ import type { ContributionAction } from '../types';
import { ContributionSubmissionStatus } from '../types';
import { formatDonationAmount } from '../utils';
import { getActionPlatformVisual } from '../actionPlatform';
import { GivebackPlatformLogo } from './GivebackPlatformLogo';

interface GivebackActionCardProps {
action: ContributionAction;
Expand All @@ -39,48 +40,7 @@ const formatCooldownRemaining = (endsAt: string): string => {
return `${Math.max(1, minutes)}m`;
};

interface PlatformLogoProps {
logoUrl?: string;
Icon: ComponentType<IconProps>;
forceDark?: boolean;
isDimmed: boolean;
}

// Prefers the real brand logo (an SVG from the logo CDN) and falls back to the
// internal glyph if there is no logo for the surface or the remote one fails to
// load — so a tile is never broken or blank. The parent tile already pins the
// background and applies the dimmed/grayscale treatment.
const PlatformLogo = ({
logoUrl,
Icon,
forceDark,
isDimmed,
}: PlatformLogoProps): ReactElement => {
const [failed, setFailed] = useState(false);

if (logoUrl && !failed) {
return (
<img
src={logoUrl}
alt=""
aria-hidden
loading="lazy"
onError={() => setFailed(true)}
className="size-6 object-contain"
/>
);
}

return (
<Icon
secondary
size={IconSize.Small}
className={classNames(!isDimmed && forceDark && 'brightness-0')}
/>
);
};

// One sharp, explicit title carries the ask — no competing subtitle. The
// One sharp, explicit title carries the ask - no competing subtitle. The
// supporting details (payout, status, "just for love") sit in a calm top/bottom
// frame around it so the card stays easy to scan at a glance.
export const GivebackActionCard = ({
Expand Down Expand Up @@ -206,7 +166,7 @@ export const GivebackActionCard = ({
: 'shadow-1 bg-white text-black group-hover:scale-105',
)}
>
<PlatformLogo
<GivebackPlatformLogo
logoUrl={logoUrl}
Icon={Icon}
forceDark={forceDark}
Expand Down Expand Up @@ -282,7 +242,7 @@ export const GivebackActionCard = ({
: 'bg-surface-float hover:bg-surface-hover',
)}
>
{/* Glossy sheen that sweeps across on hover a small reward flourish. */}
{/* Glossy sheen that sweeps across on hover - a small reward flourish. */}
<span
aria-hidden
className="via-white/10 pointer-events-none absolute inset-0 -translate-x-full bg-gradient-to-r from-transparent to-transparent transition-transform duration-700 ease-out group-hover:translate-x-full motion-reduce:hidden"
Expand All @@ -297,7 +257,7 @@ export const GivebackActionCard = ({
// read as temporary rather than finished.
return (
<FlexCol
aria-label={`${action.title} ${statusMeta?.label ?? ''}`}
aria-label={`${action.title}, ${statusMeta?.label ?? ''}`}
className={classNames(
'h-full w-full gap-3 rounded-16 p-4',
isDone
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,15 @@ const ActionGrid = ({
</div>
);

export const GivebackActionCatalog = (): ReactElement => {
interface GivebackActionCatalogProps {
// Scrolls the tab strip back to the top so a filtered list always starts in
// view (no jump from the previous scroll position).
onFilter?: () => void;
}

export const GivebackActionCatalog = ({
onFilter,
}: GivebackActionCatalogProps): ReactElement => {
const { logEvent } = useLogContext();
const { actions, categories, isPending } = useContributionActions(true);
const [selectedCategory, setSelectedCategory] = useState<string>(ALL_FILTER);
Expand Down Expand Up @@ -73,6 +81,7 @@ export const GivebackActionCatalog = (): ReactElement => {
extra: JSON.stringify({ category_id: categoryId }),
});
setSelectedCategory(categoryId);
onFilter?.();
};

const toggleShowAll = () => {
Expand Down Expand Up @@ -203,8 +212,8 @@ export const GivebackActionCatalog = (): ReactElement => {
type={TypographyType.Footnote}
color={TypographyColor.Tertiary}
>
We can&apos;t pay for these, but we&apos;d genuinely appreciate
them.
No donation rides on these. They just help us out. We&apos;d love
you for it.
</Typography>
</FlexCol>
<ActionGrid actions={loveActions} onSubmit={setSubmissionAction} />
Expand Down
Loading
Loading