-
Notifications
You must be signed in to change notification settings - Fork 5
v2 homepage: Bitcoin gift cards focus #1050
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
bobscully3
wants to merge
49
commits into
master
Choose a base branch
from
homepage/v2-redesign
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
49 commits
Select commit
Hold shift + click to select a range
fbf5d9b
Add v2 homepage focused on Bitcoin gift cards
4ef4836
fix(homepage): resolve lint errors blocking CI
orveth 64c6ad5
feat(auth): skip splash for logged-out users on protected paths
orveth 9ffef9a
chore(homepage): remove never-deployed v1 directory and route
orveth facb784
chore(homepage): drop /home meta override so it inherits root.tsx OG …
orveth a9c5a55
fix(homepage): eliminate flash at end of hero card transition
orveth 117c867
fix(prerender): disable Suspense outlining to prevent fallback flash
ditto-agent 8ab4d7b
test(vercel): rewrite prerendered paths to their static HTML files
ditto-agent 97a80ef
test(vercel): add cleanUrls to try unblocking prerender route serving
ditto-agent f8bcd12
test(vercel): try redirect for /home to diagnose framework-preset int…
ditto-agent 621f23b
test(vercel): drop cleanUrls so redirect doesn't loop with index.html…
ditto-agent d7de0b1
fix(prerender): also disable Suspense outlining at runtime SSR
ditto-agent ac35288
refactor(homepage): convert custom CSS to Tailwind utilities (preview)
orveth ff5b688
fix(homepage): restore Kode Mono on font-mono inside marketing tree
orveth e29ef9a
fix(homepage): repair broken font-family arbitrary values for Tailwin…
orveth 251654a
fix(homepage): drop marketing-anchor color-inherit override
orveth 7509963
feat(homepage): always show motion, drop prefers-reduced-motion gates
orveth 9189132
fix(homepage): drop motion-safe gates and restore nav button borders
orveth 3f3c8b5
fix(homepage): pre-decode gift card images to eliminate transition flash
orveth 5455d18
feat(homepage): replace hero pixel-wipe with stacked crossfade
orveth e41f66a
fix(homepage): preload marketing fonts to eliminate FOUT-induced layo…
697fdb7
fix(homepage): make spend QR responsive and harden iOS clip
orveth 6d978e6
feat(homepage): refresh hero cards to live discoverable set
orveth 78dab61
fix(homepage): center QR vertically in iOS WebKit via flex + explicit…
orveth ca49279
fix(homepage): expand spend PAID overlay to cover entire QR area
orveth f1c58e0
fix(homepage): bound spend QR SVG to PAID overlay's inset to prevent …
orveth d6ce02e
fix(homepage): extend spend PAID overlay bottom to cover iOS QR overflow
orveth d00ef27
fix(homepage): clip spend QR via wrapper div + restore symmetric squa…
orveth e06a42a
feat(homepage): swap merchants contact mailto for waitlist signup link
orveth ab6b851
feat(homepage): hero pixel-mask reveal transition
orveth 712b5b1
fix(homepage): include incoming card inside isolated dissolve wrapper
orveth aa63ac8
fix(homepage): pixel reveal via SVG pattern fill instead of destinati…
orveth fd853e9
feat(homepage): smooth-scroll to top when AGICASH logo clicked
orveth af1b491
fix(homepage): spread hero pixel-cell flips for distinct timing
orveth c87c3dd
fix(homepage): scroll the marketing container, not the window, on log…
orveth db5a757
feat(homepage): randomize hero pixel-reveal cell order per transition
orveth a0fe668
chore(homepage): update merchants CTA copy to "join the waitlist"
orveth c6ea314
feat(homepage): link hero card labels to merchant sites + rename Mari…
orveth 0147394
fix(homepage): dissolve outgoing card on top of static incoming to el…
orveth d91cafc
fix(homepage): convert section title headings to real anchor tags
orveth c9d771a
refactor(homepage): drop dead code and trim redundant hero state
gudnuf c739f85
refactor(homepage): move section anchors to labels + harden hero pixe…
gudnuf 9e0860a
fix(homepage): repair iOS hero dissolve + land hash navs at section top
gudnuf b002290
docs: agicash Rust SDK design spec
gudnuf a7478ea
docs: add multi-device, concurrency, and TDD slicing to Rust SDK spec
gudnuf 1cb092b
docs: simplify Spark provider boundary in Rust SDK spec
gudnuf bb19b8b
perf(homepage): preload pubkey hero card to unblock LCP
gudnuf 929a118
chore: remove agicash rust SDK design doc
gudnuf 4a36668
fix(homepage): close section anchor scroll-margin gap to nav border
orveth File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| import { useQuery } from '@tanstack/react-query'; | ||
| import { Link, useLocation } from 'react-router'; | ||
| import { authQueryOptions } from '~/features/user/auth'; | ||
| import { cn } from '~/lib/utils'; | ||
|
|
||
| type JoinBetaButtonProps = { | ||
| size?: 'default' | 'lg'; | ||
| className?: string; | ||
| }; | ||
|
|
||
| export function JoinBetaButton({ | ||
| size = 'default', | ||
| className, | ||
| }: JoinBetaButtonProps) { | ||
| const location = useLocation(); | ||
| const { data: authState } = useQuery(authQueryOptions()); | ||
| const isLoggedIn = authState?.isLoggedIn ?? false; | ||
|
|
||
| const sizeClasses = | ||
| size === 'lg' ? 'h-12 px-7 text-base' : 'h-10 px-5 text-sm'; | ||
|
|
||
| return ( | ||
| <Link | ||
| to={isLoggedIn ? '/' : { ...location, pathname: '/signup' }} | ||
| className={cn( | ||
| 'inline-flex items-center justify-center rounded-md border border-[color:var(--mk-brand)] bg-[color:var(--mk-brand)] font-medium font-mono text-[#04080f] tracking-wide transition-[background-color,color] duration-200 hover:bg-transparent hover:text-[color:var(--mk-brand)] focus-visible:outline-2 focus-visible:outline-[color:var(--mk-brand)] focus-visible:outline-offset-2', | ||
| sizeClasses, | ||
| className, | ||
| )} | ||
| > | ||
| {isLoggedIn ? 'Go to Wallet' : 'Get Started'} | ||
| </Link> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| import type { HTMLAttributes, ReactNode } from 'react'; | ||
| import { cn } from '~/lib/utils'; | ||
|
|
||
| type MarketingCardProps = HTMLAttributes<HTMLDivElement> & { | ||
| children: ReactNode; | ||
| }; | ||
|
|
||
| export function MarketingCard({ | ||
| children, | ||
| className, | ||
| ...props | ||
| }: MarketingCardProps) { | ||
| return ( | ||
| <div | ||
| className={cn( | ||
| 'rounded-2xl border border-[color:var(--mk-border)] bg-[color:var(--mk-bg-card)] p-7 transition-colors duration-200 hover:border-[color:var(--mk-border-bright)] md:p-9', | ||
| className, | ||
| )} | ||
| {...props} | ||
| > | ||
| {children} | ||
| </div> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| import { useQuery } from '@tanstack/react-query'; | ||
| import { Link } from 'react-router'; | ||
| import logoUrl from '~/assets/full_logo.png'; | ||
| import { authQueryOptions } from '~/features/user/auth'; | ||
|
|
||
| const navBtnBase = | ||
| 'inline-flex h-9 items-center justify-center whitespace-nowrap rounded-full border px-4 [font-family:var(--mk-font-mono)] text-xs tracking-[0.04em] transition-[background-color,color,border-color] duration-200 md:h-[38px] md:px-5 md:text-[13px]'; | ||
|
|
||
| const loginBtn = | ||
| 'border-[color:var(--mk-brand)] bg-transparent text-[color:var(--mk-brand)] hover:bg-[rgba(0,212,255,0.08)]'; | ||
|
|
||
| const signupBtn = | ||
| 'border-[color:var(--mk-brand)] bg-[color:var(--mk-brand)] text-[#04080f] hover:bg-transparent hover:text-[color:var(--mk-brand)]'; | ||
|
|
||
| export function MarketingNav() { | ||
| const { data: authState } = useQuery(authQueryOptions()); | ||
| const isLoggedIn = authState?.isLoggedIn ?? false; | ||
|
|
||
| return ( | ||
| <header className="sticky top-0 z-50 w-full border-[color:var(--mk-border)] border-b bg-[rgba(4,8,15,0.78)] backdrop-blur-[14px] backdrop-saturate-[140%]"> | ||
| <div className="flex w-full items-center justify-between gap-3 px-5 py-[14px] md:px-8 md:py-4"> | ||
| <Link | ||
| to="/home" | ||
| className="inline-flex items-center" | ||
| aria-label="Agicash" | ||
| onClick={() => | ||
| document | ||
| .querySelector('.marketing') | ||
| ?.scrollTo({ top: 0, behavior: 'smooth' }) | ||
| } | ||
| > | ||
| <img | ||
| src={logoUrl} | ||
| alt="Agicash" | ||
| className="block h-[22px] w-auto opacity-90 md:h-[26px]" | ||
| /> | ||
| </Link> | ||
|
|
||
| <nav className="flex items-center gap-2"> | ||
| {isLoggedIn ? ( | ||
| <Link to="/" className={`${navBtnBase} ${signupBtn}`}> | ||
| Go to Wallet | ||
| </Link> | ||
| ) : ( | ||
| <> | ||
| <Link to="/login" className={`${navBtnBase} ${loginBtn}`}> | ||
| Log in | ||
| </Link> | ||
| <Link to="/signup" className={`${navBtnBase} ${signupBtn}`}> | ||
| Sign up | ||
| </Link> | ||
| </> | ||
| )} | ||
| </nav> | ||
| </div> | ||
| </header> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| import { cn } from '~/lib/utils'; | ||
|
|
||
| type SectionLabelProps = { | ||
| children: string; | ||
| className?: string; | ||
| href?: string; | ||
| }; | ||
|
|
||
| export function SectionLabel({ children, className, href }: SectionLabelProps) { | ||
| const labelClasses = cn( | ||
| 'translate-y-2 text-left font-mono text-[color:var(--mk-text-muted)] text-xs uppercase tracking-[0.12em]', | ||
| className, | ||
| ); | ||
| const content = ( | ||
| <> | ||
| <span aria-hidden="true">{'> '}</span> | ||
| {children} | ||
| </> | ||
| ); | ||
|
|
||
| if (href) { | ||
| return ( | ||
| <a href={href} className={cn('block w-fit', labelClasses)}> | ||
| {content} | ||
| </a> | ||
| ); | ||
| } | ||
|
|
||
| return <div className={labelClasses}>{content}</div>; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| import type { HTMLAttributes, ReactNode } from 'react'; | ||
| import { cn } from '~/lib/utils'; | ||
|
|
||
| type SectionProps = HTMLAttributes<HTMLElement> & { | ||
| id?: string; | ||
| children: ReactNode; | ||
| hairline?: boolean; | ||
| }; | ||
|
|
||
| export function Section({ | ||
| id, | ||
| children, | ||
| hairline = true, | ||
| className, | ||
| ...props | ||
| }: SectionProps) { | ||
| return ( | ||
| <section | ||
| id={id} | ||
| className={cn( | ||
| 'relative w-full px-5 py-20 md:px-8 md:py-32', | ||
| hairline && 'border-[color:var(--mk-border)] border-t', | ||
| className, | ||
| )} | ||
| {...props} | ||
| > | ||
| <div className="mx-auto w-full max-w-6xl">{children}</div> | ||
| </section> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| import { MarketingNav } from './components/marketing-nav'; | ||
| import { BuySection } from './sections/buy-section'; | ||
| import { CtaSection } from './sections/cta-section'; | ||
| import { FooterSection } from './sections/footer-section'; | ||
| import { HeroSection } from './sections/hero-section'; | ||
| import { MerchantsSection } from './sections/merchants-section'; | ||
| import { SendSection } from './sections/send-section'; | ||
| import { SpendSection } from './sections/spend-section'; | ||
| import { WalletSection } from './sections/wallet-section'; | ||
| import './styles.css'; | ||
|
|
||
| export function MarketingPage() { | ||
| return ( | ||
| <div className="marketing scrollbar-none h-dvh overflow-y-auto overflow-x-hidden bg-[color:var(--mk-bg)] text-[color:var(--mk-text)] [font-family:var(--mk-font-display)]"> | ||
| <MarketingNav /> | ||
| <main> | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we should have anchors to each of these sections so user can share the link to specific section |
||
| <HeroSection /> | ||
| <BuySection /> | ||
| <SendSection /> | ||
| <SpendSection /> | ||
| <WalletSection /> | ||
| <CtaSection /> | ||
| <MerchantsSection /> | ||
| </main> | ||
| <FooterSection /> | ||
| </div> | ||
| ); | ||
| } | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if not already done, we should check dimensions that we need (not to have bigger images than we actually need) and if we can compress (change image type if needed) these images to reduce the size