Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
f974c63
remove LazyLoadComponent
pettinarip Jul 14, 2025
92e9c46
implement IntersectionObserverReveal component and integrate it with …
pettinarip Jul 14, 2025
7674835
chore(docs): Fix Typo in src/data/audio/smart-contracts/script.md
haouvw Jul 21, 2025
2e0e912
fix: highlight all browser language preferences
wackerow Aug 1, 2025
d60693d
feat: ContentHero design update
wackerow Aug 8, 2025
df92bf1
feat-wip: what is ethereum revamp
wackerow Aug 9, 2025
ecc6eaf
wip: fill out toc, headers, images structure
wackerow Aug 9, 2025
1184612
feat: create IconBox
wackerow Aug 9, 2025
b1ecf63
feat: add content
wackerow Aug 10, 2025
ec27052
feat: what-is-ethereum iteration
wackerow Aug 10, 2025
73e456a
feat: iterate content
wackerow Aug 10, 2025
417e6d4
feat: content iteration
wackerow Aug 10, 2025
834752c
patch: layout styles
wackerow Aug 11, 2025
318d316
wip: content addition, component refactoring
wackerow Aug 11, 2025
1490d15
feat: add selectable attributes to ToC elements
wackerow Aug 12, 2025
f331ab8
refactor: reuse existing ToC; customize styling
wackerow Aug 12, 2025
8a42f54
fix: item number alignment
wackerow Aug 12, 2025
d53ff41
feat: add "how to start" content boxes
wackerow Aug 12, 2025
32ce9f6
setup /roadmap for translation
corwintines Aug 12, 2025
8f92ced
Merge branch 'dev' into what-is-ethereum
wackerow Aug 12, 2025
75b9e19
fix: heading element ordering
wackerow Aug 12, 2025
2e66f02
cleanup
corwintines Aug 12, 2025
0df366a
i18n: extract strings for intl
wackerow Aug 12, 2025
253ee42
fix: links, metadata strings
wackerow Aug 12, 2025
2f32cbc
i18n-refactor: replace energy-consumption strings
wackerow Aug 12, 2025
e0473a1
Merge branch 'dev' into what-is-ethereum
wackerow Aug 14, 2025
b8b404e
fix: ToC active/hover styling
wackerow Aug 14, 2025
bfacdfa
patch: adjust mobile section scroll-mt
wackerow Aug 14, 2025
f2b7c08
temp: hide not-yet-available links
wackerow Aug 14, 2025
36de227
/10year translations
corwintines Aug 14, 2025
dc57d24
Merge branch 'dev' into content-hero
wackerow Aug 14, 2025
b6fa2ed
Add Project Specific section with Arbitrum and Aztec grants
wearedood Aug 15, 2025
dcca51c
Add ETHDimsum meetup to community meetups list
wearedood Aug 15, 2025
3f7da68
docs: React's updated link
mdqst Aug 15, 2025
7da12dd
fix: use semantic naming for links
wackerow Aug 15, 2025
98691da
Update Crowdin translation progress
actions-user Aug 15, 2025
d743857
Merge pull request #16077 from ethereum/automated-update-20250815162854
wackerow Aug 17, 2025
f9c79fb
patch: typos
wackerow Aug 17, 2025
072fba7
patch: html syntax
wackerow Aug 17, 2025
6d4566a
Merge pull request #16068 from ethereum/10yearTranslation
wackerow Aug 17, 2025
cfb13b8
Update ab-testing.md
consensuslayer Aug 17, 2025
867e812
Update api-keys.md
consensuslayer Aug 17, 2025
882a99a
Update best-practices.md
consensuslayer Aug 17, 2025
c308355
Update event-tracking.md
consensuslayer Aug 17, 2025
3e6e183
Update review-process.md
consensuslayer Aug 17, 2025
4068071
Update index.md
consensuslayer Aug 17, 2025
dfaf6ac
Update index.md
consensuslayer Aug 17, 2025
794b896
Update index.md
consensuslayer Aug 17, 2025
99a0ba3
Update index.md
consensuslayer Aug 17, 2025
fa8d82a
Update index.md
consensuslayer Aug 17, 2025
83b6243
Update index.md
consensuslayer Aug 17, 2025
cb5687e
Merge pull request #16076 from mdqst/patch-7
corwintines Aug 18, 2025
629f7dd
cleanup
corwintines Aug 18, 2025
3a6bb92
Merge pull request #16081 from consensuslayer/docs-improvements
corwintines Aug 18, 2025
a41c1f4
cleanup
corwintines Aug 18, 2025
a349f7d
Merge pull request #16073 from wearedood/dev
corwintines Aug 18, 2025
672f079
setup /apps page and components for translation
corwintines Aug 19, 2025
9120b09
setup /app/categories/{category} for translation
corwintines Aug 19, 2025
20c879e
setup /apps/{application} for translation
corwintines Aug 19, 2025
1c18360
Merge pull request #16089 from ethereum/staging
corwintines Aug 19, 2025
1f283ef
fix broken links
corwintines Aug 19, 2025
070f803
remove: Pirate Nation from apps list
claude[bot] Aug 20, 2025
f340eee
Merge pull request #16093 from ethereum/claude/issue-16092-20250820-0823
corwintines Aug 20, 2025
b00ec38
Merge pull request #16099 from ethereum/staging
corwintines Aug 20, 2025
3549209
Merge branch 'dev' into seo
corwintines Aug 20, 2025
3b2798d
fix issue rendering on bug-bounty page that pulls images from github
corwintines Aug 21, 2025
f3d72dc
fix crowdin not rendering avatars on TranslationLeaderboard
corwintines Aug 21, 2025
e45dfa2
fixing crowdin avatar url
corwintines Aug 21, 2025
22b1111
resolve duplicate meta descriptions
corwintines Aug 21, 2025
0390f16
fix broken internal links
corwintines Aug 21, 2025
f5198c4
fix 11 links couldnt be crawled (incorrect URL formats)
corwintines Aug 21, 2025
5fb04ef
fix issues with duplicate title tags
corwintines Aug 21, 2025
4c5b1c0
fix: use lucide icon for arrow right
wackerow Aug 21, 2025
40935cd
refactor: extract reusable intl string elements
wackerow Aug 21, 2025
6610a93
Update execution-bounty-hunters.json
fredrik0x Aug 21, 2025
bcf34b2
Update execution-bounty-hunters.json
fredrik0x Aug 21, 2025
76b5e9a
Update execution-bounty-hunters.json
fredrik0x Aug 21, 2025
cf2ffb1
fix temporary redirect warnings
corwintines Aug 22, 2025
6a54d06
Merge branch 'dev' into setupAppsTranslation
pettinarip Aug 22, 2025
b8a178b
Merge pull request #16090 from ethereum/setupAppsTranslation
pettinarip Aug 22, 2025
31ec98d
fix hydration issue in nav
pettinarip Aug 19, 2025
c57515c
Update Crowdin translation progress
actions-user Aug 22, 2025
904fc74
chore: conclude test; use original
wackerow Aug 22, 2025
dd662a2
feat: add "light" variant to BigNumbers
wackerow Aug 22, 2025
594ea19
semrush seo duplicate H1 and title tags
corwintines Aug 22, 2025
81e488d
feat: init 2025-08-why-dev A/B test
wackerow Aug 23, 2025
778aea7
refactor: styles to "beginner" ToC variant
wackerow Aug 23, 2025
28f00fd
Update Crowdin contributors
actions-user Aug 24, 2025
e25d423
seo: use descriptive link label
wackerow Aug 24, 2025
a4d50a3
patch: lastUpdated and key names
wackerow Aug 24, 2025
7992f86
Merge pull request #15819 from ethereum/optimize-values-marquee
wackerow Aug 24, 2025
1772f46
refactor: simplify boolean expression
wackerow Aug 24, 2025
1911f8c
Merge pull request #16086 from ethereum/fix-nav-hydration
wackerow Aug 24, 2025
2d07570
adjust tracesSampleRate
pettinarip Aug 25, 2025
c673633
init sentry only in production
pettinarip Aug 25, 2025
888d6d6
Merge pull request #16122 from ethereum/patch-homepage-seo
corwintines Aug 25, 2025
248e0c4
add ecosystem projects translatathon
corwintines Aug 25, 2025
2caf879
remove line
corwintines Aug 25, 2025
069f4fa
Merge pull request #16126 from ethereum/hotfixTranslatathonProjects
corwintines Aug 25, 2025
2cc8eae
Merge pull request #16116 from ethereum/end-StablecoinApps-test
corwintines Aug 25, 2025
fb5013e
Update docs/translation-program.md
corwintines Aug 25, 2025
cfcd036
Add new bounty hunter entry for Mingfei Zhang
fredrik0x Aug 25, 2025
9144acd
patch: remove mark
wackerow Aug 25, 2025
7ac01f8
Update index.md
BoluwatifeInferno Aug 25, 2025
c0169d8
Merge pull request #16130 from BoluwatifeInferno/patch-2
corwintines Aug 25, 2025
cb379a3
shorten title
corwintines Aug 25, 2025
d9aa76c
seo: https pages lead to http page
corwintines Aug 25, 2025
99eaf9c
refactor LinkOverlay to use BaseLink instead of a
corwintines Aug 26, 2025
efd7029
Merge branch 'dev' into content-hero
wackerow Aug 26, 2025
62dc632
Merge branch 'content-hero' into what-is-ethereum
wackerow Aug 26, 2025
3b9b43c
Merge pull request #16100 from ethereum/seo
wackerow Aug 26, 2025
ec82a73
Merge pull request #15894 from haouvw/dev
wackerow Aug 26, 2025
e451875
docs: update README.md [skip ci]
allcontributors[bot] Aug 26, 2025
ab69954
docs: update .all-contributorsrc [skip ci]
allcontributors[bot] Aug 26, 2025
51a8f98
ethereum -> Ethereum
corwintines Aug 26, 2025
dcb2b99
Merge pull request #16132 from ethereum/ethereumToEthereumEnglish
wackerow Aug 26, 2025
16b0b80
Merge pull request #16131 from ethereum/all-contributors/add-haouvw
wackerow Aug 26, 2025
f86ffdf
Merge pull request #16125 from ethereum/sentry-optimize
wackerow Aug 26, 2025
2ac1134
Merge branch 'dev' into setupRoadmapTranslation
wackerow Aug 26, 2025
ba1ffc7
Update public/content/contributing/translation-program/faq/index.md
corwintines Aug 26, 2025
4cbafd7
Merge pull request #16117 from ethereum/2025-08-why-dev
corwintines Aug 26, 2025
87ac0ae
Merge pull request #16058 from ethereum/a11y-fix
corwintines Aug 26, 2025
4d1fc6d
Merge pull request #16000 from ethereum/navigator-languages
corwintines Aug 26, 2025
71c881d
Merge pull request #16032 from ethereum/content-hero
corwintines Aug 26, 2025
66d1609
patch: ButtonLink hrefs
wackerow Aug 26, 2025
e324262
Merge pull request #16110 from ethereum/seoWarnings
wackerow Aug 27, 2025
5b481dd
refactor: use Translation transform, a -> Link
wackerow Aug 27, 2025
b012211
Merge branch 'dev' into setupRoadmapTranslation
wackerow Aug 27, 2025
5cbf335
Merge branch 'dev' into what-is-ethereum
corwintines Aug 27, 2025
89bea65
Merge pull request #16057 from ethereum/setupRoadmapTranslation
wackerow Aug 27, 2025
bb56ccd
Merge pull request #16042 from ethereum/what-is-ethereum
corwintines Aug 27, 2025
8ff55d3
Merge pull request #16127 from ethereum/fredrik0x-patch-2
corwintines Aug 27, 2025
933722a
Merge branch 'dev' into fredrik0x-patch-1
corwintines Aug 27, 2025
c946b78
Merge pull request #16102 from ethereum/fredrik0x-patch-1
corwintines Aug 27, 2025
f074fb3
improve breadcrumb descriptions by adding wrapper element ids
pettinarip Aug 27, 2025
361a867
add data-testids to interactive elements
pettinarip Aug 27, 2025
1cc219b
use enable option instead of if condition
pettinarip Aug 27, 2025
e661563
Merge pull request #16138 from ethereum/sentry-breadcrumbs
corwintines Aug 27, 2025
13df425
Merge pull request #16114 from ethereum/automated-update-20250822162847
corwintines Aug 27, 2025
347a037
Merge pull request #16119 from ethereum/automated-update-20250824001522
corwintines Aug 27, 2025
113c42e
v10.11.0
corwintines Aug 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 10 additions & 1 deletion .all-contributorsrc
Original file line number Diff line number Diff line change
Expand Up @@ -11267,7 +11267,7 @@
"login": "konopkja",
"name": "Jakub",
"avatar_url": "https://avatars.githubusercontent.com/u/100724231?v=4",
"profile": "http://ethereum.org",
"profile": "https://ethereum.org",
"contributions": [
"doc",
"content",
Expand Down Expand Up @@ -13115,6 +13115,15 @@
"contributions": [
"maintenance"
]
},
{
"login": "haouvw",
"name": "haouvw",
"avatar_url": "https://avatars.githubusercontent.com/u/171421479?v=4",
"profile": "https://github.com/haouvw",
"contributions": [
"bug"
]
}
],
"contributorsPerLine": 7,
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1778,7 +1778,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/enjoyooor"><img src="https://avatars.githubusercontent.com/u/147568088?v=4?s=100" width="100px;" alt="enjoyooor"/><br /><sub><b>enjoyooor</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=enjoyooor" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://ethereum.org"><img src="https://avatars.githubusercontent.com/u/100724231?v=4?s=100" width="100px;" alt="Jakub"/><br /><sub><b>Jakub</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=konopkja" title="Documentation">📖</a> <a href="#content-konopkja" title="Content">🖋</a> <a href="#design-konopkja" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ethereum.org"><img src="https://avatars.githubusercontent.com/u/100724231?v=4?s=100" width="100px;" alt="Jakub"/><br /><sub><b>Jakub</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=konopkja" title="Documentation">📖</a> <a href="#content-konopkja" title="Content">🖋</a> <a href="#design-konopkja" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.ymusleh.com"><img src="https://avatars.githubusercontent.com/u/6829768?v=4?s=100" width="100px;" alt="Yusuf Musleh"/><br /><sub><b>Yusuf Musleh</b></sub></a><br /><a href="#content-yusuf-musleh" title="Content">🖋</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/acceptacross"><img src="https://avatars.githubusercontent.com/u/150119116?v=4?s=100" width="100px;" alt="acceptacross"/><br /><sub><b>acceptacross</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=acceptacross" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pdelagrave"><img src="https://avatars.githubusercontent.com/u/17990895?v=4?s=100" width="100px;" alt="Pierre Delagrave"/><br /><sub><b>Pierre Delagrave</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Apdelagrave" title="Bug reports">🐛</a></td>
Expand Down Expand Up @@ -2039,6 +2039,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="http://abel.fr"><img src="https://avatars.githubusercontent.com/u/5216201?v=4?s=100" width="100px;" alt="Abel Derderian"/><br /><sub><b>Abel Derderian</b></sub></a><br /><a href="#maintenance-abeldotam" title="Maintenance">🚧</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/haouvw"><img src="https://avatars.githubusercontent.com/u/171421479?v=4?s=100" width="100px;" alt="haouvw"/><br /><sub><b>haouvw</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Ahaouvw" title="Bug reports">🐛</a></td>
</tr>
</tbody>
</table>
Expand Down
17 changes: 11 additions & 6 deletions app/[locale]/10years/_components/NFTMintCard/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { useTranslations } from "next-intl"

