Skip to content

10 year anniversary #15499

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 56 commits into from
Jun 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
63eb628
setup 10 year page, and hero
corwintines May 22, 2025
d2f17ac
A decade of transforming the world section
corwintines May 22, 2025
cc3244b
setup globe
corwintines May 23, 2025
b1fbcb2
Event tabs and test data
corwintines May 23, 2025
cd4f439
style cleanup
corwintines May 23, 2025
926e0d3
replace background image
corwintines May 23, 2025
3383e26
events cta
corwintines May 23, 2025
d9114e8
10 years of innovation
corwintines May 26, 2025
50b0ca6
adoption section
corwintines May 26, 2025
5427893
stories
corwintines May 26, 2025
07f9e0f
Story pagination
corwintines May 26, 2025
1fb22ae
bottom CTA
corwintines May 26, 2025
39c7c5a
homepage cta
corwintines May 26, 2025
937b40c
margins
corwintines May 26, 2025
3a7a8e6
stories styling
corwintines May 27, 2025
bfce632
fix styling
corwintines May 27, 2025
43eb13b
setup fetch functions
corwintines May 27, 2025
05169dd
copy updates
p0unce May 27, 2025
aeb755a
google sheet api for 10 year events
corwintines May 27, 2025
7751621
add stories api
corwintines May 28, 2025
d23f693
Merge pull request #15514 from p0unce/10-year-anniversary
corwintines May 28, 2025
49d5351
add markers to globe
corwintines May 28, 2025
25836f1
vibe code POC
corwintines May 29, 2025
90f3d52
build issues
corwintines May 29, 2025
7a14ccf
refactor use10yearanniversary and home image
corwintines May 29, 2025
1697ea6
Update app/[locale]/10-year-anniversary/_components/TenYearHero.tsx
corwintines May 29, 2025
cbd093c
Update app/[locale]/10-year-anniversary/_components/TenYearHero.tsx
corwintines May 29, 2025
0202609
Update app/[locale]/10-year-anniversary/_components/TenYearHero.tsx
corwintines May 29, 2025
220c23d
Update app/[locale]/10-year-anniversary/_components/TenYearHero.tsx
corwintines May 29, 2025
1511289
Update app/[locale]/10-year-anniversary/_components/TenYearHero.tsx
corwintines May 29, 2025
eda1021
Add and use ParallaxImage component
corwintines May 29, 2025
aa5fb2e
change requests
corwintines May 29, 2025
cde94a2
globe updates
corwintines May 30, 2025
52af284
marketcap changes
corwintines May 30, 2025
5931e58
adoption cards and some styling
corwintines May 30, 2025
f863cf3
change requests
corwintines Jun 1, 2025
bfa87f0
fix spelling
corwintines Jun 1, 2025
19f15ba
fix href
corwintines Jun 1, 2025
b12dbc7
change requests
corwintines Jun 1, 2025
015dd8a
home banner text
corwintines Jun 1, 2025
f7a6b2c
globe changes
corwintines Jun 1, 2025
c1c18d0
change requests
corwintines Jun 1, 2025
990e33b
change requests
corwintines Jun 1, 2025
8fcd87e
Merge branch 'dev' into 10-year-anniversary
corwintines Jun 2, 2025
655a9cd
change requests
corwintines Jun 2, 2025
d93f366
fix: image crop
wackerow Jun 2, 2025
1dae443
change requests
corwintines Jun 2, 2025
6e1c936
hooks refactor
corwintines Jun 2, 2025
9f9f8e7
copy updates
corwintines Jun 2, 2025
fc8aeaa
content update
corwintines Jun 2, 2025
f047357
mock data
corwintines Jun 2, 2025
ba66b3c
fix but
corwintines Jun 3, 2025
c73b6c8
Apply review fixes
minimalsm Jun 3, 2025
2737256
Fix alignment
minimalsm Jun 3, 2025
d985c14
Fix
minimalsm Jun 3, 2025
b872b94
Merge branch 'dev' into 10-year-anniversary
corwintines Jun 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions app/[locale]/10years/_components/AdoptionSwiper.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"use client"

import { Image } from "@/components/Image"
import { ButtonLink } from "@/components/ui/buttons/Button"
import {
Swiper,
SwiperContainer,
SwiperNavigation,
SwiperSlide,
} from "@/components/ui/swiper"

import { cn } from "@/lib/utils/cn"

import { adoptionCards, adoptionStyles } from "./data"

const AdoptionSwiper = () => {
return (
<div className="flex flex-1 flex-col gap-6 md:hidden">
<SwiperContainer className="mx-auto w-full max-w-[550px]">
<Swiper>
{adoptionCards.map((card, index) => (
<SwiperSlide key={card.title}>
<div
className={cn("h-full rounded-2xl p-8", adoptionStyles[index])}
>
<Image
src={card.image}
alt={card.title}
className="mx-auto mb-4 h-36 object-contain"
/>
<h3 className="mb-4 text-2xl font-bold">{card.title}</h3>
{card.description}
<ButtonLink href={card.href} hideArrow variant="outline">
{card.linkText}
</ButtonLink>
</div>
</SwiperSlide>
))}
<SwiperNavigation />
</Swiper>
</SwiperContainer>
</div>
)
}

export default AdoptionSwiper
106 changes: 106 additions & 0 deletions app/[locale]/10years/_components/CountDown.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
"use client"

import { useEffect, useState } from "react"

