1+ import {
2+ BellIcon ,
3+ ChatBubbleLeftRightIcon ,
4+ CodeBracketIcon ,
5+ FlagIcon ,
6+ GiftIcon ,
7+ GlobeAltIcon ,
8+ HeartIcon ,
9+ LightBulbIcon ,
10+ MagnifyingGlassIcon ,
11+ MegaphoneIcon ,
12+ ScaleIcon ,
13+ SparklesIcon ,
14+ } from '@heroicons/react/24/outline'
115import clsx from 'clsx'
216import { discordLink , formLink , githubRepo } from 'common/constants'
317import { DEPLOYED_WEB_URL } from 'common/envs/constants'
418import Link from 'next/link'
5- import { ReactNode } from 'react'
19+ import { ComponentType , ReactNode , SVGProps } from 'react'
620import { CopyLinkOrShareButton , ShareProfileOnXButton } from 'web/components/buttons/copy-link-button'
721import { GeneralButton } from 'web/components/buttons/general-button'
822import { Row } from 'web/components/layout/row'
@@ -12,14 +26,16 @@ import {useT} from 'web/lib/locale'
1226
1327// ─── Types ────────────────────────────────────────────────────────────────────
1428
29+ type IconType = ComponentType < SVGProps < SVGSVGElement > >
30+
1531interface FeatureCardProps {
16- icon : string
32+ icon : IconType
1733 title : string
1834 text : ReactNode
1935}
2036
2137interface HelpCardProps {
22- icon : string
38+ icon : IconType
2339 title : string
2440 text : ReactNode
2541 buttonLabel : string
@@ -30,7 +46,7 @@ interface HelpCardProps {
3046
3147// ─── Feature Card ─────────────────────────────────────────────────────────────
3248
33- function FeatureCard ( { icon, title, text} : FeatureCardProps ) {
49+ function FeatureCard ( { icon : Icon , title, text} : FeatureCardProps ) {
3450 return (
3551 < div
3652 className = "
@@ -41,8 +57,8 @@ function FeatureCard({icon, title, text}: FeatureCardProps) {
4157 hover:border-primary-500
4258 "
4359 >
44- < div className = "w-11 h-11 rounded-xl bg-canvas-200 border border-canvas-300 flex items-center justify-center text-xl mb-5 flex-shrink-0" >
45- { icon }
60+ < div className = "w-11 h-11 rounded-xl bg-primary-100 border border-primary-200 flex items-center justify-center mb-5 flex-shrink-0" >
61+ < Icon className = "w-5 h-5 text-primary-600" strokeWidth = { 1.8 } />
4662 </ div >
4763 < h3 className = "font-bold text-ink-900 mb-2.5" > { title } </ h3 >
4864 < p className = "text-sm text-ink-500 leading-relaxed" > { text } </ p >
@@ -52,7 +68,7 @@ function FeatureCard({icon, title, text}: FeatureCardProps) {
5268
5369// ─── Full-width Feature Card ──────────────────────────────────────────────────
5470
55- function FeatureCardWide ( { icon, title, text} : FeatureCardProps ) {
71+ function FeatureCardWide ( { icon : Icon , title, text} : FeatureCardProps ) {
5672 return (
5773 < div
5874 className = "
@@ -64,8 +80,8 @@ function FeatureCardWide({icon, title, text}: FeatureCardProps) {
6480 hover:border-primary-500
6581 "
6682 >
67- < div className = "w-11 h-11 rounded-xl bg-canvas-200 border border-canvas-300 flex items-center justify-center text-xl flex-shrink-0" >
68- { icon }
83+ < div className = "w-11 h-11 rounded-xl bg-primary-100 border border-primary-200 flex items-center justify-center flex-shrink-0" >
84+ < Icon className = "w-5 h-5 text-primary-600" strokeWidth = { 1.8 } />
6985 </ div >
7086 < div className = { 'min-w-0' } >
7187 < h3 className = "font-bold text-ink-900 mb-2" > { title } </ h3 >
@@ -77,7 +93,15 @@ function FeatureCardWide({icon, title, text}: FeatureCardProps) {
7793
7894// ─── Help Card ────────────────────────────────────────────────────────────────
7995
80- function HelpCard ( { icon, title, text, buttonLabel, buttonUrl, buttonPrimary, id} : HelpCardProps ) {
96+ function HelpCard ( {
97+ icon : Icon ,
98+ title,
99+ text,
100+ buttonLabel,
101+ buttonUrl,
102+ buttonPrimary,
103+ id,
104+ } : HelpCardProps ) {
81105 return (
82106 < div
83107 className = "
@@ -92,8 +116,8 @@ function HelpCard({icon, title, text, buttonLabel, buttonUrl, buttonPrimary, id}
92116 // causing the absolute/flex-item to bleed past the corner radius.
93117 // Removed for cross-browser consistency.
94118 >
95- < div className = "w-10 h-10 rounded-xl bg-canvas-200 border border-canvas-300 flex items-center justify-center text-lg mb-4 flex-shrink-0" >
96- { icon }
119+ < div className = "w-10 h-10 rounded-xl bg-primary-100 border border-primary-200 flex items-center justify-center mb-4 flex-shrink-0" >
120+ < Icon className = "w-[18px] h-[18px] text-primary-600" strokeWidth = { 1.8 } />
97121 </ div >
98122 < h3 id = { id } className = "font-bold text-ink-900 mb-2" >
99123 { title }
@@ -134,7 +158,10 @@ function ShareStrip({title, text}: {title: string; text: string}) {
134158 return (
135159 < div className = "bg-canvas-950 rounded-2xl px-9 py-8 flex items-center justify-between gap-6 flex-wrap" >
136160 < div className = { 'max-w-[450px]' } >
137- < h3 className = "text-white text-lg font-bold mb-1.5" > 📣 { title } </ h3 >
161+ < h3 className = "text-white text-lg font-bold mb-1.5 flex items-center gap-2.5" >
162+ < MegaphoneIcon className = "w-5 h-5 text-primary-500 flex-shrink-0" strokeWidth = { 1.8 } />
163+ { title }
164+ </ h3 >
138165 < p className = "text-primary-500 text-sm leading-relaxed" > { text } </ p >
139166 </ div >
140167 < Row className = "flex gap-2 flex-wrap" >
@@ -178,33 +205,33 @@ export default function About() {
178205
179206 const features : ( FeatureCardProps & { wide ?: boolean } ) [ ] = [
180207 {
181- icon : '🔍' ,
208+ icon : MagnifyingGlassIcon ,
182209 title : t ( 'about.block.keyword.title' , 'Keyword Search the Database' ) ,
183210 text : t (
184211 'about.block.keyword.text' ,
185212 '"Meditation", "Hiking", "Neuroscience", "Nietzsche". Access any profile and get niche.' ,
186213 ) ,
187214 } ,
188215 {
189- icon : '🔔' ,
216+ icon : BellIcon ,
190217 title : t ( 'about.block.notify.title' , 'Get Notified About Searches' ) ,
191218 text : t (
192219 'about.block.notify.text' ,
193220 "No need to constantly check the app! We'll contact you when new users fit your searches." ,
194221 ) ,
195222 } ,
196223 {
197- icon : '🎭' ,
224+ icon : SparklesIcon ,
198225 title : t ( 'about.block.personality.title' , 'Personality-Centered' ) ,
199226 text : t ( 'about.block.personality.text' , 'Values and interests first, photos are secondary.' ) ,
200227 } ,
201228 {
202- icon : '🎁' ,
229+ icon : GiftIcon ,
203230 title : t ( 'about.block.free.title' , 'Completely Free' ) ,
204231 text : t ( 'about.block.free.text' , 'Subscription-free. Paywall-free. Ad-free.' ) ,
205232 } ,
206233 {
207- icon : '🗳️' ,
234+ icon : ScaleIcon ,
208235 title : t ( 'about.block.democratic.title' , 'Democratic' ) ,
209236 text : (
210237 < span >
@@ -224,15 +251,15 @@ export default function About() {
224251 ) ,
225252 } ,
226253 {
227- icon : '🎯' ,
254+ icon : FlagIcon ,
228255 title : t ( 'about.block.mission.title' , 'One Mission' ) ,
229256 text : t (
230257 'about.block.mission.text' ,
231258 'Our only mission is to create more genuine human connections, and every decision must serve that goal.' ,
232259 ) ,
233260 } ,
234261 {
235- icon : '🌍' ,
262+ icon : GlobeAltIcon ,
236263 title : t ( 'about.block.vision.title' , 'Vision' ) ,
237264 text : t (
238265 'about.block.vision.text' ,
@@ -244,7 +271,7 @@ export default function About() {
244271
245272 const helpCards : HelpCardProps [ ] = [
246273 {
247- icon : '💡' ,
274+ icon : LightBulbIcon ,
248275 id : 'give-suggestions-or-contribute' ,
249276 title : t ( 'about.suggestions.title' , 'Give Suggestions or Contribute' ) ,
250277 text : t (
@@ -256,7 +283,7 @@ export default function About() {
256283 // buttonPrimary: true,
257284 } ,
258285 {
259- icon : '💻' ,
286+ icon : CodeBracketIcon ,
260287 id : 'share' ,
261288 title : t ( 'about.dev.title' , 'Develop the App' ) ,
262289 text : t (
@@ -267,7 +294,7 @@ export default function About() {
267294 buttonUrl : githubRepo ,
268295 } ,
269296 {
270- icon : '💬' ,
297+ icon : ChatBubbleLeftRightIcon ,
271298 id : 'join-chats' ,
272299 title : t ( 'about.join.title' , 'Join the Community' ) ,
273300 text : t (
@@ -278,7 +305,7 @@ export default function About() {
278305 buttonUrl : discordLink ,
279306 } ,
280307 {
281- icon : '❤️' ,
308+ icon : HeartIcon ,
282309 id : 'donate' ,
283310 title : t ( 'about.donate.title' , 'Donate' ) ,
284311 text : t (
0 commit comments