import { Alert, AlertContent, AlertTitle } from "@/components/ui/alert"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"

Expand All @@ -10,6 +12,8 @@ interface NFTMintCardProps {
}

const NFTMintCard = ({ className }: NFTMintCardProps) => {
const t = useTranslations("page-10-year-anniversary")

return (
<Card
className={cn(
Expand All @@ -25,7 +29,7 @@ const NFTMintCard = ({ className }: NFTMintCardProps) => {
<video
className="pointer-events-none h-full w-full select-none rounded-full object-cover"
src="/videos/10y-video.mp4"
aria-label="10th anniversary video"
aria-label={t("page-10-year-video-aria-label")}
autoPlay
loop
muted
Expand All @@ -46,13 +50,14 @@ const NFTMintCard = ({ className }: NFTMintCardProps) => {
/>
</div>

<CardTitle className="text-center">Mint the moment</CardTitle>
<CardTitle className="text-center">
{t("page-10-year-mint-card-title")}
</CardTitle>
</CardHeader>

<CardContent className="space-y-6 p-6 text-center">
<p className="text-body-medium">
Celebrate a decade of decentralization with a free, limited-time 10th
anniversary NFT. Mint yours before time runs out.
{t("page-10-year-mint-card-description")}
</p>

<Alert
Expand All @@ -61,10 +66,10 @@ const NFTMintCard = ({ className }: NFTMintCardProps) => {
>
<AlertContent>
<AlertTitle className="!text-primary">
The claim period has ended
{t("page-10-year-mint-card-ended-title")}
</AlertTitle>
<p className="text-primary">
Thank you all for joining the celebration
{t("page-10-year-mint-card-ended-description")}
</p>
</AlertContent>
</Alert>
Expand Down
42 changes: 17 additions & 25 deletions app/[locale]/10years/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,14 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
<div className="w-full px-4 py-8 md:px-8">
<div className="flex flex-col items-center gap-4 rounded-4xl bg-radial-a px-4 pt-8 lg:px-14 lg:pt-14">
<div className="flex flex-col gap-4 text-center">
<h2 className="text-4xl font-black">Join the livestream</h2>
<h2 className="text-4xl font-black">
{t("page-10-year-livestream-title")}
</h2>
</div>
<YouTube
className="w-full max-w-none"
id="igPIMF1p5Bo"
title="Livestream 10 years of Ethereum"
title={t("page-10-year-livestream-video-title")}
poster="maxresdefault"
/>
</div>
Expand Down Expand Up @@ -284,37 +286,27 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
<div className="flex flex-col gap-12 px-8 pb-24 pt-12 text-body-inverse sm:px-16 md:flex-row dark:text-body">
<div className="flex flex-1 flex-col gap-8">
<p>
To commemorate this historic milestone, we&apos;re introducing the{" "}
<strong>Ethereum Torch NFT</strong> a NFT that embodies the spirit
of decentralization and community that has defined Ethereum&apos;s
first decade.
<Translation
id="page-10-year-torch-nft-intro"
ns="page-10-year-anniversary"
/>
</p>

<p>
Like a ceremonial flame that travels from community to community,
the Ethereum Torch will journey across the global Ethereum
ecosystem. This special NFT will be passed from wallet to wallet
among carefully selected community members, developers, and
builders who have shaped Ethereum&apos;s story over the past 10
years.
</p>
<p>{t("page-10-year-torch-nft-description")}</p>
</div>
<div className="flex flex-1 flex-col gap-8">
<div>
<h3 className="text-lg font-bold">One-of-a-kind:</h3>
<p>
Only one Ethereum Torch NFT exists, making each holder a
temporary guardian of Ethereum&apos;s legacy
</p>
<h3 className="text-lg font-bold">
{t("page-10-year-torch-one-of-kind-title")}
</h3>
<p>{t("page-10-year-torch-one-of-kind-description")}</p>
</div>

<div>
<h3 className="text-lg font-bold">Time-limited custody:</h3>
<p>
Each holder keeps the torch for 24hours before passing it to the
next guardian. On July 30 this NFT wil be burned to celebrate
the anniversary.
</p>
<h3 className="text-lg font-bold">
{t("page-10-year-torch-time-limited-title")}
</h3>
<p>{t("page-10-year-torch-time-limited-description")}</p>
</div>
</div>
</div>
Expand Down
47 changes: 32 additions & 15 deletions app/[locale]/apps/[application]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { pick } from "lodash"
import { notFound } from "next/navigation"
import { getMessages, setRequestLocale } from "next-intl/server"
import {
getMessages,
getTranslations,
setRequestLocale,
} from "next-intl/server"

import { ChainName } from "@/lib/types"

Expand Down Expand Up @@ -58,6 +62,9 @@ const Page = async ({
const { locale, application } = await params
setRequestLocale(locale)

// Get translations
const t = await getTranslations({ locale, namespace: "page-apps" })

// Get i18n messages
const allMessages = await getMessages({ locale })
const requiredNamespaces = getRequiredNamespacesForPage("/apps")
Expand Down Expand Up @@ -115,9 +122,9 @@ const Page = async ({
const diffInMs = now.getTime() - date.getTime()
const diffInDays = Math.floor(diffInMs / (1000 * 60 * 60 * 24))

if (diffInDays === 0) return "Today"
if (diffInDays === 1) return "1 day ago"
return `${diffInDays} days ago`
if (diffInDays === 0) return t("page-apps-today")
if (diffInDays === 1) return t("page-apps-one-day-ago")
return t("page-apps-days-ago", { days: diffInDays })
}

return (
Expand Down Expand Up @@ -194,7 +201,7 @@ const Page = async ({
eventName: "visit",
}}
>
Visit {app.name}
{t("page-apps-visit-app", { appName: app.name })}
</ButtonLink>
<div className="flex flex-row justify-between gap-4">
<div className="flex h-fit flex-row flex-wrap gap-4">
Expand Down Expand Up @@ -250,13 +257,15 @@ const Page = async ({
{nextApp && (
<LinkBox className="group flex flex-row items-center rounded-lg hover:bg-background-highlight sm:hidden">
<div className="mr-2 flex flex-col text-right">
<p className="text-sm text-gray-500">See next</p>
<p className="text-sm text-gray-500">
{t("page-apps-see-next")}
</p>
<p className="text-primary group-hover:text-primary-hover">
{nextApp.name}
</p>
<LinkOverlay
href={`/apps/${slugify(nextApp.name)}`}
matomoEvent={{
customEventOptions={{
eventCategory: "detail",
eventAction: `app name ${app.name}`,
eventName: "see_next",
Expand All @@ -275,13 +284,15 @@ const Page = async ({
{nextApp && (
<LinkBox className="group hidden flex-row items-center rounded-lg p-3 hover:bg-background-highlight sm:flex">
<div className="mr-2 flex flex-col text-right">
<p className="text-nowrap text-sm text-gray-500">See next</p>
<p className="text-nowrap text-sm text-gray-500">
{t("page-apps-see-next")}
</p>
<p className="text-primary group-hover:text-primary-hover">
{nextApp.name}
</p>
<LinkOverlay
href={`/apps/${slugify(nextApp.name)}`}
matomoEvent={{
customEventOptions={{
eventCategory: "detail",
eventAction: `app name ${app.name}`,
eventName: "see_next",
Expand All @@ -299,25 +310,31 @@ const Page = async ({
<div className="grid grid-cols-1 grid-rows-[auto_1fr] gap-10 bg-background-highlight px-4 py-10 md:grid-cols-[minmax(0,1fr)_auto] md:px-8">
<p className="max-w-3xl">{app.description}</p>
<div className="flex h-fit w-full flex-col gap-4 rounded-2xl border bg-background p-8 md:row-span-2 md:w-44">
<h3 className="text-lg">Info</h3>
<h3 className="text-lg">{t("page-apps-info-title")}</h3>
<div>
<p className="text-sm text-body-medium">Founded</p>
<p className="text-sm text-body-medium">
{t("page-apps-info-founded")}
</p>
<p className="text-sm">
{new Date(app.dateOfLaunch).getFullYear()}
</p>
</div>
<div>
<p className="text-sm text-body-medium">Creator</p>
<p className="text-sm text-body-medium">
{t("page-apps-info-creator")}
</p>
<p className="text-sm">{app.parentCompany}</p>
</div>
<div>
<p className="text-sm text-body-medium">Last updated</p>
<p className="text-sm text-body-medium">
{t("page-apps-info-last-updated")}
</p>
<p className="text-sm">{getTimeAgo(app.lastUpdated)}</p>
</div>
</div>
{app.screenshots.length > 0 && (
<div className="flex flex-col gap-4">
<h3 className="text-2xl">Gallery</h3>
<h3 className="text-2xl">{t("page-apps-gallery-title")}</h3>
<ScreenshotSwiper
screenshots={app.screenshots}
appName={app.name}
Expand All @@ -329,7 +346,7 @@ const Page = async ({
{relatedApps.length > 0 && (
<div className="flex flex-col px-4 py-10 md:px-8">
<div className="flex w-full flex-col items-center gap-8 rounded-2xl bg-gradient-to-t from-blue-500/20 from-10% to-blue-500/5 to-90% p-12 px-4 md:px-8">
<h2>More apps like this</h2>
<h2>{t("page-apps-more-apps-like-this")}</h2>
<div className="flex w-full flex-col gap-4 lg:flex-row">
{relatedApps.map((relatedApp) => (
<div
Expand Down
2 changes: 1 addition & 1 deletion app/[locale]/apps/_components/AppCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ const AppCard = ({
<LinkOverlay
href={`/apps/${slugify(app.name)}`}
className="no-underline"
matomoEvent={{
customEventOptions={{
eventCategory: matomoCategory,
eventAction: `${matomoAction}`,
eventName: `app name ${app.name}`,
Expand Down
2 changes: 1 addition & 1 deletion app/[locale]/apps/_components/AppsHighlight.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const AppsHighlight = ({ apps, matomoCategory }: AppsHighlightProps) => {
<LinkOverlay
href={`/apps/${slugify(app.name)}`}
className="no-underline"
matomoEvent={{
customEventOptions={{
eventCategory: matomoCategory,
eventAction: "highlights",
eventName: `app name ${app.name}`,
Expand Down
9 changes: 6 additions & 3 deletions app/[locale]/apps/_components/AppsTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ import { trackCustomEvent } from "@/lib/utils/matomo"

import AppCard from "./AppCard"

import useTranslation from "@/hooks/useTranslation"

const AppsTable = ({ apps }: { apps: AppData[] }) => {
const { t } = useTranslation("page-apps")
const [filterBy, setFilterBy] = useState("All")

const subCategories = useMemo(
Expand All @@ -41,7 +44,7 @@ const AppsTable = ({ apps }: { apps: AppData[] }) => {
<div className="flex flex-col gap-7">
<div className="flex flex-row items-end justify-between border-b pb-2 sm:items-center">
<div className="flex flex-col items-start gap-2 sm:flex-row sm:items-center">
<p className="whitespace-nowrap">Filter by</p>
<p className="whitespace-nowrap">{t("page-apps-filter-by")}</p>
<Select
value={filterBy}
onValueChange={(value) => {
Expand All @@ -61,7 +64,7 @@ const AppsTable = ({ apps }: { apps: AppData[] }) => {
value="All"
className="cursor-pointer hover:bg-primary-low-contrast"
>
All
{t("page-apps-filter-all")}
</SelectItem>
{subCategories.map((subCategory) => (
<SelectItem
Expand All @@ -77,7 +80,7 @@ const AppsTable = ({ apps }: { apps: AppData[] }) => {
</div>
<div>
<p className="text-body-medium">
Showing{" "}
{t("page-apps-showing")}{" "}
<span className="text-body">
(
{filteredApps.length === apps.length
Expand Down
18 changes: 14 additions & 4 deletions app/[locale]/apps/_components/CategoriesNav.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
import { getTranslations } from "next-intl/server"

import TabNav from "@/components/ui/TabNav"

import { slugify } from "@/lib/utils/url"

import { appsCategories } from "@/data/apps/categories"

const CategoriesNav = ({ activeCategory = "" }: { activeCategory: string }) => {
const CategoriesNav = async ({
activeCategory = "",
}: {
activeCategory: string
}) => {
const t = await getTranslations("page-apps")

const items = Object.values(appsCategories).map(
({ name, icon: Icon, slug }) => ({
key: name,
label: name,
key: slug,
label: t(name),
href: `/apps/categories/${slug}`,
icon: <Icon className="h-4 w-4" />,
})
Expand All @@ -15,7 +25,7 @@ const CategoriesNav = ({ activeCategory = "" }: { activeCategory: string }) => {
return (
<TabNav
items={items}
activeKey={activeCategory}
activeKey={slugify(activeCategory)}
customEventOptions={{
eventCategory: "categories_page",
eventAction: "navigation",
Expand Down
Loading
Loading