From 283b7608083972d0bddf3209cbc2ea302d5d697d Mon Sep 17 00:00:00 2001 From: Anastasia <142572092+LuminaEnvision@users.noreply.github.com> Date: Sun, 7 Dec 2025 20:23:48 +0700 Subject: [PATCH 1/5] Reduce spacing in roadmap and community impact sections, center community impact heading and description --- app/globals.css | 170 ++++- app/layout.tsx | 17 +- app/page.tsx | 6 +- components/HeroSection/Hero.tsx | 67 +- .../TokenizeImpactSection.tsx | 130 ++-- components/NavLink/NavLink.tsx | 57 +- .../NetworkRoadmapSection.tsx | 714 +++++++----------- .../UseDeCleanupToday/UseDeCleanupToday.tsx | 241 ++++++ .../WhatIsDeCleanupNetwork.tsx | 260 ++----- eslint.config.mjs | 10 + next.config.ts | 3 + package-lock.json | 495 ++++++------ package.json | 13 +- public/base-logo-white.svg | 4 + public/base-logo.svg | 4 + public/celo-logo-white.svg | 8 + public/celo-logo.svg | 7 + tailwind.config.js | 5 +- 18 files changed, 1198 insertions(+), 1013 deletions(-) create mode 100644 components/UseDeCleanupToday/UseDeCleanupToday.tsx create mode 100644 public/base-logo-white.svg create mode 100644 public/base-logo.svg create mode 100644 public/celo-logo-white.svg create mode 100644 public/celo-logo.svg diff --git a/app/globals.css b/app/globals.css index e06b74c..5b8b362 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,36 +1,90 @@ @import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Nunito&display=swap'); @import "tailwindcss"; - :root { - --background: #58B12F; - --foreground: #111111; + --background: #000000; + --foreground: #ffffff; --yellow: #FAFF00; + --green: #58B12F; + --green-dark: #4FA02A; + --gray-light: #1a1a1a; + --gray-medium: #2a2a2a; + --gray-dark: #111111; + + /* Font variables */ + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); + --font-heading: var(--font-bebas-neue); + + /* Brand colors */ + --color-brand-green: #58B12F; + --color-brand-yellow: #FAFF00; } +/* @theme is a valid Tailwind v4 directive */ @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); - --font-family-bebas: var(--font-bebas), sans-serif; - --font-family-nunito: var(--font-nunito), sans-serif; + --font-family-bebas: var(--font-bebas-neue), sans-serif; + --font-family-heading: var(--font-bebas-neue), sans-serif; + --font-family-geist: var(--font-geist-sans), sans-serif; } -/* @media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} */ - -*{ +* { box-sizing: border-box; } -body { - background: var(--background); - color: var(--foreground); - font-family: var(--font-bebas), sans-serif; +@layer base { + html { + scroll-behavior: smooth; + -webkit-overflow-scrolling: touch; + } + + body { + background: var(--background); + color: var(--foreground); + font-family: var(--font-geist-sans), system-ui, -apple-system, sans-serif; + overflow-x: hidden; + overflow-y: auto; + } + + /* Bebas Neue for all headings - ALL CAPS */ + h1, h2, h3, h4, h5, h6 { + font-family: var(--font-bebas-neue), sans-serif; + font-weight: normal; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + /* Better mobile touch targets */ + button, a { + touch-action: manipulation; + } + + /* Brand colors */ + .bg-brand-green { + background-color: var(--color-brand-green); + } + + .bg-brand-yellow { + background-color: var(--color-brand-yellow); + } + + .text-brand-green { + color: var(--color-brand-green); + } + + .text-brand-yellow { + color: var(--color-brand-yellow); + } + + .border-brand-green { + border-color: var(--color-brand-green); + } + + .border-brand-yellow { + border-color: var(--color-brand-yellow); + } } /* h1 { @@ -39,13 +93,85 @@ body { line-height: 1; } */ -h2 { - font-weight: 400; - font-size: 80px; - line-height: 1; + + + +/* Animations */ +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes fade-in-up { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-fade-in { + animation: fade-in 0.8s ease-out; +} + +.animate-fade-in-up { + animation: fade-in-up 0.8s ease-out; +} + +.animation-delay-200 { + animation-delay: 0.2s; + animation-fill-mode: both; +} + +.animation-delay-400 { + animation-delay: 0.4s; + animation-fill-mode: both; +} + + +/* Card hover effects */ +.card-hover { + transition: all 0.3s ease; +} + +.card-hover:hover { + transform: translateY(-4px); +} + +/* Custom scrollbar */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: var(--gray-dark); +} + +::-webkit-scrollbar-thumb { + background: var(--gray-medium); + border-radius: 4px; } +::-webkit-scrollbar-thumb:hover { + background: var(--green); +} +/* Hide scrollbar for carousel */ +.scrollbar-hide { + -ms-overflow-style: none; + scrollbar-width: none; +} + +.scrollbar-hide::-webkit-scrollbar { + display: none; +} @media (max-width: 640px) { diff --git a/app/layout.tsx b/app/layout.tsx index 0a9936a..e5e3b3e 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,20 +1,17 @@ import type { Metadata } from "next"; -import { Nunito, Bebas_Neue } from "next/font/google"; +import { GeistSans } from "geist/font/sans"; +import { Bebas_Neue } from "next/font/google"; import "./globals.css"; -// Configure Nunito (Google Font) -const nunito = Nunito({ - subsets: ['latin'], // Adjust subsets as needed (e.g., 'latin-ext' for extended Latin) - display: 'swap', // Prevents layout shift - variable: '--font-nunito', // CSS variable for Tailwind -}); +// Configure Geist Sans (Secondary/Body font) +// GeistSans is already configured with variable: '--font-geist-sans' -// Configure Bebas Neue (Google Font) +// Configure Bebas Neue (Heading font) const bebas = Bebas_Neue({ subsets: ['latin'], weight: '400', // Bebas Neue has only one weight display: 'swap', - variable: '--font-bebas', + variable: '--font-bebas-neue', }); export const metadata: Metadata = { @@ -30,7 +27,7 @@ export default function RootLayout({ return ( {children} diff --git a/app/page.tsx b/app/page.tsx index 3a5c079..23ffa54 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,12 +1,14 @@ import WhatIsDeCleanupNetwork from "@/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork"; import Hero from "@/components/HeroSection/Hero"; import TokenizeImpactSection from "@/components/HowToTokonizeImpact/TokenizeImpactSection"; -import NetworkRoadmapSection from "@/components/NetworkRoadmapSection/NetworkRoadmapSection" +import NetworkRoadmapSection from "@/components/NetworkRoadmapSection/NetworkRoadmapSection"; +import UseDeCleanupToday from "@/components/UseDeCleanupToday/UseDeCleanupToday"; const Page = () => { return ( -
+
+ diff --git a/components/HeroSection/Hero.tsx b/components/HeroSection/Hero.tsx index 2ebb566..7d28fa3 100644 --- a/components/HeroSection/Hero.tsx +++ b/components/HeroSection/Hero.tsx @@ -1,39 +1,52 @@ -import Button from "../ui/Button"; -import Divider from "../ui/Divider"; const Hero = () => { return (
-
- - CLEAN UP, SNAP, EARN - -
- -

- DECLEANUP NETWORK -

- -
-
-

- - Turn environmental action into digital assets + {/* Animated background gradient */} +

+ +
+ {/* Header with tagline on left and logo space on right */} +
+
+ + clean up, snap, earn -

-

- Join the global network of individuals and communities tokenizing environmental impact of cleanups on DeCleanup Network -

+
+
+ {/* Logo space - coming soon */} +
+ + {/* Main Heading */} +

+ DECLEANUP NETWORK +

+ + {/* Subheading */} +

+ Turn environmental action into digital assets +

+ + {/* Description */} +

+ Join the global network of individuals and communities tokenizing environmental impact of cleanups utilizing DeCleanup Network tools +

+ + {/* Stylish Breaker */} +
+
+
+
+
+
+
- -
- -
-
); }; diff --git a/components/HowToTokonizeImpact/TokenizeImpactSection.tsx b/components/HowToTokonizeImpact/TokenizeImpactSection.tsx index e13fc88..477f83d 100644 --- a/components/HowToTokonizeImpact/TokenizeImpactSection.tsx +++ b/components/HowToTokonizeImpact/TokenizeImpactSection.tsx @@ -7,60 +7,63 @@ const TokenizeImpactSection = () => { { number: "1.", title: "Start or Join a Cleanup", - description: - "Find or start a cleanup in your area or join an existing one nearby. Organize environmental action together with outdoor enthusiasts.", }, { number: "2.", title: "Capture the Impact", - description: - "Take selfies and get photos with friends, upload them to our platform and get verified.", }, { number: "3.", title: "Earn Rewards", - description: - "Get impact tokens for cleanup the earth/ocean. Earning such along the way for referring to friends and consistently repeating your impactful activity.", }, ]; return ( -
-
- {/* Hero Section */} -
-
+
+
+ {/* Section Header */} +
+

How to Tokenize Impact? -

+
-
- {/* Left Content with Background Image */} -
-
+ + {/* Content Section - Image and Steps */} +
+ {/* Left Content with Background Image and Yellow Frame */} +
+
+
+
+
+
{/* Right Content - Steps */} -
+
{steps.map((step, index) => (
-
-
+
+
{step.number}
-
+

{step.title} -

-
-
- {step.description} +
))} @@ -68,38 +71,69 @@ const TokenizeImpactSection = () => {
{/* CTA Section */} -
- {/* Get Started Button */} -
- +
+ {/* Get Started Buttons */} +
+ + Get started on Farcaster + + + Get started in web app +
+ {/* Join Movement Section */} -
-
+
+

Join the Movement -

+ -

- Connect with our growing community on social media, and explore - everything you need to start contributing to a cleaner environment - today. +

+ Connect with our growing community on social media, and explore everything you need to start contributing to a cleaner environment today.

{/* Social Buttons */} -
+
- Telegram + Telegram +
+ Twitter +
+ + - Twitter + Farcaster +
diff --git a/components/NavLink/NavLink.tsx b/components/NavLink/NavLink.tsx index de7be93..ae36455 100644 --- a/components/NavLink/NavLink.tsx +++ b/components/NavLink/NavLink.tsx @@ -7,7 +7,7 @@ const NavLink = () => { { name: "LITEPAPER", href: "https://github.com/DeCleanup-Network" }, { name: "DOCS", href: "https://github.com/DeCleanup-Network/docs" }, { name: "LATEST ARTICLES", href: "https://paragraph.xyz/decleanupnet" }, - { name: "KARMA-GAP", href: "https://gap.karmahq.xyz/project/decentralized-cleanup-network-decleanup-network"}, + { name: "KARMA GAP", href: "https://gap.karmahq.xyz/project/decentralized-cleanup-network-decleanup-network"}, { name: "GITHUB", href: "https://github.com/DeCleanup-Network" }, { name: "USER GUIDE", href: "https://giveth.io/project/decentralized-cleanup-network"}, { name: "BUG REPORT", href: "https://tally.so/r/mRBlbl" }, @@ -17,65 +17,54 @@ const NavLink = () => { ); diff --git a/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx b/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx index 70f95f7..680223c 100644 --- a/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx +++ b/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx @@ -1,52 +1,238 @@ -import React from "react"; +"use client"; +import React, { useRef, useState, useEffect } from "react"; import Image from "next/image"; +import Link from "next/link"; + +const RoadmapCarousel = ({ roadmap }: { roadmap: Array<{ phase: string; bullets: string[] }> }) => { + const [currentIndex, setCurrentIndex] = useState(0); + const touchStartX = useRef(null); + const touchEndX = useRef(null); + + const goToPrevious = () => { + setCurrentIndex((prev) => (prev === 0 ? roadmap.length - 1 : prev - 1)); + }; + + const goToNext = () => { + setCurrentIndex((prev) => (prev === roadmap.length - 1 ? 0 : prev + 1)); + }; + + // Touch handlers for mobile swipe + const handleTouchStart = (e: React.TouchEvent) => { + touchStartX.current = e.touches[0].clientX; + }; + + const handleTouchMove = (e: React.TouchEvent) => { + touchEndX.current = e.touches[0].clientX; + }; + + const handleTouchEnd = () => { + if (!touchStartX.current || !touchEndX.current) return; + + const distance = touchStartX.current - touchEndX.current; + const minSwipeDistance = 50; + + if (distance > minSwipeDistance) { + // Swipe left - go to next + goToNext(); + } else if (distance < -minSwipeDistance) { + // Swipe right - go to previous + goToPrevious(); + } + + touchStartX.current = null; + touchEndX.current = null; + }; + + return ( +
+ {/* Container with padding to prevent border cutoff */} +
+ {/* Cards Container - Centered with stacked effect */} +
+ {roadmap.map((item, index) => { + const isActive = index === currentIndex; + const offset = index - currentIndex; + const absOffset = Math.abs(offset); + + // Calculate position and scale for stacked cards + let transform = ""; + let zIndex = roadmap.length - absOffset; + let opacity = 1; + let scale = 1; + + if (isActive) { + transform = "translateX(0) translateY(0)"; + zIndex = roadmap.length + 1; + } else if (offset < 0) { + // Cards to the left + transform = `translateX(${-100 * absOffset - 50}px) translateY(${20 * absOffset}px) scale(${1 - absOffset * 0.1})`; + opacity = Math.max(0.3, 1 - absOffset * 0.2); + } else { + // Cards to the right + transform = `translateX(${100 * absOffset + 50}px) translateY(${20 * absOffset}px) scale(${1 - absOffset * 0.1})`; + opacity = Math.max(0.3, 1 - absOffset * 0.2); + } + + return ( +
+
!isActive && setCurrentIndex(index)} + style={{ + transform: isActive ? "scale(1)" : "scale(0.9)", + }} + > +

+ {item.phase} +

+
    + {item.bullets.map((bullet, idx) => { + // Check if bullet contains a link + const linkMatch = bullet.match(/\(https?:\/\/[^)]+\)/); + if (linkMatch) { + const url = linkMatch[0].slice(1, -1); + const textBefore = bullet.substring(0, bullet.indexOf("(")); + return ( +
  • + + + {textBefore} + e.stopPropagation()} + > + {url} + + +
  • + ); + } + return ( +
  • + + {bullet} +
  • + ); + })} +
+
+
+ ); + })} +
+
+ + {/* Navigation Arrows - Hidden on mobile, visible on desktop */} +
+ + + {/* Dots indicator */} +
+ {roadmap.map((_, index) => ( +
+ + +
+ + {/* Dots indicator for mobile - visible on mobile, hidden on desktop */} +
+ {roadmap.map((_, index) => ( +
+
+ ); +}; const NetworkRoadmapSection = () => { const roadmap = [ { - phase: "FOUNDATION PHASE", - description: "initial community partnerships activated", - version: "DAPP V1", - features: [ - "BASIC POI SUBMISSION", - "IMPACT PRODUCTS", - "POINTS AND IMPACT VALUE", + phase: "Phase 1 — Base Mini App (live)", + bullets: [ + "Farcaster mini app for quick cleanups", + "$bDCU rewards on Base", + "Simple logging + basic stats", ], }, { - phase: "SYSTEM GROWTH", - description: "collaboration with regen coordination", - version: "DAPP V2.1", - features: [ - "IMPROVED POI SUBMISSION", - "PERSONAL DASHBOARD", - "REFERRAL SYSTEM", - "LEADERBOARD", + phase: "Phase 2 — Celo Full dApp (building)", + bullets: [ + "Full dashboard, leaderboard, streaks", + "Impact Products, claim & stake", + "Hypercert minted after every 10 verified cleanups", ], }, { - phase: "ACTIVATION", - description: "launching global ambassador program", - version: "DAPP V2.2", - features: [ - "$DCU TOKEN LAUNCH", - "STAKING AND LOCKING", - "COMMUNITY VERIFICATION", - "IMPACT CIRCLES", - "INTEGRATION WITH REGEN BAZAAR", - "MULTICHAIN ROLLOUT", + phase: "Phase 3 — Reputation & Governance", + bullets: [ + "$cDCU as reputation + governance token on Celo", + "Voting on Gardens.fund", + "Cleaner profiles and long-term contribution history", ], }, { - phase: "REGIONAL SCALING", - description: "multi-region coordination and governance", - version: "DAPP V3", - features: [ - "NEW IMPACT PRODUCT LEVELS", - "GOVERNANCE TOOLS", - "IMPACT METRICS", - "MULTICHAIN POAPS", - "INTEGRATIONS WITH PARTNERS", + phase: "Phase 4 — Multichain Ecosystem", + bullets: [ + "Base + Celo live side-by-side", + "Integrations with Regen Bazaar and partners", + "New Impact Product levels and impact metrics", ], }, ]; @@ -78,351 +264,30 @@ const NetworkRoadmapSection = () => { return (
{/* Roadmap Section with responsive margins */} -
-
+
+
{/* Header */} -
-

- NETWORK ROADMAP +
+

+ Network Roadmap

- {/* Desktop Roadmap - Original Style */} -
- {/* Connecting lines - visible on larger screens */} -
-
-
-
-
-
-
-
- - {roadmap.map((item, index) => ( -
- {/* Connection dot */} -
- -
-

- {item.phase} -

-

- {item.description} -

- -
-

- {item.version} -

-
    - {item.features.map((feature, idx) => ( -
  • - {feature} -
  • - ))} -
-
-
-
- ))} -
- - {/* Mobile/Tablet Roadmap */} -
- {/* Vertical connecting line */} -
- -
- {/* Point 1 - Foundation Phase */} -
-
-
-
-

- FOUNDATION PHASE -

-

- initial community partnerships activated -

-
-
-
- - {/* Point 2 - System Growth */} -
-
-
-
-

- SYSTEM GROWTH -

-

- collaboration with regen coordination -

-
-
-
- - {/* Point 3 - Activation */} -
-
-
-
-

- ACTIVATION -

-

- launching global ambassador program -

-
-
-
- - {/* Point 4 - Regional Scaling */} -
-
-
-
-

- REGIONAL SCALING -

-

- multi-region coordination and governance -

-
-
-
- - {/* Point 5 - DAPP V1 */} -
-
-
-
-

- DAPP V1 -

-
    -
  • BASIC POI SUBMISSION
  • -
  • IMPACT PRODUCTS
  • -
  • POINTS AND IMPACT VALUE
  • -
-
-
-
- - {/* Point 6 - DAPP V2.1 */} -
-
-
-
-

- DAPP V2.1 -

-
    -
  • IMPROVED POI SUBMISSION
  • -
  • PERSONAL DASHBOARD
  • -
  • REFERRAL SYSTEM
  • -
  • LEADERBOARD
  • -
-
-
-
- - {/* Point 7 - DAPP V2.2 */} -
-
-
-
-

- DAPP V2.2 -

-
    -
  • $DCU TOKEN LAUNCH
  • -
  • STAKING AND LOCKING
  • -
  • COMMUNITY VERIFICATION
  • -
  • IMPACT CIRCLES
  • -
  • - INTEGRATION WITH REGEN BAZAAR -
  • -
  • MULTICHAIN ROLLOUT
  • -
-
-
-
- - {/* Point 8 - DAPP V3 */} -
-
-
-
-

- DAPP V3 -

-
    -
  • NEW IMPACT PRODUCT LEVELS
  • -
  • GOVERNANCE TOOLS
  • -
  • IMPACT METRICS
  • -
  • MULTICHAIN POAPS
  • -
  • INTEGRATIONS WITH PARTNERS
  • -
-
-
-
-
-
+ {/* Roadmap Carousel */} +
- {/* Yellow Background Section */} + {/* Community Impact Section */}
{/* Gallery with responsive margins */} -
-
+
+
{/* Large image on left - full height */}
{
- {/* Community Impact Section with responsive margins and typography */} -
- {/* Horizontal Line Separator */} -
- {/* Header Section - Title and Description side by side */} -
-
-

- COMMUNITY IMPACT -

-
-
-

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

-
+ {/* Community Impact Section with centered heading and description */} +
+ {/* Centered Heading + Description */} +
+

+ Community Impact +

+

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

{/* Cards Section - Two cards side by side with responsive spacing */} -
+
{/* HEM Japan - shorter card */} -
-

- HEM JAPAN +
+

+ HEM Japan

-

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

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

{/* Pestathon - taller card */} -
-

- PESATHON +
+

+ Pestathon

-

- UNNPloggas 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 +

+ UNNPloggas 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

- {/* Horizontal Line Separator */} -
{/* Quote Section with responsive typography */} -
- {/* Opening Quote Mark */} -
- - " - -
- +
{/* Main Quote Text */} -
-

- 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! +

+

+ "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!"

{/* Attribution */} -
+
-

- YUICHI HOSOMO — NEW JAPAN +

+ — Yuichi Hosomo, New Japan

- - {/* Closing Quote Mark */} -
- - " - -
- -
); diff --git a/components/UseDeCleanupToday/UseDeCleanupToday.tsx b/components/UseDeCleanupToday/UseDeCleanupToday.tsx new file mode 100644 index 0000000..54fece2 --- /dev/null +++ b/components/UseDeCleanupToday/UseDeCleanupToday.tsx @@ -0,0 +1,241 @@ +import React from "react"; +import Link from "next/link"; + +// Helper function to render bullet with links +const renderBullet = (bullet: string) => { + const linkMatch = bullet.match(/https?:\/\/[^\s]+/); + if (linkMatch) { + const url = linkMatch[0]; + const parts = bullet.split(url); + return ( + <> + {parts[0]} + + {url} + + {parts[1]} + + ); + } + return bullet; +}; + +const UseDeCleanupToday = () => { + const apps = [ + { + title: "Base mini app on Farcaster", + subtitle: "Fast actions, onchain rewards.", + bullets: [ + "Log cleanups from Farcaster", + "Earn and use $bDCU on Base", + ], + buttonLabel: "Open mini app", + buttonHref: "https://farcaster.xyz/miniapps/njiQzfqas3yN/decleanup-rewards", + buttonDisabled: false, + note: null, + }, + { + title: "$bDCU token on Base (Clanker)", + subtitle: "Cleanup reward + trading token.", + bullets: [ + "Live on Base via Clanker", + "Used for quick rewards and trading", + ], + buttonLabel: "Link – coming soon", + buttonHref: "#", + buttonDisabled: true, + note: "Link will be updated by Tuesday end of day (UTC).", + }, + { + title: "Full dApp on Celo (coming soon)", + subtitle: "All DeCleanup Rewards features, plus governance.", + bullets: [ + "Full dashboard, leaderboard, streaks", + "Recycables rewards promo, supported by DeTrash Global and Recy.App", + "Impact Products, claim & stake flows", + "Governance with $cDCU on Gardens.fund", + "Hypercerts: 1 cleanup hypercert after every 10 verified cleanups", + ], + buttonLabel: "DeCleanup on Celo – coming soon", + buttonHref: "#", + buttonDisabled: true, + note: "$cDCU starts as a reputation + governance token for early cleaners.", + }, + ]; + + return ( +
+
+ {/* Section Header */} +
+

+ Earn DeCleanup Rewards today +

+

+ Choose how you want to log cleanups, earn, and govern our impact network. +

+
+ + {/* Cards Layout: Two Base cards side by side, then Celo full width */} +
+ {/* Base Cards - Side by Side */} +
+ {apps.slice(0, 2).map((app, index) => ( +
+ {/* Chain Label */} +
+ base +
+ + {/* Title */} +

+ {app.title} +

+ + {/* Subtitle */} +

+ {app.subtitle} +

+ + {/* Bullet Points */} +
    + {app.bullets.map((bullet, idx) => ( +
  • + + {bullet} +
  • + ))} +
+ + {/* Note (if present) */} + {app.note && ( +

+ {app.note} +

+ )} + + {/* Button */} + {app.buttonDisabled ? ( + + ) : ( + + {app.buttonLabel} + + )} +
+ ))} +
+ + {/* Celo Card - Full Width */} + {apps[2] && ( +
+ {/* Chain Label */} +
+ celo +
+ + {/* Title */} +

+ {apps[2].title} +

+ + {/* Subtitle */} +

+ {apps[2].subtitle} +

+ + {/* Bullet Points */} +
    + {apps[2].bullets.map((bullet, idx) => { + // Special handling for bullet with DeTrash Global link (second bullet, index 1) + if (idx === 1) { + const linkUrl = "https://detrashtoken.com/en"; + const parts = bullet.split("DeTrash Global"); + return ( +
  • + + + {parts[0]} + + DeTrash Global + + {parts[1]} + +
  • + ); + } + return ( +
  • + + {bullet} +
  • + ); + })} +
+ + {/* Note (if present) */} + {apps[2].note && ( +

+ {apps[2].note} +

+ )} + + {/* Button */} + {apps[2].buttonDisabled ? ( + + ) : ( + + {apps[2].buttonLabel} + + )} +
+ )} +
+
+
+ ); +}; + +export default UseDeCleanupToday; + diff --git a/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx b/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx index 444796d..59ddf85 100644 --- a/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx +++ b/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx @@ -5,45 +5,8 @@ interface ProblemSectionProps { } function ProblemSection({ hideHeader = false }: ProblemSectionProps) { - const problems = [ - { - title: "LACK OF INCENTIVES FOR CLEANUP ACTIONS", - }, - { - title: "LIMITS FOR RECOGNITION AND QUANTIFICATION OF PERSONAL IMPACT", - }, - { - title: "WEAK GLOBAL COORDINATION", - }, - ]; - - return ( -
- {!hideHeader && ( -
-

- THE PROBLEM -

-
- )} - -
- {problems.map((problem, index) => ( -
-

- {problem.title} -

-
- ))} -
-
- ); + // This component is kept for backwards compatibility but cards are now rendered inline + return null; } interface SolutionSectionProps { @@ -51,171 +14,108 @@ interface SolutionSectionProps { } function SolutionSection({ hideHeader = false }: SolutionSectionProps) { + // This component is kept for backwards compatibility but cards are now rendered inline + return null; +} + +export default function WhatIsDeCleanupNetwork() { + const problems = [ + "Lack of incentives for cleanup actions", + "Limits for recognition and quantification of impact", + "Weak global coordination", + ]; + const solutions = [ - { - title: "TOKENIZING IMPACT INTO IMPACT PRODUCTS", - description: - "Turn each cleanup into a dynamic onchain Impact Product - visible, growing assets tied to real action. Creates lasting value beyond the cleanup moment.", - }, - { - title: "SCALABLE PERSONAL RECOGNITION SYSTEM", - description: - "Earn visibility and status reflecting actual environmental contributions. Unlock levels, metrics, and benefits based on your actions.", - }, - { - title: "GLOBAL NETWORK OF COORDINATED ACTION", - description: - "Ambassador program + partner communities + decentralized tech = local efforts connected into one shared, scalable ecosystem", - }, + "Tokenizing impact into Impact Products and tokens", + "Scalable personal recognition system", + "Network of coordinated action", ]; return ( -
- {!hideHeader && ( -
-

THE SOLUTION

-
- )} - -
- {solutions.map((solution, index) => ( -
+
+ {/* Section Header */} +
+

-

- {solution.title} -

-

- {solution.description} -

-
- ))} -
-
- ); -} - -export default function WhatIsDeCleanupNetwork() { - return ( -
-
-
-
What is DeCleanup Network? -
+

- {/* Header Section - Title and Description Side by Side */} -
- {/* Left: Title with background image */} -
-
+ {/* Content Section - Image and Description Side by Side */} +
+ {/* Left: Image with Yellow Frame */} +
+
+
+
+
+
{/* Right: Description */} -
-
-
-
- at DeCleanup Network we coordinate global environmental - cleanups and turn them into lasting digital impact. -
-
- -
-
- We connect participants and partners into a shared ecosystem - where every cleanup becomes a part of broader planetary - regeneration. -
-
- -
-
- By converting actions into onchain Impact Products, we enable - recognition, traceability, and participation across regions. -
-
+
+
+

+ DeCleanup Network transforms environmental action into transparent, verifiable digital impact. +

+ +

+ Your cleanups become tokenized assets that unlock rewards, reputation, and community recognition. +

-
- {/* Horizontal Line Separator */} -
- - {/* Problem-Solution Headers with horizontal line */} -
-
+ {/* Problem-Solution Section */} +
+
+ {/* Problem Section */} +

THE PROBLEM

-
-

- THE SOLUTION -

-
-
- - {/* Problem-Solution Content Side by Side */} -
-
- -
-
- -
-
-
- - {/* Mobile Layout: Stacked with vertical line */} -
- {/* Mobile Problem Section */} -
-
-

- THE PROBLEM -

-
- - {/* Problem content with vertical line */} -
- {/* Vertical line at the left edge */} -
- - {/* Problem items */} -
- +
+ {problems.map((problem, index) => ( +
+

+ {problem} +

+
+ ))}
-
- {/* Mobile Solution Section */} -
-
-

+ {/* Solution Section */} +
+

THE SOLUTION

-
- - {/* Solution content without vertical line */} -
- +
+ {solutions.map((solution, index) => ( +
+

+ {solution} +

+
+ ))} +

diff --git a/eslint.config.mjs b/eslint.config.mjs index c85fb67..5a6d320 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -11,6 +11,16 @@ const compat = new FlatCompat({ const eslintConfig = [ ...compat.extends("next/core-web-vitals", "next/typescript"), + { + ignores: [ + ".next/**", + "node_modules/**", + "out/**", + "build/**", + "*.config.js", + "*.config.mjs", + ], + }, ]; export default eslintConfig; diff --git a/next.config.ts b/next.config.ts index 6b67621..265460b 100644 --- a/next.config.ts +++ b/next.config.ts @@ -7,6 +7,9 @@ const nextConfig = { }, basePath: process.env.BASE_PATH || "", assetPrefix: process.env.BASE_PATH || "", + turbopack: { + root: process.cwd(), + }, }; module.exports = nextConfig; diff --git a/package-lock.json b/package-lock.json index b9fbd63..a973186 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,8 @@ "name": "landing-page", "version": "0.1.0", "dependencies": { - "next": "15.3.3", + "geist": "^1.5.1", + "next": "^15.5.7", "react": "^19.0.0", "react-dom": "^19.0.0" }, @@ -64,9 +65,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", "license": "MIT", "optional": true, "dependencies": { @@ -212,19 +213,32 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", - "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -291,10 +305,20 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", - "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", "cpu": [ "arm64" ], @@ -310,13 +334,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" + "@img/sharp-libvips-darwin-arm64": "1.2.4" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", - "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", "cpu": [ "x64" ], @@ -332,13 +356,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" + "@img/sharp-libvips-darwin-x64": "1.2.4" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", "cpu": [ "arm64" ], @@ -352,9 +376,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", "cpu": [ "x64" ], @@ -368,9 +392,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", "cpu": [ "arm" ], @@ -384,9 +408,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", "cpu": [ "arm64" ], @@ -400,9 +424,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", "cpu": [ "ppc64" ], @@ -415,10 +439,26 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", "cpu": [ "s390x" ], @@ -432,9 +472,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", "cpu": [ "x64" ], @@ -448,9 +488,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", "cpu": [ "arm64" ], @@ -464,9 +504,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", "cpu": [ "x64" ], @@ -480,9 +520,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", - "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", "cpu": [ "arm" ], @@ -498,13 +538,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" + "@img/sharp-libvips-linux-arm": "1.2.4" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", - "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", "cpu": [ "arm64" ], @@ -520,13 +560,57 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", - "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", "cpu": [ "s390x" ], @@ -542,13 +626,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" + "@img/sharp-libvips-linux-s390x": "1.2.4" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", - "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", "cpu": [ "x64" ], @@ -564,13 +648,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" + "@img/sharp-libvips-linux-x64": "1.2.4" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", - "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", "cpu": [ "arm64" ], @@ -586,13 +670,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", - "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", "cpu": [ "x64" ], @@ -608,20 +692,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", - "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", "cpu": [ "wasm32" ], "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.3" + "@emnapi/runtime": "^1.7.0" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -631,9 +715,9 @@ } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", - "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", "cpu": [ "arm64" ], @@ -650,9 +734,9 @@ } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", - "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", "cpu": [ "ia32" ], @@ -669,9 +753,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", - "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", "cpu": [ "x64" ], @@ -767,9 +851,9 @@ } }, "node_modules/@next/env": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz", - "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.7.tgz", + "integrity": "sha512-4h6Y2NyEkIEN7Z8YxkA27pq6zTkS09bUSYC0xjd0NpwFxjnIKeZEeH591o5WECSmjpUhLn3H2QLJcDye3Uzcvg==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -783,9 +867,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz", - "integrity": "sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.7.tgz", + "integrity": "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==", "cpu": [ "arm64" ], @@ -799,9 +883,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz", - "integrity": "sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.7.tgz", + "integrity": "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==", "cpu": [ "x64" ], @@ -815,9 +899,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz", - "integrity": "sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.7.tgz", + "integrity": "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==", "cpu": [ "arm64" ], @@ -831,9 +915,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz", - "integrity": "sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.7.tgz", + "integrity": "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==", "cpu": [ "arm64" ], @@ -847,9 +931,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz", - "integrity": "sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.7.tgz", + "integrity": "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==", "cpu": [ "x64" ], @@ -863,9 +947,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz", - "integrity": "sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.7.tgz", + "integrity": "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==", "cpu": [ "x64" ], @@ -879,9 +963,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz", - "integrity": "sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.7.tgz", + "integrity": "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==", "cpu": [ "arm64" ], @@ -895,9 +979,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz", - "integrity": "sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.7.tgz", + "integrity": "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==", "cpu": [ "x64" ], @@ -972,12 +1056,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1512,9 +1590,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2142,9 +2220,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -2165,17 +2243,6 @@ "node": ">=8" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2289,25 +2356,11 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2320,20 +2373,9 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2486,9 +2528,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "devOptional": true, "license": "Apache-2.0", "engines": { @@ -3342,6 +3384,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/geist": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/geist/-/geist-1.5.1.tgz", + "integrity": "sha512-mAHZxIsL2o3ZITFaBVFBnwyDOw+zNLYum6A6nIjpzCGIO8QtC3V76XF2RnZTyLx1wlDTmMDy8jg3Ib52MIjGvQ==", + "license": "SIL OPEN FONT LICENSE", + "peerDependencies": { + "next": ">=13.2.0" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -3646,13 +3697,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", - "optional": true - }, "node_modules/is-async-function": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", @@ -4086,9 +4130,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -4622,15 +4666,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.3.tgz", - "integrity": "sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.7.tgz", + "integrity": "sha512-+t2/0jIJ48kUpGKkdlhgkv+zPTEOoXyr60qXe68eB/pl3CMJaLeIGjzp5D6Oqt25hCBiBTt8wEeeAzfJvUKnPQ==", "license": "MIT", "dependencies": { - "@next/env": "15.3.3", - "@swc/counter": "0.1.3", + "@next/env": "15.5.7", "@swc/helpers": "0.5.15", - "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -4642,19 +4684,19 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.3", - "@next/swc-darwin-x64": "15.3.3", - "@next/swc-linux-arm64-gnu": "15.3.3", - "@next/swc-linux-arm64-musl": "15.3.3", - "@next/swc-linux-x64-gnu": "15.3.3", - "@next/swc-linux-x64-musl": "15.3.3", - "@next/swc-win32-arm64-msvc": "15.3.3", - "@next/swc-win32-x64-msvc": "15.3.3", - "sharp": "^0.34.1" + "@next/swc-darwin-arm64": "15.5.7", + "@next/swc-darwin-x64": "15.5.7", + "@next/swc-linux-arm64-gnu": "15.5.7", + "@next/swc-linux-arm64-musl": "15.5.7", + "@next/swc-linux-x64-gnu": "15.5.7", + "@next/swc-linux-x64-musl": "15.5.7", + "@next/swc-win32-arm64-msvc": "15.5.7", + "@next/swc-win32-x64-msvc": "15.5.7", + "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", @@ -5255,9 +5297,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "devOptional": true, "license": "ISC", "bin": { @@ -5317,16 +5359,16 @@ } }, "node_modules/sharp": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", - "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.4", - "semver": "^7.7.2" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -5335,27 +5377,30 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.2", - "@img/sharp-darwin-x64": "0.34.2", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.2", - "@img/sharp-linux-arm64": "0.34.2", - "@img/sharp-linux-s390x": "0.34.2", - "@img/sharp-linux-x64": "0.34.2", - "@img/sharp-linuxmusl-arm64": "0.34.2", - "@img/sharp-linuxmusl-x64": "0.34.2", - "@img/sharp-wasm32": "0.34.2", - "@img/sharp-win32-arm64": "0.34.2", - "@img/sharp-win32-ia32": "0.34.2", - "@img/sharp-win32-x64": "0.34.2" + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" } }, "node_modules/shebang-command": { @@ -5457,16 +5502,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5497,14 +5532,6 @@ "node": ">= 0.4" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", diff --git a/package.json b/package.json index d4defd7..f2a540d 100644 --- a/package.json +++ b/package.json @@ -9,19 +9,20 @@ "lint": "next lint" }, "dependencies": { + "geist": "^1.5.1", + "next": "^15.5.7", "react": "^19.0.0", - "react-dom": "^19.0.0", - "next": "15.3.3" + "react-dom": "^19.0.0" }, "devDependencies": { - "typescript": "^5", + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", - "tailwindcss": "^4", "eslint": "^9", "eslint-config-next": "15.3.3", - "@eslint/eslintrc": "^3" + "tailwindcss": "^4", + "typescript": "^5" } } diff --git a/public/base-logo-white.svg b/public/base-logo-white.svg new file mode 100644 index 0000000..7774c47 --- /dev/null +++ b/public/base-logo-white.svg @@ -0,0 +1,4 @@ + + + base + diff --git a/public/base-logo.svg b/public/base-logo.svg new file mode 100644 index 0000000..1b2b690 --- /dev/null +++ b/public/base-logo.svg @@ -0,0 +1,4 @@ + + + base + diff --git a/public/celo-logo-white.svg b/public/celo-logo-white.svg new file mode 100644 index 0000000..263ed08 --- /dev/null +++ b/public/celo-logo-white.svg @@ -0,0 +1,8 @@ + + + + + + CELO + + diff --git a/public/celo-logo.svg b/public/celo-logo.svg new file mode 100644 index 0000000..5fb2d48 --- /dev/null +++ b/public/celo-logo.svg @@ -0,0 +1,7 @@ + + + + + + CELO + diff --git a/tailwind.config.js b/tailwind.config.js index 32aba7b..ec6620e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -13,8 +13,9 @@ module.exports = { tertiary: 'var(--yellow)', }, fontFamily: { - bebas: ['var(--font-bebas)'], - nunito: ['var(--font-nunito)'], + bebas: ['var(--font-bebas-neue)'], + sans: ['var(--font-geist-sans)', 'system-ui', 'sans-serif'], + heading: ['var(--font-bebas-neue)', 'sans-serif'], }, }, }, From 22e70bf38a777ea47460b4445ad91aa9f69b6619 Mon Sep 17 00:00:00 2001 From: Anastasia <142572092+LuminaEnvision@users.noreply.github.com> Date: Sun, 7 Dec 2025 21:49:04 +0700 Subject: [PATCH 2/5] Add litepaper, tokenomics, and docs pages with back buttons; update navigation to separate internal/external links --- app/docs/page.tsx | 55 +++ app/globals.css | 8 +- app/litepaper/page.tsx | 383 ++++++++++++++++++ app/tokenomics/page.tsx | 55 +++ components/HeroSection/Hero.tsx | 12 +- .../TokenizeImpactSection.tsx | 10 +- components/NavLink/NavLink.tsx | 97 +++-- .../NetworkRoadmapSection.tsx | 2 +- .../WhatIsDeCleanupNetwork.tsx | 14 +- 9 files changed, 588 insertions(+), 48 deletions(-) create mode 100644 app/docs/page.tsx create mode 100644 app/litepaper/page.tsx create mode 100644 app/tokenomics/page.tsx diff --git a/app/docs/page.tsx b/app/docs/page.tsx new file mode 100644 index 0000000..327764b --- /dev/null +++ b/app/docs/page.tsx @@ -0,0 +1,55 @@ +import type { Metadata } from "next"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "DeCleanup Network Documentation", + description: "Technical documentation for DeCleanup Network", +}; + +export default function DocsPage() { + return ( +
+
+ {/* Back Button */} +
+ + + + + Back to Home + +
+ + {/* Page Header */} +
+

+ Documentation +

+

+ Coming Soon +

+
+ +
+

+ Technical documentation will be available here soon. +

+
+
+
+ ); +} + diff --git a/app/globals.css b/app/globals.css index 5b8b362..f47a2d9 100644 --- a/app/globals.css +++ b/app/globals.css @@ -38,11 +38,11 @@ html { scroll-behavior: smooth; -webkit-overflow-scrolling: touch; - } +} - body { - background: var(--background); - color: var(--foreground); +body { + background: var(--background); + color: var(--foreground); font-family: var(--font-geist-sans), system-ui, -apple-system, sans-serif; overflow-x: hidden; overflow-y: auto; diff --git a/app/litepaper/page.tsx b/app/litepaper/page.tsx new file mode 100644 index 0000000..5857aad --- /dev/null +++ b/app/litepaper/page.tsx @@ -0,0 +1,383 @@ +import type { Metadata } from "next"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "DeCleanup Network Litepaper (v3.0)", + description: "DeCleanup Network Litepaper Version 3.0 — December 2025", +}; + +export default function LitepaperPage() { + return ( +
+
+ {/* Back Button */} +
+ + + + + Back to Home + +
+ + {/* Page Header */} +
+

+ Litepaper +

+

+ Version 3.0 — December 2025 +

+
+ + {/* Overview Section */} +
+

+ Overview +

+
+

+ DeCleanup Network is global infrastructure for coordinating environmental cleanups and converting them into verifiable, onchain impact. We unite individuals, communities, and organizations into a shared ecosystem where every cleanup generates a measurable digital asset: an Impact Product. +

+

+ The network now operates across two chains, each serving a clear purpose: +

+
    +
  • Base — fast, lightweight action + cleanup rewards
  • +
  • Celo — full dApp, governance, reputation, hypercerts, and advanced features
  • +
+
+
+ +
+ + {/* Mission Section */} +
+

+ Mission +

+

+ To mobilize people worldwide into measurable environmental action by transforming real cleanups into provable, composable digital impact assets. Through transparent verification, community incentives, and shared infrastructure, DeCleanup enables environmental action to become visible, rewarded, and scalable. +

+
+ +
+ + {/* The Problem Section */} +
+

+ The Problem +

+
    +
  • No lasting incentives for cleanup actions
  • +
  • No standardized way to measure or verify real-world environmental work
  • +
  • Fragmented local efforts with no shared global infrastructure
  • +
+
+ +
+ + {/* Our Solution Section */} +
+

+ Our Solution +

+
    +
  • Impact Products — dynamic soulbound NFTs representing real-world cleanup impact
  • +
  • Multichain Architecture — Base mini app for fast actions, Celo full dApp for governance & analytics
  • +
  • Verifiable Reputation — user identity grows with real contributions
  • +
  • Hypercerts Integration — automatically minted every 10 cleanups
  • +
  • Decentralized Verification — staked community verifiers
  • +
  • Global Coordination Layer — ambassadors + open infrastructure
  • +
+
+ +
+ + {/* Multichain Network Section */} +
+

+ Multichain Network: Base + Celo +

+ +
+
+

+ Base — Quick Action Layer +

+
    +
  • Farcaster Mini App
  • +
  • $bDCU reward token
  • +
  • Simple logging + stats
  • +
+
+ +
+

+ Celo — Full Impact Layer +

+
    +
  • Full-feature dApp
  • +
  • Leaderboards, streaks, dashboards
  • +
  • Claim & stake flows
  • +
  • Hypercert auto-minting
  • +
  • $cDCU governance + Gardens.fund
  • +
  • Advanced analytics
  • +
+
+
+
+ +
+ + {/* Impact Products Section */} +
+

+ Impact Products +

+

+ Dynamic soulbound NFTs representing verified environmental work. +

+ +

+ Key Characteristics: +

+
    +
  • Soulbound
  • +
  • Dynamic metadata
  • +
  • Verifiable history
  • +
  • Level progression
  • +
  • Hypercert linkage
  • +
+ +

+ Level Progression: +

+

+ Newbie → Pro → Hero → Guardian +

+
+ +
+ + {/* Hypercerts Section */} +
+

+ Hypercerts +

+

+ Every 10 verified cleanups → automatic Hypercert (ERC-1155). +

+

+ Contains: +

+
    +
  • weight removed
  • +
  • area cleaned
  • +
  • waste types
  • +
  • contributors
  • +
  • timeframes
  • +
  • cumulative metrics
  • +
+
+ +
+ + {/* Base Token Section */} +
+

+ Base Token: $bDCU +

+

+ The "action token." Used on Base for: +

+
    +
  • cleanup rewards
  • +
  • streaks
  • +
  • referrals, verifier staking
  • +
  • simple incentives
  • +
  • future staking for $REBAZ
  • +
+
+ +
+ + {/* Celo Token Section */} +
+

+ Celo Token: $cDCU +

+

+ Non-tradable first, governance & reputation token. +

+

+ Used for: +

+
    +
  • governance voting (Gardens.fund)
  • +
  • verifier staking
  • +
  • milestone rewards
  • +
+ +
+

+ Why non-tradable? +

+
    +
  • prevents speculation
  • +
  • preserves legitimacy of reputation
  • +
  • aligns incentives
  • +
+
+
+ +
+ + {/* Verification System Section */} +
+

+ Verification System +

+
    +
  • Staked verifiers - 100 $bDCU or $cDCU required to stake
  • +
  • Weighted approvals
  • +
  • Anti-fraud slashing
  • +
  • Accuracy score
  • +
  • Appeals system
  • +
+
+ +
+ + {/* User Flow Section */} +
+

+ User Flow +

+
    +
  1. Clean up
  2. +
  3. Snap evidence
  4. +
  5. Submit
  6. +
  7. Verify
  8. +
  9. Earn $bDCU or $cDCU
  10. +
  11. Impact Product updates
  12. +
  13. Hypercerts every 10 cleanups
  14. +
+
+ +
+ + {/* Use Cases Section */} +
+

+ Use Cases +

+
    +
  • HEM Japan — early partner community
  • +
  • Pesathon Nigeria — university cleanup campaign
  • +
+
+ +
+ + {/* Roadmap Section */} +
+

+ Roadmap (Updated) +

+ +
+
+

+ Phase 1 — Base Mini App (Live) +

+
    +
  • Farcaster app
  • +
  • $bDCU rewards
  • +
  • basic logging
  • +
+
+ +
+

+ Phase 2 — Celo Full dApp (In Development) +

+
    +
  • dashboards + leaderboards
  • +
  • streaks
  • +
  • Impact Products v2
  • +
  • claim & stake
  • +
  • hypercerts
  • +
  • community verification
  • +
  • $cDCU governance
  • +
+
+ +
+

+ Phase 3 — Reputation + Marketplace Layer +

+
    +
  • RWI Rank
  • +
  • Regen Bazaar staking (Impact Products → $REBAZ)
  • +
  • advanced analytics
  • +
  • partner integrations
  • +
+
+ +
+

+ Phase 4 — Multichain Expansion +

+
    +
  • unified identity
  • +
  • multichain Hypercerts
  • +
  • Base ↔ Celo syncing
  • +
  • additional EVM chains
  • +
+
+ +
+

+ Phase 5 — DeCleanup V3 +

+
    +
  • ESG partnerships
  • +
  • machine-learning verification
  • +
  • IoT integrations
  • +
  • enterprise impact reporting
  • +
  • mobile app with offline mode
  • +
+
+
+
+ +
+ + {/* Partners Section */} +
+

+ Partners +

+

+ Regen Bazaar, EcoSynthesisX, Atlantis, Hypercerts Foundation, Gardens.fund, NGOs, university partners, ReFi communities, USDGLO, DeTrash, and more. +

+
+
+
+ ); +} + diff --git a/app/tokenomics/page.tsx b/app/tokenomics/page.tsx new file mode 100644 index 0000000..1507e8d --- /dev/null +++ b/app/tokenomics/page.tsx @@ -0,0 +1,55 @@ +import type { Metadata } from "next"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "DeCleanup Network Tokenomics", + description: "Tokenomics and token distribution for DeCleanup Network", +}; + +export default function TokenomicsPage() { + return ( +
+
+ {/* Back Button */} +
+ + + + + Back to Home + +
+ + {/* Page Header */} +
+

+ Tokenomics +

+

+ Coming Soon +

+
+ +
+

+ Tokenomics information will be available here soon. +

+
+
+
+ ); +} + diff --git a/components/HeroSection/Hero.tsx b/components/HeroSection/Hero.tsx index 7d28fa3..849fdf6 100644 --- a/components/HeroSection/Hero.tsx +++ b/components/HeroSection/Hero.tsx @@ -14,8 +14,8 @@ const Hero = () => {
clean up, snap, earn - -
+ +
{/* Logo space - coming soon */}
@@ -25,12 +25,12 @@ const Hero = () => {

- DECLEANUP NETWORK -

+ DECLEANUP NETWORK + {/* Subheading */}

- Turn environmental action into digital assets + Turn environmental action into digital assets

{/* Description */} @@ -45,7 +45,7 @@ const Hero = () => {
-
+
); diff --git a/components/HowToTokonizeImpact/TokenizeImpactSection.tsx b/components/HowToTokonizeImpact/TokenizeImpactSection.tsx index 477f83d..664254c 100644 --- a/components/HowToTokonizeImpact/TokenizeImpactSection.tsx +++ b/components/HowToTokonizeImpact/TokenizeImpactSection.tsx @@ -36,12 +36,12 @@ const TokenizeImpactSection = () => {
-
+ style={{ + backgroundImage: "url('/image1.png')", + }} + >
diff --git a/components/NavLink/NavLink.tsx b/components/NavLink/NavLink.tsx index ae36455..3612a9d 100644 --- a/components/NavLink/NavLink.tsx +++ b/components/NavLink/NavLink.tsx @@ -1,11 +1,18 @@ import React from "react"; +import Link from "next/link"; import Divider from "../ui/Divider"; // Simple Divider component since it's imported const NavLink = () => { - const navLinks = [ - { name: "LITEPAPER", href: "https://github.com/DeCleanup-Network" }, - { name: "DOCS", href: "https://github.com/DeCleanup-Network/docs" }, + // Internal links (same domain) + const internalLinks = [ + { name: "LITEPAPER", href: "/litepaper" }, + { name: "TOKENOMICS", href: "/tokenomics" }, + { name: "DOCS", href: "/docs" }, + ]; + + // 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" }, @@ -14,19 +21,75 @@ const NavLink = () => { ]; return ( -
{/* Problem-Solution Section */} -
+
{/* Problem Section */}
@@ -113,7 +113,7 @@ export default function WhatIsDeCleanupNetwork() {

{solution}

-
+
))}
From 5dc94f93d6e020a1ab74a16988131a820abba3b6 Mon Sep 17 00:00:00 2001 From: Anastasia <142572092+LuminaEnvision@users.noreply.github.com> Date: Sun, 7 Dec 2025 22:03:03 +0700 Subject: [PATCH 3/5] fix: remove unused imports and variables to fix ESLint errors --- .../NetworkRoadmapSection.tsx | 3 +-- .../UseDeCleanupToday/UseDeCleanupToday.tsx | 24 ------------------- .../WhatIsDeCleanupNetwork.tsx | 18 -------------- 3 files changed, 1 insertion(+), 44 deletions(-) diff --git a/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx b/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx index 2ab9223..a70349e 100644 --- a/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx +++ b/components/NetworkRoadmapSection/NetworkRoadmapSection.tsx @@ -1,5 +1,5 @@ "use client"; -import React, { useRef, useState, useEffect } from "react"; +import React, { useRef, useState } from "react"; import Image from "next/image"; import Link from "next/link"; @@ -63,7 +63,6 @@ const RoadmapCarousel = ({ roadmap }: { roadmap: Array<{ phase: string; bullets: let transform = ""; let zIndex = roadmap.length - absOffset; let opacity = 1; - let scale = 1; if (isActive) { transform = "translateX(0) translateY(0)"; diff --git a/components/UseDeCleanupToday/UseDeCleanupToday.tsx b/components/UseDeCleanupToday/UseDeCleanupToday.tsx index 54fece2..118f259 100644 --- a/components/UseDeCleanupToday/UseDeCleanupToday.tsx +++ b/components/UseDeCleanupToday/UseDeCleanupToday.tsx @@ -1,30 +1,6 @@ import React from "react"; import Link from "next/link"; -// Helper function to render bullet with links -const renderBullet = (bullet: string) => { - const linkMatch = bullet.match(/https?:\/\/[^\s]+/); - if (linkMatch) { - const url = linkMatch[0]; - const parts = bullet.split(url); - return ( - <> - {parts[0]} - - {url} - - {parts[1]} - - ); - } - return bullet; -}; - const UseDeCleanupToday = () => { const apps = [ { diff --git a/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx b/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx index bd9af46..a14f381 100644 --- a/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx +++ b/components/WhatIsDecleanUp/WhatIsDeCleanupNetwork.tsx @@ -1,23 +1,5 @@ import React from "react"; -interface ProblemSectionProps { - hideHeader?: boolean; -} - -function ProblemSection({ hideHeader = false }: ProblemSectionProps) { - // This component is kept for backwards compatibility but cards are now rendered inline - return null; -} - -interface SolutionSectionProps { - hideHeader?: boolean; -} - -function SolutionSection({ hideHeader = false }: SolutionSectionProps) { - // This component is kept for backwards compatibility but cards are now rendered inline - return null; -} - export default function WhatIsDeCleanupNetwork() { const problems = [ "Lack of incentives for cleanup actions", From d1affbc621b022fb40d5cd8e0601389307b65e75 Mon Sep 17 00:00:00 2001 From: Anastasia <142572092+LuminaEnvision@users.noreply.github.com> Date: Sun, 7 Dec 2025 22:04:59 +0700 Subject: [PATCH 4/5] fix: add export script for CI/CD pipeline --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index f2a540d..dc37116 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "scripts": { "dev": "next dev --turbopack", "build": "next build", + "export": "next build", "start": "next start", "lint": "next lint" }, From 2c83606bc2d85af22424905110d21ba52c45e5b8 Mon Sep 17 00:00:00 2001 From: Anastasia <142572092+LuminaEnvision@users.noreply.github.com> Date: Sun, 7 Dec 2025 22:44:18 +0700 Subject: [PATCH 5/5] fix: skip deployment for PRs from forks to prevent permission errors --- .github/workflows/preview.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 546053c..d3347ed 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -36,6 +36,7 @@ jobs: path: ./out - name: Deploy to GitHub Pages + if: github.event.pull_request.head.repo.full_name == github.repository uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} @@ -44,8 +45,15 @@ jobs: publish_branch: gh-pages - name: Comment PR with Preview URL + if: github.event.pull_request.head.repo.full_name == github.repository uses: marocchino/sticky-pull-request-comment@v2 with: header: preview-url message: | 🚀 Preview deployed: https://.github.io/pr-preview/pr-${{ github.event.pull_request.number }} + + - name: Skip deployment notice (fork) + if: github.event.pull_request.head.repo.full_name != github.repository + run: | + echo "⚠️ Deployment skipped: This workflow is running from a fork." + echo "The preview will be deployed after the PR is merged to the main repository."