diff --git a/app/coordinate/page.tsx b/app/coordinate/page.tsx index a1724a9..02b54bf 100644 --- a/app/coordinate/page.tsx +++ b/app/coordinate/page.tsx @@ -1,316 +1,245 @@ - import type { Metadata } from "next"; import Link from "next/link"; -import React from "react"; export const metadata: Metadata = { - title: "Coordinate Impact | DeCleanup Rewards", - description: - "Open infrastructure for transparent, scalable environmental coordination.", + title: "Coordinate & Scale Impact | DeCleanup Rewards", + description: + "Open infrastructure for transparent, scalable environmental coordination. For those who build and coordinate impact.", }; -export default function CoordinatePage() { - return ( -
-
- {/* Navigation */} -
- - - - - Back to Home - -
+const problemItems = [ + "Fragmented data", + "Manual reporting", + "Trust bottlenecks", + "No shared infrastructure for verification", + "Hard-to-govern funding decisions", +]; - {/* Header */} -
-

- Coordinate & Scale Impact -

-

- For those who build and coordinate impact -

-

- Open infrastructure for transparent, scalable environmental coordination. -

-
+const providesItems = [ + "Use standardized cleanup data", + "Participate in governance", + "Help define verification rules", + "Coordinate funding transparently", +]; + +const compatibleWith = ["SDG reporting", "Regen ecosystems", "Future certification layers"]; + +const alignsWith = [ + "Regen community tooling", + "Open impact accounting systems", + "Governance & coordination", +]; + +const governanceItems = [ + { title: "$cDCU Token", desc: "Used for proposals and voting" }, + { title: "Gardens.fund", desc: "Coordination platform" }, + { title: "Community Decides", desc: "Verification rules, funding priorities, new pools" }, +]; - {/* The Problem */} -
-

- The Problem -

-

- Impact coordinators struggle with: -

-
- {[ - { - icon: ( - - - - ), - title: "Fragmented data" - }, - { - icon: ( - - - - ), - title: "Manual reporting" - }, - { - icon: ( - - - - ), - title: "Trust bottlenecks" - }, - { - icon: ( - - - - ), - title: "No shared infrastructure", - subtitle: "for verification", - }, - { - icon: ( - - - - ), - title: "Hard-to-govern", - subtitle: "funding decisions", - }, - ].map((item, index) => ( -
-
{item.icon}
-

- {item.title} - {item.subtitle && ( - - {item.subtitle} - - )} -

-
- ))} -
-
+const fundingPools = [ + { name: "First Pool", detail: "Sponsored by Ethereum for the World", status: "coming soon (not active)" }, + { name: "Equipment Pool", detail: "" }, + { name: "Local Organizer Support Pool", detail: "" }, + { name: "Logistics & Transport Pool", detail: "" }, + { name: "Data & Research Pool", detail: "" }, + { name: "Experimental / Pilot Pool", detail: "" }, +]; - {/* What DeCleanup Provides */} -
-

- What DeCleanup Provides -

-
-

- DeCleanup is open DMRV infrastructure, not a closed platform. You can: -

-
- {[ - "Use standardized cleanup data", - "Participate in governance", - "Help define verification rules", - "Coordinate funding transparently", - ].map((item, index) => ( -
-
- {item} -
- ))} -
-
-
+const outcomes = [ + "Coordinators spend less time proving impact", + "Communities self-govern funding", + "Impact data becomes reusable infrastructure", + "Cleanups scale without centralized control", +]; - {/* DMRV as Infrastructure */} -
-
-

- DMRV as Infrastructure -

-

- We treat DMRV as a public good layer: -

-
- {[ - { - icon: ( - - - - ), - title: "Cleanup records are immutable" - }, - { - icon: ( - - - - ), - title: "Data structures are open and interoperable" - }, - { - icon: ( - - - - ), - title: "No dependency on proprietary standards" - }, - ].map((item, index) => ( -
-
{item.icon}
- {item.title} -
- ))} -
-
+export default function CoordinatePage() { + return ( +
+
+
+ + + + + Back to Home + +
-
-
-

Compatible with

-
    -
  • SDG reporting
  • -
  • Regen ecosystems
  • -
  • Future certification layers
  • -
-
-
-

This aligns with

-
    -
  • Regen community tooling
  • -
  • Open impact accounting systems
  • -
  • Governance & coordination
  • -
-
-
-
+
+

+ Coordinate & Scale Impact +

+

+ For those who build and coordinate impact +

+

+ Open infrastructure for transparent, scalable environmental coordination. +

+
- {/* Governance Tools Live on Celo */} -
-

- Governance Tools Live on Celo -

-
- {[ - { - icon: ( - - - - ), - title: "$cDCU Token", - desc: "Used for proposals and voting", - }, - { - icon: ( - - - - ), - title: "Gardens.fund", - desc: "Coordination platform", - }, - { - icon: ( - - - - ), - title: "Community Decides", - desc: "Verification rules, funding priorities, new pools", - }, - ].map((item, index) => ( -
-
-
{item.icon}
-

{item.title}

-

{item.desc}

-
- ))} -
-
+
+ {/* The Problem */} +
+

+ + + + + + The Problem +

+

Impact coordinators struggle with:

+
    + {problemItems.map((item, i) => ( +
  • + + {item} +
  • + ))} +
+
- {/* Example Funding Pools */} -
-

- Example Funding Pools -

-
- {/* First Pool - Special Styling */} -
-
-

First Pool

-

Sponsored by Ethereum for the World

-
-
- coming soon (not active) -
-
+ {/* What DeCleanup Provides */} +
+

+ + + + + + What DeCleanup Provides +

+

+ DeCleanup is open DMRV infrastructure, not a closed platform. You can: +

+
    + {providesItems.map((item, i) => ( +
  • + + {item} +
  • + ))} +
+
- {[ - "Equipment Pool", - "Local Organizer Support Pool", - "Logistics & Transport Pool", - "Data & Research Pool", - "Experimental / Pilot Pool", - ].map((pool, index) => ( -
-
- {pool} -
- ))} -
-
+ {/* DMRV as Infrastructure */} +
+

DMRV as Infrastructure

+

+ We treat DMRV as a public good layer: +

+
    +
  • + + Cleanup records are immutable +
  • +
  • + + Data structures are open and interoperable +
  • +
  • + + No dependency on proprietary standards +
  • +
+
+
+

Compatible with

+
    + {compatibleWith.map((item, i) => ( +
  • • {item}
  • + ))} +
+
+
+

This aligns with

+
    + {alignsWith.map((item, i) => ( +
  • • {item}
  • + ))} +
+
+
+
- {/* The Outcome */} -
-

- The Outcome -

-
- {[ - "Coordinators spend less time proving impact", - "Communities self-govern funding", - "Impact data becomes reusable infrastructure", - "Cleanups scale without centralized control" - ].map((outcome, index) => ( -
-
- {index + 1} -
-

- {outcome} -

-
- ))} -
-
+ {/* Governance Tools Live on Celo */} +
+

Governance Tools Live on Celo

+
+ {governanceItems.map((item, i) => ( +
+

{item.title}

+

{item.desc}

+
+ ))} +
+
+ {/* Example Funding Pools */} +
+

Example Funding Pools

+
+ {fundingPools.map((pool, i) => ( +
+
+ {pool.name} + {pool.status && ( + {pool.status} + )} +
+ {pool.detail &&

{pool.detail}

} +
+ ))}
-
- ); + + + {/* The Outcome */} +
+

+ + + + + + The Outcome +

+
    + {outcomes.map((outcome, i) => ( +
  1. + + {i + 1} + + {outcome} +
  2. + ))} +
+
+ + {/* CTA to Litepaper */} +
+

+ For full governance and token details, see the litepaper. +

+ + Read the Litepaper + + + + +
+ + + + ); } diff --git a/app/get-started/page.tsx b/app/get-started/page.tsx index 3d7dcd0..386e487 100644 --- a/app/get-started/page.tsx +++ b/app/get-started/page.tsx @@ -5,16 +5,16 @@ import GetStartedFlow from "@/components/GetStartedFlow/GetStartedFlow"; export const metadata: Metadata = { title: "Get Started | DeCleanup Rewards", description: - "Choose how you want to use the app: within other platforms with minimum features or full experience in browser.", + "For those who care about the planet. Join or organize cleanups, document results, and earn recognition and rewards for real impact.", }; export default function GetStartedPage() { return (
-
-
+
+
- + Back to Home
-
-

- Get started with DeCleanup Rewards -

-

- FOR THOSE WHO CARE ABOUT THE PLANET -

-

- Environmental action deserves recognition. Choose how you want to use the app: you can have an experience within other platforms and with minimum features or full experience separately in browser. We’ll show you what you need and where to go. -

-
-
diff --git a/app/layout.tsx b/app/layout.tsx index 819d6f3..efd0ea8 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -3,6 +3,7 @@ import Script from "next/script"; import { GeistSans } from "geist/font/sans"; import { Bebas_Neue } from "next/font/google"; import "./globals.css"; +import MainNav from "@/components/MainNav/MainNav"; // Configure Geist Sans (Secondary/Body font) // GeistSans is already configured with variable: '--font-geist-sans' @@ -84,7 +85,8 @@ export default function RootLayout({ - {children} + +
{children}
); diff --git a/app/page.tsx b/app/page.tsx index 85249ba..fcfde14 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,29 +1,27 @@ -import WhatIsDeCleanupNetwork from "@/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork"; import Hero from "@/components/HeroSection/Hero"; +import WhyDeCleanup from "@/components/WhyDeCleanup/WhyDeCleanup"; import TokenizeImpactSection from "@/components/HowToTokonizeImpact/TokenizeImpactSection"; -import NetworkRoadmapSection from "@/components/NetworkRoadmapSection/NetworkRoadmapSection"; import UseDeCleanupToday from "@/components/UseDeCleanupToday/UseDeCleanupToday"; -import WhoIsThisFor from "@/components/WhoIsThisFor/WhoIsThisFor"; -import WhyDeCleanup from "@/components/WhyDeCleanup/WhyDeCleanup"; +import CommunityImpactSection from "@/components/CommunityImpactSection/CommunityImpactSection"; +import TotalImpactSection from "@/components/TotalImpactSection/TotalImpactSection"; +import AppendixSection from "@/components/AppendixSection/AppendixSection"; +import JoinTheMovementSection from "@/components/JoinTheMovementSection/JoinTheMovementSection"; +import NavLink from "@/components/NavLink/NavLink"; const Page = () => { return (
- {/* Aura-style hero: gradient orbs + badge + CTAs */} - {/* Why DeCleanup Exists - SDG positioning */} - {/* Who is this for? – Aura glow cards */} - - {/* Earn DeCleanup Rewards – Base/Celo CTA cards with hover glow */} - - {/* Transparent, Verifiable Digital Impact / DMRV – two-column + progress bar */} - - - {/* How to Tokenize Impact – 3-step + photo verified card, Backed by + SDGs just above footer */} + + + + + +
); }; -export default Page; \ No newline at end of file +export default Page; diff --git a/app/toc/page.tsx b/app/toc/page.tsx index 150787b..f51ee1a 100644 --- a/app/toc/page.tsx +++ b/app/toc/page.tsx @@ -1,4 +1,5 @@ -import Link from "next/link"; // kept for back link +import type { Metadata } from "next"; +import Link from "next/link"; import { ArrowLeft, GitBranch, @@ -88,6 +89,12 @@ function Card({ ); } +export const metadata: Metadata = { + title: "Theory of Change — DeCleanup Network", + description: + "Why cleanup action stays invisible — and how we fix it. DeCleanup Network Theory of Change v2.2.", +}; + export default function TocPage() { return (
diff --git a/app/tokenomics/page.tsx b/app/tokenomics/page.tsx index 67736d9..5a422b2 100644 --- a/app/tokenomics/page.tsx +++ b/app/tokenomics/page.tsx @@ -16,7 +16,7 @@ export default function TokenomicsPage() { {/* Back + Header */}
diff --git a/app/user-guide/page.tsx b/app/user-guide/page.tsx index f87084a..8f89cb0 100644 --- a/app/user-guide/page.tsx +++ b/app/user-guide/page.tsx @@ -1,55 +1,12 @@ import type { Metadata } from "next"; -import Link from "next/link"; +import Redirect from "@/components/Redirect/Redirect"; export const metadata: Metadata = { - title: "DeCleanup Network User Guide", - description: "User guide for DeCleanup Network", + title: "Get Started | DeCleanup Network", + description: "Redirecting to Get Started", + robots: "noindex, follow", }; -export default function UserGuidePage() { - return ( -
-
- {/* Back Button */} -
- - - - - Back to Home - -
- - {/* Page Header */} -
-

- User Guide -

-

- Coming Soon -

-
- -
-

- The user guide will be available here soon. -

-
-
- - ); +export default function UserGuideRedirectPage() { + return ; } - diff --git a/app/userguide/page.tsx b/app/userguide/page.tsx index cd32d17..c2b72e5 100644 --- a/app/userguide/page.tsx +++ b/app/userguide/page.tsx @@ -1,162 +1,45 @@ import type { Metadata } from "next"; import Link from "next/link"; +import WhoIsThisForCards from "@/components/WhoIsThisFor/WhoIsThisForCards"; export const metadata: Metadata = { - title: "DeCleanup Network User Guide", - description: "Guides for using the DeCleanup mini app and full platform", + title: "How It Works | DeCleanup Network", + description: + "Who is DeCleanup for? Individuals who care, builders who coordinate impact, and funders who support real-world environmental action.", }; export default function UserGuidePage() { return ( -
-
- {/* Back + Header */} -
+
+
+
- + - Back to Home + Back to Home -
-
- - USER GUIDE -
-

- HOW TO USE DECLEANUP -

-

- Mini app on Base and Farcaster, or full platform on Celo. -

-
- {/* SECTION 1 - HOW TO USE THE MINI APP */} -
-
-

HOW TO USE THE MINI APP

-

- Use DeCleanup inside Farcaster, the Base app, or in a browser. Earn $bDCU and build your Impact Product. -

- - {/* Where to open */} -
-
-

Farcaster

-

Open the mini app inside Farcaster or Warpcast. Use the built-in wallet for the smoothest experience.

- - Open on Farcaster → - -
-
-

Base app

-

Install the Base app, then open DeCleanup Rewards as a mini app. Pin it for quick access.

- - Open on Base app → - -
-
- - {/* How it works - 3 steps */} -

How it works

-
-
-
1
-

Clean up

-

Find a polluted spot and remove the trash.

-
-
-
2
-

Snap proof

-

Take before & after photos with location enabled.

-
-
-
3
-

Submit & earn

-

Upload proof, get verified, earn $bDCU rewards.

-
-
- - {/* Rewards */} -

Rewards in the mini app

-
-
-

Cleanups

-

10 $bDCU

-

Per approved cleanup (Impact Product claim)

-
-
-

Referrals

-

3 $bDCU each

-

For referring new users

-
-
-

Streak

-

2 $bDCU

-

Weekly streak maintenance

-
-
-

Verifier reward

-

1 $bDCU

-

Per valid verification

-
-
- - {/* Verification */} -
-

Verification

-

- Submissions are reviewed at the first stage by the team and trusted experts, then upon community growth it becomes verifiers' task (token stakers). If the submission has geolocation, clear and authentic photos, it gets approved; otherwise it may be rejected. -

-

Rewards are subject to change based on token price reflecting multiplier formula at the moment of claim.

-
-
-
- - {/* SECTION 2 - HOW TO USE THE FULL APP (CELO) */} -
-
-

HOW TO USE THE FULL APP

-

- The full DeCleanup platform on Celo: dashboard, leaderboards, governance, Impact Product, and Hypercerts. -

-

Full guide for Celo app is coming soon.

- -
-
-

Full platform on Celo

-

- The complete DeCleanup experience runs on Celo: full dashboard, leaderboards, streaks, governance via Gardens.fund, Impact Product management, and Hypercert generation (every 10 verified cleanups). Connect a wallet (e.g. MetaMask) on Celo to use the dApp. -

- - Open DeCleanup dApp (Celo) → - -
-
-
-

Wallet & network

-

Use MetaMask or another Celo-compatible wallet. Add the Celo (or Celo Sepolia testnet) network and fund the wallet with CELO for gas.

-
-
-

$cDCU & governance

-

Earn $cDCU through verified cleanups on the full dApp. Use it for verifier staking and to vote on proposals via Gardens.fund.

-
-
-
- -
-

- Note: The Celo dApp may be on testnet (e.g. Celo Sepolia). Check the app for the current network and faucet links if you need test CELO. -

-
-
-
+
+

+ How It Works +

+

+ Find your place in the network: clean and earn, build and coordinate, or fund verified impact. +

+
+
-
+ ); } diff --git a/components/AppendixSection/AppendixSection.tsx b/components/AppendixSection/AppendixSection.tsx new file mode 100644 index 0000000..89d5a25 --- /dev/null +++ b/components/AppendixSection/AppendixSection.tsx @@ -0,0 +1,61 @@ +import React from "react"; +import Link from "next/link"; +import { ArrowUpRight } from "lucide-react"; + +const cards = [ + { + title: "Theory of Change", + description: "How verified cleanups create measurable environmental and social impact.", + href: "/toc", + }, + { + title: "DMRV", + description: "How Digital Monitoring, Reporting & Verification works under the hood.", + href: "/litepaper#dmrv", + }, + { + title: "Tokenomics", + description: "Tokens, rewards, and how value flows in the network.", + href: "/tokenomics", + }, + { + title: "Roadmap", + description: "Where we are, what's being built, and where DeCleanup is headed.", + href: "/litepaper#roadmap", + }, +]; + +export default function AppendixSection() { + return ( +
+
+

+ Appendix +

+

+ Explore the details behind the network. +

+
+ {cards.map((card) => ( + +

+ {card.title} +

+

+ {card.description} +

+ + Read more + + + + ))} +
+
+
+ ); +} diff --git a/components/CommunityImpactSection/CommunityImpactSection.tsx b/components/CommunityImpactSection/CommunityImpactSection.tsx new file mode 100644 index 0000000..80006ba --- /dev/null +++ b/components/CommunityImpactSection/CommunityImpactSection.tsx @@ -0,0 +1,62 @@ +import React from "react"; +import Image from "next/image"; + +const galleryImages = [ + { src: "/testimonial1.jpg", alt: "Community cleanup" }, + { src: "/testimonial2.jpg", alt: "Community cleanup" }, + { src: "/testimonial3.jpg", alt: "Community cleanup" }, + { src: "/testimonial4.jpg", alt: "Community cleanup" }, +]; + +export default function CommunityImpactSection() { + return ( +
+
+
+

+ Community Impact +

+

+ Participants worldwide use DeCleanup dApp to turn real-world impact into onchain products with additional utilities in the ecosystem. +

+
+
+
+ {galleryImages[0].alt} +
+
+
+ {galleryImages[1].alt} +
+
+ {galleryImages[2].alt} +
+
+
+ {galleryImages[3].alt} +
+
+
+
+

HEM Japan

+

+ Early partner organizing cleanups across Japan using DeCleanup's verification system. 2024: 12 active users, 9 cleanup events. +

+
+
+

Pestathon

+

+ University campaign combining education + action. Students learned environmental care while cleaning campus. DeCleanup added 120 USDGLO to Atlantis Impact Miner rewards. 2024: 9 active users, 4 cleanup events. +

+
+
+
+

+ "DeCleanup employs the most simplified system I've encountered in dApps, making it easier for people to participate in environmental protection activities. Even picking up a single plastic bottle can transform into rewards!" +

+

— Yuichi Hosomo, HEM Japan

+
+
+
+ ); +} diff --git a/components/FAQSection/FAQSection.tsx b/components/FAQSection/FAQSection.tsx new file mode 100644 index 0000000..c9b169f --- /dev/null +++ b/components/FAQSection/FAQSection.tsx @@ -0,0 +1,48 @@ +import React from "react"; + +const faqs = [ + { + q: "Do I need crypto experience to participate?", + a: "No. Our app walks you through wallet setup in under 2 minutes. If you can take a photo, you can earn.", + }, + { + q: "How do you verify cleanups are real?", + a: "Every submission includes before/after photos, geolocation metadata, and community validation. Verified records are anchored on-chain.", + }, + { + q: "What can I do with $bDCU tokens?", + a: "Hold for governance voting, trade on Base DEXs, or accumulate reputation in the network.", + }, + { + q: "How do I organize a cleanup in my area?", + a: "Anyone can launch a campaign through the app. Define your location, set goals, invite volunteers.", + }, +]; + +export default function FAQSection() { + return ( +
+
+

+ Questions +

+
+ {faqs.map((faq, index) => ( +
+ + {faq.q} + + +
+

{faq.a}

+
+
+ ))} +
+
+
+ ); +} diff --git a/components/FinalCTASection/FinalCTASection.tsx b/components/FinalCTASection/FinalCTASection.tsx new file mode 100644 index 0000000..f04ad96 --- /dev/null +++ b/components/FinalCTASection/FinalCTASection.tsx @@ -0,0 +1,23 @@ +import React from "react"; +import Link from "next/link"; + +export default function FinalCTASection() { + return ( +
+
+

+ Ready to Make Your Impact Count? +

+

+ Join volunteers worldwide turning cleanup action into on-chain proof. +

+ + Start Your First Cleanup + +
+
+ ); +} diff --git a/components/HeroSection/Hero.tsx b/components/HeroSection/Hero.tsx index acfb10d..3cf9a63 100644 --- a/components/HeroSection/Hero.tsx +++ b/components/HeroSection/Hero.tsx @@ -1,4 +1,3 @@ -import Image from "next/image"; import Link from "next/link"; const Hero = () => { @@ -30,19 +29,6 @@ const Hero = () => { {/* Content */}
- {/* Logo - centred */} -
- DeCleanup Network Logo -
-

DECLEANUP @@ -51,31 +37,28 @@ const Hero = () => {

{/* Headline */} -

- Cleanups with action. Proof under verified. Fundable impact. -

+

+ Clean Local. Prove Global. +

{/* Subheadline */}

- A global platform that verifies environmental cleanups and turns them - into measurable, fundable impact. + Join volunteers worldwide turning trash pickup into verified, rewarded impact.

- {/* CTAs */} + {/* CTAs - primary: Get Started, secondary: How It Works */}
- Participate Now + Start Cleaning - Read Litepaper + See How It Works
diff --git a/components/HomeFooter/HomeFooter.tsx b/components/HomeFooter/HomeFooter.tsx new file mode 100644 index 0000000..2e28b29 --- /dev/null +++ b/components/HomeFooter/HomeFooter.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import NavLink from "../NavLink/NavLink"; +import BackedBy from "../BackedBy/BackedBy"; +import SDGsFooter from "../SDGsFooter/SDGsFooter"; + +export default function HomeFooter() { + return ( +
+
+ + + +
+
+ ); +} diff --git a/components/HowItWorksSection/HowItWorksSection.tsx b/components/HowItWorksSection/HowItWorksSection.tsx new file mode 100644 index 0000000..30127ed --- /dev/null +++ b/components/HowItWorksSection/HowItWorksSection.tsx @@ -0,0 +1,46 @@ +import React from "react"; +import Link from "next/link"; +import { Sparkles, Camera, Coins } from "lucide-react"; + +const steps = [ + { number: 1, title: "Clean", description: "Join a cleanup or start your own", Icon: Sparkles }, + { number: 2, title: "Snap", description: "Take before/after photos in the app", Icon: Camera }, + { number: 3, title: "Earn", description: "Get $bDCU tokens for verified impact", Icon: Coins }, +]; + +export default function HowItWorksSection() { + return ( +
+
+

+ How It Works +

+
+ {/* Progress line - desktop */} +
+ {steps.map((step) => { + const Icon = step.Icon; + return ( +
+
+ +
+ {step.number} +

{step.title}

+

{step.description}

+
+ ); + })} +
+
+ + Get Started Now + +
+
+
+ ); +} diff --git a/components/HowToTokonizeImpact/TokenizeImpactSection.tsx b/components/HowToTokonizeImpact/TokenizeImpactSection.tsx index af794e3..e4e275f 100644 --- a/components/HowToTokonizeImpact/TokenizeImpactSection.tsx +++ b/components/HowToTokonizeImpact/TokenizeImpactSection.tsx @@ -1,15 +1,11 @@ import React from "react"; -import NavLink from "../NavLink/NavLink"; -import BackedBy from "../BackedBy/BackedBy"; -import SDGsFooter from "../SDGsFooter/SDGsFooter"; -import Link from "next/link"; import Image from "next/image"; const steps = [ - { number: "1.", title: "Capture cleanup area" }, - { number: "2.", title: "Complete cleanup" }, - { number: "3.", title: "Capture the Impact" }, - { number: "4.", title: "Claim Rewards" }, + { number: "1.", title: "Find your spot" }, + { number: "2.", title: "Do the work" }, + { number: "3.", title: "Photograph the result" }, + { number: "4.", title: "Earn your reward" }, ]; // Placeholder for real cleanup before/after photo @@ -25,18 +21,11 @@ const TokenizeImpactSection = () => { className="mb-4 text-3xl font-normal uppercase leading-tight text-white md:text-4xl lg:text-5xl" style={{ fontFamily: "var(--font-bebas-neue), sans-serif" }} > - How to Tokenize Impact + How Your Cleanup Becomes Verified Impact - {/* Clean up, snap, earn - replaces old subtitle */} -
-
- - CLEAN UP, SNAP, EARN -
-
+

+ Four simple steps — from picking up litter to earning recognition. +

{/* Content: Visual card (left) + 3-step flow (right); mobile: full-width stacked, steps stretch */} @@ -88,57 +77,6 @@ const TokenizeImpactSection = () => { ))}
- - {/* Join Movement */} -
-
-

- Join the Movement -

-

- Connect with our community and explore everything you need to - contribute to a cleaner environment. -

-
- - Telegram - - - X - - - Farcaster - -
-
- {/* Links: Litepaper, Tokenomics, Docs, User Guide, External Links */} - - {/* Backed by + SDG logos just above footer */} - - - -
); diff --git a/components/JoinTheMovementSection/JoinTheMovementSection.tsx b/components/JoinTheMovementSection/JoinTheMovementSection.tsx new file mode 100644 index 0000000..9a9d775 --- /dev/null +++ b/components/JoinTheMovementSection/JoinTheMovementSection.tsx @@ -0,0 +1,43 @@ +import React from "react"; +import Link from "next/link"; + +export default function JoinTheMovementSection() { + return ( +
+
+

+ Join the Movement +

+

+ Connect with our community and explore everything you need to contribute to a cleaner environment. +

+
+ + Telegram + + + X + + + Farcaster + +
+
+
+ ); +} diff --git a/components/MainNav/MainNav.tsx b/components/MainNav/MainNav.tsx new file mode 100644 index 0000000..812b22d --- /dev/null +++ b/components/MainNav/MainNav.tsx @@ -0,0 +1,23 @@ +import Link from "next/link"; +import Image from "next/image"; + +export default function MainNav() { + return ( + + ); +} diff --git a/components/NavLink/NavLink.tsx b/components/NavLink/NavLink.tsx index 9db73a8..66b4184 100644 --- a/components/NavLink/NavLink.tsx +++ b/components/NavLink/NavLink.tsx @@ -1,182 +1,59 @@ import React from "react"; import Link from "next/link"; -import Image from "next/image"; import Divider from "../ui/Divider"; // Simple Divider component since it's imported type NavLinkVariant = "full" | "linksOnly" | "footerOnly"; const NavLink = ({ variant = "full" }: { variant?: NavLinkVariant }) => { - // Internal links (same domain) - const internalLinks = [ - { name: "LITEPAPER", href: "/litepaper" }, - { name: "TOKENOMICS", href: "/tokenomics" }, - { name: "DOCS", href: "/docs" }, - ]; - - // User Guide (internal link) - const userGuideLink = { name: "USER GUIDE", href: "/userguide" }; - - // External links - const externalLinks = [ - { name: "LATEST ARTICLES", href: "https://paragraph.xyz/decleanupnet" }, - { - name: "KARMA GAP", - href: "https://gap.karmahq.xyz/project/decentralized-cleanup-network-decleanup-network", - }, - { name: "GITHUB", href: "https://github.com/DeCleanup-Network" }, - { - name: "BUG REPORT", - href: "https://docs.google.com/forms/d/e/1FAIpQLSfWCK4WmO9T-WJOOZwuDiG3yEJVX23RX_AkIa6tZHZ0J9Tf3w/viewform?usp=header", - }, - ]; - - const showLinks = variant === "full" || variant === "linksOnly"; const showFooter = variant === "full" || variant === "footerOnly"; return ( diff --git a/components/ProblemSection/ProblemSection.tsx b/components/ProblemSection/ProblemSection.tsx new file mode 100644 index 0000000..4c66016 --- /dev/null +++ b/components/ProblemSection/ProblemSection.tsx @@ -0,0 +1,30 @@ +import React from "react"; + +export default function ProblemSection() { + return ( +
+
+
+
+

+ The Invisible Work Problem +

+

+ Every year, volunteers clean up millions of tons of trash. And nobody tracks it. No proof. No recognition. No funding for the next cleanup. +

+
+
+

+ Meanwhile, billion-dollar carbon credit markets exist for corporations. But the person picking up plastic bottles on a beach? Invisible. +

+
+
+

+ DeCleanup changes that. Every cleanup becomes verifiable proof. Every piece of trash becomes data. Every volunteer becomes fundable. +

+
+
+
+
+ ); +} diff --git a/components/Redirect/Redirect.tsx b/components/Redirect/Redirect.tsx new file mode 100644 index 0000000..90fa6e7 --- /dev/null +++ b/components/Redirect/Redirect.tsx @@ -0,0 +1,14 @@ +"use client"; + +import { useEffect } from "react"; + +export default function Redirect({ to }: { to: string }) { + useEffect(() => { + window.location.replace(to); + }, [to]); + return ( +
+

Redirecting...

+
+ ); +} diff --git a/components/SocialProofSection/SocialProofSection.tsx b/components/SocialProofSection/SocialProofSection.tsx new file mode 100644 index 0000000..aaec962 --- /dev/null +++ b/components/SocialProofSection/SocialProofSection.tsx @@ -0,0 +1,32 @@ +import React from "react"; + +export default function SocialProofSection() { + return ( +
+
+
+
+ + Cleanups Verified +
+
+ + Countries Active +
+
+ + Waste Documented (kg) +
+
+
+

Supported by

+
+ ETH for the World + Giveth + Gitcoin +
+
+
+
+ ); +} diff --git a/components/TokenSection/TokenSection.tsx b/components/TokenSection/TokenSection.tsx new file mode 100644 index 0000000..66abe33 --- /dev/null +++ b/components/TokenSection/TokenSection.tsx @@ -0,0 +1,68 @@ +"use client"; + +import React, { useState } from "react"; +import Link from "next/link"; + +const CONTRACT = "0x30171b7014c02229497CdE6745DD3aD821F12b07"; +const DEX_LINK = "https://app.uniswap.org/swap?chain=base&inputCurrency=ETH&outputCurrency=0x30171b7014c02229497CdE6745DD3aD821F12b07"; + +export default function TokenSection() { + const [copied, setCopied] = useState(false); + const copyContract = () => { + navigator.clipboard.writeText(CONTRACT); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + + return ( +
+
+

+ $bDCU Token +

+

+ The reward layer for verified environmental action on Base. +

+
+
+ Network + Base +
+
+ Circulating supply + ~85% +
+
+ Contract +
+ {CONTRACT} + +
+
+
+
+ + View on DEX + + + Full tokenomics + +
+
+
+ ); +} diff --git a/components/TotalImpactSection/TotalImpactSection.tsx b/components/TotalImpactSection/TotalImpactSection.tsx new file mode 100644 index 0000000..0bd4808 --- /dev/null +++ b/components/TotalImpactSection/TotalImpactSection.tsx @@ -0,0 +1,59 @@ +import React from "react"; + +export default function TotalImpactSection() { + return ( +
+
+

+ Total Impact +

+ + {/* Diagram: gradient, concentric circles with blinking, icons, overlay */} +
+ {/* Abstract gradient background */} +
+ {/* Concentric circles - outer spins, inner circles blink */} +
+
+
+
+
+
+
+ + {/* Icon Left: Monitoring / Data */} +
+ + + +
+ + {/* Icon Right: Verification / Action */} +
+ + + +
+ + {/* UI overlay: Total Impact - LIVE + stats */} +
+
+
+ Total Impact + LIVE +
+
+ Cleanups + Countries + kg Waste +
+
+
+
+
+
+ ); +} diff --git a/components/WhoIsThisFor/WhoIsThisForCards.tsx b/components/WhoIsThisFor/WhoIsThisForCards.tsx new file mode 100644 index 0000000..091fce7 --- /dev/null +++ b/components/WhoIsThisFor/WhoIsThisForCards.tsx @@ -0,0 +1,75 @@ +import React from "react"; +import Link from "next/link"; + +const cardBase = + "relative flex h-full flex-col rounded-2xl border border-[#58B12F]/30 bg-gray-900/80 p-6 text-left transition hover:bg-gray-900/90 hover:border-[#58B12F]/50 card-border-glow block"; + +const cards = [ + { + smallTitle: "Individuals and communities who clean, care and act", + title: "For those who care about the planet", + body: "Choose how you want to use the app: within other platforms with minimum features or full experience in browser. We'll show you what you need and where to go.", + bullets: [ + "Join or organize cleanup actions", + "Take photos of the result", + "Get recognition and rewards for real impact", + ], + cta: "Learn more and begin →", + href: "/get-started", + }, + { + smallTitle: "Web3-native, but impact first", + title: "For those who build and coordinate impact", + body: "Use onchain tools to coordinate cleanups, rewards, and community governance.", + bullets: [ + "Participate in governance and proposals", + "Help shape how impact is verified and rewarded", + "Build on open, impact-focused infrastructure", + ], + cta: "Dive deeper to the network →", + href: "/coordinate", + }, + { + smallTitle: "Capital with intention", + title: "For those who fund real-world impact", + body: "Support verified environmental cleanups and help scale them globally.", + bullets: [ + "Fund cleanup actions at scale", + "Support open verification infrastructure", + "Hold tokens connected to real-world impact", + ], + cta: "See how funding works →", + href: "/funders", + }, +]; + +export default function WhoIsThisForCards() { + return ( +
+ {cards.map((card) => ( + +

+ {card.smallTitle} +

+

+ {card.title} +

+

+ {card.body} +

+ + + {card.cta} + + + ))} +
+ ); +} diff --git a/next.config.ts b/next.config.ts index ae973fe..20c8694 100644 --- a/next.config.ts +++ b/next.config.ts @@ -2,6 +2,11 @@ const isProd = process.env.NODE_ENV === "production"; const nextConfig = { output: "export", + async redirects() { + return [ + { source: "/user-guide", destination: "/userguide", permanent: true }, + ]; + }, images: { unoptimized: true, remotePatterns: [