Skip to content

Commit 93b3330

Browse files
committed
feat: add Community and Faq components, update HomePage layout, and remove Footer component
1 parent 3e77533 commit 93b3330

File tree

8 files changed

+255
-35
lines changed

8 files changed

+255
-35
lines changed

‎package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"preview": "vite preview"
1111
},
1212
"dependencies": {
13+
"@devnomic/marquee": "^1.0.3",
1314
"@solana/wallet-adapter-base": "^0.9.27",
1415
"@solana/wallet-adapter-react": "^0.15.39",
1516
"@solana/wallet-adapter-react-ui": "^0.9.39",

‎src/App.jsx‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ function App() {
2323
return (
2424
<div className="app">
2525
<BackgroundElements />
26-
2726
<main className="main-content p-6">
2827
<div className="container">
2928
<Routes>

‎src/components/home/Community.jsx‎

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
import React from "react";
2+
import { ChevronRight } from "lucide-react";
3+
4+
import { Marquee } from "@devnomic/marquee";
5+
import "@devnomic/marquee/dist/index.css";
6+
7+
function TestimonialCard({ name, avatar, content }) {
8+
return (
9+
<div className="w-60 mb-6 break-inside-avoid space-y-3 rounded-2xl bg-gray-800/50 border border-gray-700/50 px-5 py-3 text-sm shadow-sm p-6 backdrop-blur-xl hover:scale-[1.02] transition duration-200 ease-out">
10+
<div className="flex items-center gap-2 mb-2">
11+
<img
12+
src={avatar}
13+
alt={name}
14+
onError={e => {
15+
e.target.onerror = null;
16+
e.target.src = "/fallback-coin.png";
17+
}}
18+
className="size-7 rounded-full"
19+
/>
20+
<div className="text-white font-medium">{name}</div>
21+
</div>
22+
<div className="text-gray-300 text-xs font-normal leading-relaxed">{content}</div>
23+
</div>
24+
);
25+
}
26+
27+
const Community = () => {
28+
const socialLinks = [
29+
{
30+
name: "Join our Telegram",
31+
link: "https://t.me/codexbotzsupport",
32+
classes: "bg-gradient-to-r from-pink-500 to-purple-600 hover:from-pink-600 hover:to-purple-700",
33+
},
34+
{
35+
name: "Follow on Twiiter",
36+
link: "https://x.com/givemysolback",
37+
classes: "bg-gray-800 hover:bg-gray-700 border border-gray-700 hover:border-gray-600",
38+
},
39+
];
40+
41+
const testimonialsOne = [
42+
{
43+
name: "StellarFox",
44+
quote: "What impressed me most was the transparency—no hidden steps, just clear results.",
45+
avatar: "https://gateway.irys.xyz/qkA9eXvVtsDu5hr4BNYzyILngrDzkTGKoSOxzDS5iaQ",
46+
},
47+
{
48+
name: "Jordan Lee",
49+
quote: "Super easy to use—felt like it was made for everyday users like me.",
50+
avatar: "https://sapphire-working-koi-276.mypinata.cloud/ipfs/bafybeihvuo6kkggegbfykumeldyfaxnexmzjqxiouakwsjbfgwz7zq6k5a",
51+
},
52+
{
53+
name: "AlphaDrip",
54+
quote: "A reliable tool that actually does what it says—no unnecessary steps.",
55+
avatar: "https://ipfs.io/ipfs/Qmc4ieJEoSvAMbdN1nCFvxDqoMyXNgaJocYCYQnavztHLc",
56+
},
57+
{
58+
name: "Emily R.",
59+
quote: "I’ve used other tools before, but this is the first one that feels built for memecoins traders.",
60+
avatar: "https://pbs.twimg.com/media/GvOsNfrWwAAwy-0?format=jpg&name=small",
61+
},
62+
{
63+
name: "CryptoKitty",
64+
quote: "I was surprised at how quickly I could reclaim my SOL. Simple and effective!",
65+
avatar:
66+
"https://blznujiyxatc2qyysynmwqqqoreckcg2aolugfgoflsqqaiztuiq.arweave.net/CvLaJRi4Ji1DGJYay0IQdEglCNoDl0MUzirlCAEZnRE",
67+
},
68+
{
69+
name: "Rahul Verma",
70+
quote: "Open source builds trust. If something’s unclear, I can audit it myself.",
71+
avatar: "https://pbs.twimg.com/media/F5sWrztbsAAcJRn?format=jpg&name=small",
72+
},
73+
];
74+
75+
const testimonialsTwo = [
76+
{
77+
name: "DeFiNomad",
78+
quote: "I was skeptical at first, but the process worked flawlessly. Now I recommend it to my trading friends",
79+
avatar: "https://ipfs.io/ipfs/QmQKuTQySG6t6pW2gV3vfmrXEQ2wJkwyqyhKRorPjZpHt7",
80+
},
81+
{
82+
name: "LunaPark",
83+
quote: "As someone trading daily, this helped me free up SOL I didn’t even realize was locked. Every bit counts.",
84+
avatar: "https://node1.irys.xyz/vvXjvBJwlLTudsD-gxFCXDkZ7CCbLutxUKDhvGIEyhM",
85+
},
86+
{
87+
name: "BlockNinja",
88+
quote: "The app works exactly as promised. No confusing steps, just results.",
89+
avatar: "https://cdn.moonshot.com/OzN3OPbPavejWdQAJX4twX1z.jpg",
90+
},
91+
{
92+
name: "NFTSlayer",
93+
quote: "It saved me from losing small amounts of SOL I didn’t even notice before.",
94+
avatar: "https://ipfs.io/ipfs/QmdAQCAKXr2jEDSHwn5XjtWWWMuhB4xCmDhNTqmYgWSuva",
95+
},
96+
{
97+
name: "Alex M",
98+
quote: "Really impressed with how smooth the process is. Definitely useful.",
99+
avatar: "https://pbs.twimg.com/media/Gy4Mp1PasAAV6C_?format=jpg&name=900x900",
100+
},
101+
{
102+
name: "ChainSurfer",
103+
quote: "Knowing the app is open source makes me trust it even more. Transparency matters in crypto.",
104+
avatar: "https://pbs.twimg.com/media/GvPxx0LWIAAoUoa?format=jpg&name=small",
105+
},
106+
];
107+
108+
return (
109+
<section className="py-12">
110+
<div className="text-center mb-6">
111+
<h2 className="text-3xl sm:text-4xl font-bold text-white mb-2">Join the community</h2>
112+
<p className="text-base text-gray-400 max-w-2xl mx-auto">
113+
Discover what our community has to say about their amazing experiences.
114+
</p>
115+
</div>
116+
117+
<div className="flex flex-wrap justify-center gap-6 mb-16">
118+
<div className="flex flex-wrap justify-center gap-3">
119+
{socialLinks.map((btn, idx) => (
120+
<a
121+
key={idx}
122+
href={btn.link}
123+
target="_blank"
124+
rel="noopener noreferrer"
125+
className={`px-6 py-2.5 rounded-lg font-semibold text-white shadow-xl ${btn.classes}`}
126+
>
127+
<p className="flex items-center space-x-2">
128+
<span>{btn.name} </span>
129+
<ChevronRight className="w-4 h-4" />
130+
</p>
131+
</a>
132+
))}
133+
</div>
134+
</div>
135+
136+
<Marquee fade={true} pauseOnHover={true}>
137+
{testimonialsOne.map((testimonial, i) => (
138+
<TestimonialCard key={i} name={testimonial.name} avatar={testimonial.avatar} content={testimonial.quote} />
139+
))}
140+
</Marquee>
141+
<Marquee reverse={true} fade={true} pauseOnHover={true}>
142+
{testimonialsTwo.map((testimonial, i) => (
143+
<TestimonialCard key={i} name={testimonial.name} avatar={testimonial.avatar} content={testimonial.quote} />
144+
))}
145+
</Marquee>
146+
</section>
147+
);
148+
};
149+
150+
export default Community;

‎src/components/home/Faq.jsx‎

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import React, { useState } from "react";
2+
import { ChevronDown, ChevronUp } from "lucide-react";
3+
4+
const Faq = () => {
5+
const [openIndex, setOpenIndex] = useState(null);
6+
7+
const faqs = [
8+
{
9+
question: "Is it safe to use givemySOLback?",
10+
answer:
11+
"Absolutely! Whether you connect or import your wallet, we never ask for private keys or seed phrases. All transactions are signed by you, and our project is fully open-source so you can check the code yourself and see exactly how it works.",
12+
},
13+
{
14+
question: "Are there any fees?",
15+
answer:
16+
"Absolutely not! Using givemySOLback costs you nothing — 100% of recovered SOL goes straight to you. The only fee is the tiny Solana blockchain fee required for transactions.",
17+
},
18+
{
19+
question: "What if I want to keep certain tokens?",
20+
answer:
21+
"No worries! During the cleanup process, you can manually add the token addresses you want to protect. This ensures they remain safe while we process your wallet.",
22+
},
23+
{
24+
question: "What if my wallet doesn’t work properly?",
25+
answer:
26+
"Almost any Solana wallet works! If a wallet doesn’t connect properly, you can use our Import Wallet feature to scan it safely.",
27+
},
28+
{
29+
question: "What happens when I burn a token or close an account?",
30+
answer:
31+
"Burning a token permanently destroys it and closes the account, returning the rent SOL to your wallet. This action cannot be undone.",
32+
},
33+
{
34+
question: "Is it safe to close token accounts?",
35+
answer:
36+
"Absolutely! We only close accounts that are completely empty and unused. You won’t lose any tokens, and your wallet stays fully secure.",
37+
},
38+
{
39+
question: "What is Account Rent?",
40+
answer:
41+
"When an account is created on Solana, a small rent fee is required to store its data and process transactions. This rent is refundable when the account is closed.",
42+
},
43+
44+
];
45+
46+
const toggleFAQ = index => {
47+
setOpenIndex(openIndex === index ? null : index);
48+
};
49+
50+
return (
51+
<section className="pb-16">
52+
<div className="text-center mb-12">
53+
<h2 className="text-3xl sm:text-4xl font-bold text-white mb-2">Frequently Asked Questions</h2>
54+
<p className="text-base text-gray-400 max-w-2xl mx-auto">Everything you need to know about reclaiming your SOL</p>
55+
</div>
56+
57+
<div className="max-w-3xl mx-auto">
58+
<div className="space-y-3">
59+
{faqs.map((faq, index) => (
60+
<div key={index} className="bg-gray-800/50 backdrop-blur-xl rounded-2xl border border-gray-700/50 overflow-hidden">
61+
<button
62+
onClick={() => toggleFAQ(index)}
63+
className="w-full px-6 py-4 text-left flex items-center justify-between hover:bg-gray-700/30 transition-all duration-300"
64+
>
65+
<h3 className="text-lg font-semibold text-white pr-4">{faq.question}</h3>
66+
{openIndex === index ? (
67+
<ChevronUp className="w-5 h-5 text-pink-400 flex-shrink-0" />
68+
) : (
69+
<ChevronDown className="w-5 h-5 text-gray-400 flex-shrink-0" />
70+
)}
71+
</button>
72+
73+
{openIndex === index && (
74+
<div className="px-6 pb-5">
75+
<div className="border-t border-gray-700/50 pt-4">
76+
<p className="text-gray-300 leading-relaxed">{faq.answer}</p>
77+
</div>
78+
</div>
79+
)}
80+
</div>
81+
))}
82+
</div>
83+
</div>
84+
</section>
85+
);
86+
};
87+
88+
export default Faq;

‎src/components/home/Features.jsx‎

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from "react";
22
import { Zap, Shield, Sparkles } from "lucide-react";
33

4-
const Features = ({ hasSearched }) => {
4+
const Features = () => {
55
const features = [
66
{
77
icon: Zap,
@@ -24,26 +24,17 @@ const Features = ({ hasSearched }) => {
2424
];
2525

2626
return (
27-
<section
28-
className={`grid grid-cols-1 sm:grid-cols-3 gap-6 ${
29-
hasSearched ? "mt-16" : "mt-16"
30-
} max-w-4xl mx-auto`}
31-
>
27+
<section className="grid grid-cols-1 sm:grid-cols-3 gap-6 mt-16 max-w-4xl mx-auto">
3228
{features.map((feature, index) => {
3329
const Icon = feature.icon;
3430
return (
35-
<div
36-
key={index}
37-
className="text-center p-6 bg-gray-800/30 rounded-2xl border border-gray-700/50 backdrop-blur-sm"
38-
>
31+
<div key={index} className="text-center p-6 bg-gray-800/30 rounded-2xl border border-gray-700/50 backdrop-blur-sm">
3932
<div
4033
className={`w-12 h-12 bg-gradient-to-r ${feature.gradient} rounded-xl flex items-center justify-center mx-auto mb-4`}
4134
>
4235
<Icon className="w-6 h-6 text-white" />
4336
</div>
44-
<h3 className="text-lg font-semibold text-white mb-2">
45-
{feature.title}
46-
</h3>
37+
<h3 className="text-lg font-semibold text-white mb-2">{feature.title}</h3>
4738
<p className="text-gray-400 text-sm">{feature.description}</p>
4839
</div>
4940
);

‎src/components/home/Footer.jsx‎

Lines changed: 0 additions & 15 deletions
This file was deleted.

‎src/components/home/index.js‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
export { default as Faq } from './Faq';
12
export { default as Hero } from './Hero';
2-
export { default as Footer } from './Footer';
33
export { default as Features } from './Features';
4+
export { default as Community } from './Community';
45
export { default as SearchCard } from './SearchCard';

‎src/pages/HomePage.jsx‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useState, lazy, Suspense, useEffect } from "react";
22

33
import Loading from "../components/Loading";
4-
import { Hero, Footer, Features, SearchCard } from "../components/home";
4+
import { Community, Faq, Hero, SearchCard } from "../components/home";
55
const SearchResults = lazy(() => import("../components/home/SearchResults"));
66

77
import getAppStats from "../services/getAppStats";
@@ -26,7 +26,7 @@ const HomePage = ({ solPrice }) => {
2626
if (savedStats) {
2727
setStats(JSON.parse(savedStats));
2828
}
29-
29+
3030
if (solPrice) {
3131
getAppStats().then(({ totalReclaimedAccounts: totalAcc }) => {
3232
const totalSol = calculateTotalRentInSOL(totalAcc);
@@ -91,11 +91,16 @@ const HomePage = ({ solPrice }) => {
9191
</Suspense>
9292
)}
9393

94-
<Features hasSearched={!!searchResults?.totalAccounts} />
94+
{/* <Features */}
95+
96+
<Community />
97+
<Faq />
9598

96-
<Footer hasSearched={!!searchResults?.totalAccounts} />
99+
<footer className="text-center mt-16 text-gray-400">
100+
<p className="text-sm mb-4">Made with 💜 for the Solana community by degens, for degens</p>
101+
</footer>
97102
</>
98103
);
99104
};
100105

101-
export default HomePage;
106+
export default HomePage;

0 commit comments

Comments
 (0)