import { cn } from "@/lib/utils/cn"

interface CountDownProps {
className?: string
}

const CountDown = ({ className }: CountDownProps) => {
const [timeLeft, setTimeLeft] = useState({
days: 0,
hours: 0,
minutes: 0,
seconds: 0,
})
const [isExpired, setIsExpired] = useState(false)

useEffect(() => {
const targetDate = new Date("2025-07-30T15:44:00Z")

const calculateTimeLeft = () => {
const now = new Date()
const difference = targetDate.getTime() - now.getTime()

if (difference > 0) {
setIsExpired(false)
setTimeLeft({
days: Math.floor(difference / (1000 * 60 * 60 * 24)),
hours: Math.floor((difference / (1000 * 60 * 60)) % 24),
minutes: Math.floor((difference / 1000 / 60) % 60),
seconds: Math.floor((difference / 1000) % 60),
})
} else {
setIsExpired(true)
}
}

calculateTimeLeft()

// Update every second
const timer = setInterval(calculateTimeLeft, 1000)

return () => clearInterval(timer)
}, [])

if (isExpired) {
return (
<div className="text-center text-2xl font-bold">
Ethereum is 10 years old! 🚀
</div>
)
}

return (
<div className="flex items-center justify-center gap-10">
<div
className={cn(
"flex h-20 w-20 flex-col items-center justify-center rounded-2xl border text-center [box-shadow:-2.372px_2.372px_14.234px_1.186px_rgba(52,43,64,0.02),-18.979px_18.979px_14.234px_-3.559px_rgba(52,43,64,0.02),-37.958px_37.958px_28.469px_-7.117px_rgba(52,43,64,0.02),-47.448px_47.448px_47.448px_-14.234px_rgba(88,55,131,0.04)] dark:bg-[#171717]",
className
)}
>
<div className="font-mono text-4xl font-bold text-accent-a">
{timeLeft.days}
</div>
<div className="font-mono text-xs text-accent-a">days</div>
</div>
<div
className={cn(
"flex h-20 w-20 flex-col items-center justify-center rounded-2xl border text-center [box-shadow:-2.372px_2.372px_14.234px_1.186px_rgba(52,43,64,0.02),-18.979px_18.979px_14.234px_-3.559px_rgba(52,43,64,0.02),-37.958px_37.958px_28.469px_-7.117px_rgba(52,43,64,0.02),-47.448px_47.448px_47.448px_-14.234px_rgba(88,55,131,0.04)] dark:bg-[#171717]",
className
)}
>
<div className="font-mono text-4xl font-bold text-accent-a">
{timeLeft.hours}
</div>
<div className="font-mono text-xs text-accent-a">hours</div>
</div>
<div
className={cn(
"flex h-20 w-20 flex-col items-center justify-center rounded-2xl border text-center [box-shadow:-2.372px_2.372px_14.234px_1.186px_rgba(52,43,64,0.02),-18.979px_18.979px_14.234px_-3.559px_rgba(52,43,64,0.02),-37.958px_37.958px_28.469px_-7.117px_rgba(52,43,64,0.02),-47.448px_47.448px_47.448px_-14.234px_rgba(88,55,131,0.04)] dark:bg-[#171717]",
className
)}
>
<div className="font-mono text-4xl font-bold text-accent-a">
{timeLeft.minutes}
</div>
<div className="font-mono text-xs text-accent-a">minutes</div>
</div>
<div
className={cn(
"hidden h-20 w-20 flex-col items-center justify-center rounded-2xl border text-center [box-shadow:-2.372px_2.372px_14.234px_1.186px_rgba(52,43,64,0.02),-18.979px_18.979px_14.234px_-3.559px_rgba(52,43,64,0.02),-37.958px_37.958px_28.469px_-7.117px_rgba(52,43,64,0.02),-47.448px_47.448px_47.448px_-14.234px_rgba(88,55,131,0.04)] lg:flex dark:bg-[#171717]",
className
)}
>
<div className="font-mono text-4xl font-bold text-accent-a">
{timeLeft.seconds}
</div>
<div className="font-mono text-xs text-accent-a">seconds</div>
</div>
</div>
)
}

export default CountDown
44 changes: 44 additions & 0 deletions app/[locale]/10years/_components/InnovationSwiper.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"use client"

import { Image } from "@/components/Image"
import {
Swiper,
SwiperContainer,
SwiperNavigation,
SwiperSlide,
} from "@/components/ui/swiper"

import { innovationCards } from "./data"

export default function InnovationSwiper() {
return (
<div className="w-[100%]">
<SwiperContainer className="mx-auto w-full max-w-[550px] xl:max-w-[700px]">
<Swiper className="mx-auto w-full max-w-[550px] xl:max-w-[700px]">
{innovationCards.map((card, index) => (
<SwiperSlide
key={index}
className="mx-auto flex w-full max-w-[550px] flex-col gap-4 rounded-lg bg-card-gradient-secondary p-4 sm:p-6 xl:max-w-[700px]"
>
<Image
src={card.image}
alt={card.title}
className="mx-auto my-4 h-auto max-w-full"
/>
<div>
<h3 className="mb-4">{card.title}</h3>
<p className="text-body-secondary mb-4">{card.date}</p>
</div>
{card.description.map((description, index) => (
<p key={index} className="mb-4">
{description}
</p>
))}
</SwiperSlide>
))}
<SwiperNavigation />
</Swiper>
</SwiperContainer>
</div>
)
}
Loading