|
1 | | -import type { Metadata } from 'next'; |
2 | | -import { Activity, Layers, ReceiptText, RefreshCw, ShieldCheck, Users, Zap } from 'lucide-react'; |
| 1 | +'use client'; |
| 2 | + |
| 3 | +import { Activity, Layers, ReceiptText, RefreshCw, ShieldCheck, Zap, Sparkles, Users } from 'lucide-react'; |
3 | 4 | import { SectionContainer } from '../../components/layout/SectionContainer'; |
4 | 5 | import { CTASection } from '../../components/marketing/CTASection'; |
5 | 6 | import { FeatureCard } from '../../components/marketing/FeatureCard'; |
6 | 7 | import { PageHeader } from '../../components/marketing/PageHeader'; |
7 | | - |
8 | | -export const metadata: Metadata = { |
9 | | - title: 'Features | FairShare - Smart Expense Sharing', |
10 | | - description: 'Explore the features that help groups track expenses, keep balances current, and settle up faster.', |
11 | | -}; |
| 8 | +import { GlassCard } from '../../components/ui/GlassCard'; |
12 | 9 |
|
13 | 10 | const featureList = [ |
14 | 11 | { |
15 | 12 | title: 'Flexible split rules', |
16 | 13 | description: 'Split equally, assign exact amounts, or use percentages when the group did not share costs evenly.', |
17 | 14 | iconName: 'Zap' as const, |
18 | | - colorClass: 'shadow-yellow-500/20', |
| 15 | + eyebrow: 'Dynamic Logic', |
19 | 16 | }, |
20 | 17 | { |
21 | 18 | title: 'Dedicated group spaces', |
22 | 19 | description: 'Separate trips, roommates, and teams so each group has its own members, expenses, and running balance.', |
23 | 20 | iconName: 'Users' as const, |
24 | | - colorClass: 'shadow-cyan-500/20', |
| 21 | + eyebrow: 'Isolated Context', |
25 | 22 | }, |
26 | 23 | { |
27 | 24 | title: 'Instant balance updates', |
28 | 25 | description: 'See balance changes instantly across all members after a new expense or settlement is recorded.', |
29 | 26 | iconName: 'RefreshCw' as const, |
30 | | - colorClass: 'shadow-purple-500/20', |
| 27 | + eyebrow: 'Real-time Sync', |
31 | 28 | }, |
32 | 29 | { |
33 | 30 | title: 'Receipts with context', |
34 | 31 | description: 'Attach receipts to expenses so the group can confirm the details without searching old message threads.', |
35 | 32 | iconName: 'ShieldCheck' as const, |
36 | | - colorClass: 'shadow-pink-500/20', |
| 33 | + eyebrow: 'Transparency', |
37 | 34 | }, |
38 | 35 | { |
39 | 36 | title: 'Settlement simplification', |
40 | 37 | description: 'Reduce multiple debts into the fewest practical payments so the group can settle up with less friction.', |
41 | 38 | iconName: 'Layers' as const, |
42 | | - colorClass: 'shadow-emerald-500/20', |
| 39 | + eyebrow: 'Smart Math', |
43 | 40 | }, |
44 | 41 | { |
45 | 42 | title: 'Activity visibility', |
46 | 43 | description: 'Keep a running feed of what changed, who added it, and when the group balance moved.', |
47 | 44 | iconName: 'Activity' as const, |
48 | | - colorClass: 'shadow-orange-500/20', |
| 45 | + eyebrow: 'Audit Trail', |
49 | 46 | }, |
50 | 47 | ]; |
51 | 48 |
|
52 | | -const detailSections = [ |
| 49 | +const deepDiveSections = [ |
53 | 50 | { |
54 | | - title: 'Capture the expense clearly', |
55 | | - description: |
56 | | - 'FairShare helps the payer add the amount, choose the split method, and attach supporting details so everyone understands the record the first time.', |
| 51 | + title: 'Capture clearly', |
| 52 | + description: 'FairShare helps the payer add the amount, choose the split method, and attach supporting details instantly.', |
57 | 53 | icon: ReceiptText, |
| 54 | + label: 'Step 01', |
58 | 55 | }, |
59 | 56 | { |
60 | | - title: 'Keep everyone in sync', |
61 | | - description: |
62 | | - 'As expenses or settlements are added, balances update for the group right away. Members do not need to refresh a spreadsheet or ask for the latest total.', |
| 57 | + title: 'Stay in sync', |
| 58 | + description: 'As expenses land, balances update for the group right away. No more "who paid already?" questions.', |
63 | 59 | icon: RefreshCw, |
| 60 | + label: 'Step 02', |
64 | 61 | }, |
65 | 62 | { |
66 | | - title: 'Close the loop faster', |
67 | | - description: |
68 | | - 'Instead of manually tracing who owes whom, settlement suggestions turn a complicated set of debts into a smaller set of actions that are easy to complete.', |
| 63 | + title: 'Close the loop', |
| 64 | + description: 'Settlement suggestions turn a complicated set of debts into a small set of easy actions.', |
69 | 65 | icon: Layers, |
| 66 | + label: 'Step 03', |
70 | 67 | }, |
71 | 68 | ]; |
72 | 69 |
|
73 | 70 | export default function FeaturesPage() { |
74 | 71 | return ( |
75 | 72 | <main className="min-h-screen overflow-hidden bg-[#030303] text-white"> |
76 | 73 | <div className="pointer-events-none fixed inset-0 grid-bg opacity-10" /> |
| 74 | + <div className="pointer-events-none fixed top-0 left-1/4 h-[500px] w-full max-w-4xl bg-purple-600/5 blur-[120px]" /> |
77 | 75 |
|
78 | | - <SectionContainer size="spacious" className="relative pt-10 sm:pt-14"> |
| 76 | + <SectionContainer size="spacious" className="relative pt-20"> |
79 | 77 | <PageHeader |
80 | | - eyebrow="Features" |
81 | | - title="Everything your group needs to split expenses clearly." |
82 | | - description="FairShare keeps shared spending organized with practical tools for logging expenses, tracking balances, and settling up without extra back-and-forth." |
| 78 | + eyebrow="Product Features" |
| 79 | + title="Everything your group needs to split bills clearly." |
| 80 | + description="FairShare keeps shared spending organized with practical tools for logging expenses, tracking balances, and settling up faster than ever." |
| 81 | + centered |
83 | 82 | /> |
84 | 83 | </SectionContainer> |
85 | 84 |
|
86 | 85 | <SectionContainer size="compact"> |
87 | | - <div className="grid gap-5 md:grid-cols-2 xl:grid-cols-3"> |
| 86 | + <div className="grid gap-6 md:grid-cols-2 xl:grid-cols-3"> |
88 | 87 | {featureList.map((feature) => ( |
89 | 88 | <FeatureCard key={feature.title} {...feature} /> |
90 | 89 | ))} |
91 | 90 | </div> |
92 | 91 | </SectionContainer> |
93 | 92 |
|
94 | | - <SectionContainer size="compact"> |
95 | | - <div className="grid gap-5 lg:grid-cols-3"> |
96 | | - {detailSections.map((section) => ( |
97 | | - <div key={section.title} className="marketing-card p-6 sm:p-7"> |
98 | | - <section.icon size={22} className="text-purple-300" /> |
99 | | - <h2 className="mt-5 text-2xl font-bold tracking-tight text-white">{section.title}</h2> |
100 | | - <p className="mt-3 text-sm leading-6 text-zinc-300 sm:text-base sm:leading-7">{section.description}</p> |
| 93 | + <SectionContainer size="default"> |
| 94 | + <div className="grid gap-12 lg:grid-cols-3"> |
| 95 | + {deepDiveSections.map((section) => ( |
| 96 | + <div key={section.title} className="relative group"> |
| 97 | + <div className="text-[10px] font-bold uppercase tracking-[0.3em] text-zinc-600 mb-6 flex items-center gap-4"> |
| 98 | + <div className="h-px flex-1 bg-white/5" /> |
| 99 | + <span>{section.label}</span> |
| 100 | + <div className="h-px flex-1 bg-white/5" /> |
| 101 | + </div> |
| 102 | + <section.icon size={32} className="text-purple-400 mb-6 transition-transform group-hover:scale-110" /> |
| 103 | + <h2 className="text-2xl font-extrabold tracking-tight text-white mb-4">{section.title}</h2> |
| 104 | + <p className="text-sm leading-8 text-zinc-400 group-hover:text-zinc-300 transition-colors">{section.description}</p> |
101 | 105 | </div> |
102 | 106 | ))} |
103 | 107 | </div> |
104 | 108 | </SectionContainer> |
105 | 109 |
|
106 | 110 | <SectionContainer size="compact"> |
107 | | - <div className="marketing-card p-6 sm:p-8 lg:p-10"> |
108 | | - <div className="grid gap-8 lg:grid-cols-[0.9fr_1.1fr] lg:items-start"> |
| 111 | + <GlassCard className="p-10 sm:p-16 lg:p-20 border-white/10 bg-black/40"> |
| 112 | + <div className="grid gap-12 lg:grid-cols-[0.9fr_1.1fr] lg:items-center"> |
109 | 113 | <div> |
110 | | - <p className="text-sm font-semibold uppercase tracking-[0.22em] text-zinc-400">Why it works</p> |
111 | | - <h2 className="mt-3 text-3xl font-bold tracking-tight text-white sm:text-4xl"> |
112 | | - Clear records, live balances, and less ambiguity for everyone involved. |
| 114 | + <span className="eyebrow-label mb-6">Versatility</span> |
| 115 | + <h2 className="text-4xl font-extrabold tracking-tight text-white sm:text-5xl"> |
| 116 | + One app for every group situation. |
113 | 117 | </h2> |
114 | | - <p className="mt-4 text-base leading-7 text-zinc-300"> |
115 | | - Each part of the product is designed to reduce one of the common breakdowns in shared expense tracking: missing context, stale numbers, or unclear next steps. |
| 118 | + <p className="mt-8 text-lg leading-8 text-zinc-400"> |
| 119 | + Each part of the product is designed to reduce common breakdowns: missing context, stale numbers, or unclear next steps. |
116 | 120 | </p> |
117 | 121 | </div> |
118 | 122 | <div className="grid gap-4 sm:grid-cols-2"> |
119 | | - <div className="rounded-[1.75rem] border border-white/10 bg-white/[0.04] p-5"> |
120 | | - <h3 className="text-lg font-semibold text-white">For trips and events</h3> |
121 | | - <p className="mt-2 text-sm leading-6 text-zinc-300"> |
122 | | - Track shared bookings, meals, rides, and one-off purchases without losing sight of who covered what. |
123 | | - </p> |
124 | | - </div> |
125 | | - <div className="rounded-[1.75rem] border border-white/10 bg-white/[0.04] p-5"> |
126 | | - <h3 className="text-lg font-semibold text-white">For roommates</h3> |
127 | | - <p className="mt-2 text-sm leading-6 text-zinc-300"> |
128 | | - Keep recurring household spending visible so rent add-ons, groceries, and utilities stay easy to reconcile. |
129 | | - </p> |
130 | | - </div> |
131 | | - <div className="rounded-[1.75rem] border border-white/10 bg-white/[0.04] p-5 sm:col-span-2"> |
132 | | - <h3 className="text-lg font-semibold text-white">For teams and clubs</h3> |
133 | | - <p className="mt-2 text-sm leading-6 text-zinc-300"> |
134 | | - Maintain a shared record for reimbursements and group purchases when multiple people are contributing across the same budget. |
135 | | - </p> |
136 | | - </div> |
| 123 | + {[ |
| 124 | + { title: 'For trips', desc: 'Track meals, rides, and one-off bookings easily.' }, |
| 125 | + { title: 'For roommates', desc: 'Keep rent, groceries, and utilities in check.' }, |
| 126 | + { title: 'For teams', desc: 'Maintain shared records for reimbursements.' }, |
| 127 | + { title: 'For clubs', desc: 'Manage budget contributions across members.' } |
| 128 | + ].map((item, idx) => ( |
| 129 | + <div key={idx} className="rounded-2xl border border-white/5 bg-white/[0.02] p-6 hover:bg-white/[0.04] transition-colors"> |
| 130 | + <h3 className="font-bold text-white mb-2">{item.title}</h3> |
| 131 | + <p className="text-sm text-zinc-500">{item.desc}</p> |
| 132 | + </div> |
| 133 | + ))} |
137 | 134 | </div> |
138 | 135 | </div> |
139 | | - </div> |
| 136 | + </GlassCard> |
140 | 137 | </SectionContainer> |
141 | 138 |
|
142 | | - <SectionContainer size="compact"> |
143 | | - <CTASection |
144 | | - eyebrow="See FairShare in action" |
145 | | - title="Start splitting expenses with a workflow people can actually follow." |
146 | | - description="Create a group, add the first expense, and let FairShare keep the balances readable from there." |
147 | | - primaryHref="/login" |
148 | | - primaryLabel="Start Splitting" |
149 | | - secondaryHref="/how-it-works" |
150 | | - secondaryLabel="See How It Works" |
151 | | - /> |
152 | | - </SectionContainer> |
| 139 | + <CTASection |
| 140 | + eyebrow="Power your group spending" |
| 141 | + title="Stop guessing who owes what." |
| 142 | + description="Join thousands of users who trust FairShare to keep their group ledgers accurate and their settlements simple." |
| 143 | + primaryHref="/register" |
| 144 | + primaryLabel="Start Splitting" |
| 145 | + secondaryHref="/" |
| 146 | + secondaryLabel="Learn More" |
| 147 | + /> |
153 | 148 | </main> |
154 | 149 | ); |
155 | 150 | } |
0 commit comments