Skip to content

Commit 03180a1

Browse files
authored
Merge pull request #15630 from ethereum/speed-run
feat: elevate speedrunethereum, add quickstarts
2 parents e9897a6 + f4b41b1 commit 03180a1

File tree

3 files changed

+110
-27
lines changed

3 files changed

+110
-27
lines changed

app/[locale]/developers/page.tsx

Lines changed: 84 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ import { Lang } from "@/lib/types"
55
import { ChildOnlyProp } from "@/lib/types"
66

77
import CalloutSSR from "@/components/CalloutSSR"
8-
import Card from "@/components/Card"
8+
import OldCard from "@/components/Card"
9+
import { CopyButton } from "@/components/CopyToClipboard"
910
import FeedbackCard from "@/components/FeedbackCard"
1011
import HubHero from "@/components/Hero/HubHero"
1112
import { Image } from "@/components/Image"
1213
import MainArticle from "@/components/MainArticle"
1314
import { ButtonLink } from "@/components/ui/buttons/Button"
14-
import { Stack, VStack } from "@/components/ui/flex"
15+
import { Card } from "@/components/ui/card"
16+
import { VStack } from "@/components/ui/flex"
17+
import Link from "@/components/ui/Link"
1518
import InlineLink from "@/components/ui/Link"
1619

1720
import { getMetadata } from "@/lib/utils/metadata"
@@ -80,7 +83,7 @@ const DevelopersPage = async ({
8083
},
8184
{
8285
emoji: ":woman_scientist:",
83-
title: t("page-developers-start"),
86+
title: t("page-developers-resources"),
8487
description: t("page-developers-start-desc"),
8588
url: "/developers/learning-tools/",
8689
button: t("page-developers-play-code"),
@@ -104,43 +107,98 @@ const DevelopersPage = async ({
104107
title={tCommon("developers")}
105108
description={t("page-developers-subtitle")}
106109
/>
110+
107111
<MainArticle className="w-full space-y-12 px-8 py-4">
108112
<h2 className="-mb-4 mt-12">{t("page-developers-get-started")}</h2>
109113

114+
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 md:gap-8 xl:mb-12">
115+
<div
116+
className="relative h-[450px]"
117+
data-label="speedrunethereum-banner"
118+
>
119+
<Image
120+
className="pointer-events-none absolute -z-[1] h-full rounded-t-2xl"
121+
src={SpeedRunEthereumImage}
122+
alt="SpeedRunEthereum banner"
123+
sizes="100vw"
124+
style={{ width: "100vw", objectFit: "cover" }}
125+
/>
126+
<div className="z-[1] space-y-4 break-words px-6 py-10 md:space-y-6 lg:p-12">
127+
<h3>{t("page-developers-start")}</h3>
128+
<p>{t("page-developers-speedrunethereum-description")}</p>
129+
<ButtonLink
130+
href="https://speedrunethereum.com/"
131+
size="lg"
132+
className="mt-4"
133+
customEventOptions={{
134+
eventCategory: "top_boxes",
135+
eventAction: "click",
136+
eventName: "speedrun",
137+
}}
138+
>
139+
{t("page-developers-speedrunethereum-link")}
140+
</ButtonLink>
141+
</div>
142+
</div>
143+
144+
<Card className="!space-y-8 break-words border border-accent-c/20 bg-gradient-to-t from-accent-c/15 to-accent-c/5 px-6 py-10 md:space-y-6 lg:p-12">
145+
<h3>{t("page-developers-jump-right-in-title")}</h3>
146+
<div className="space-y-6">
147+
<div className="space-y-1">
148+
<p className="font-bold">Scaffold-ETH 2</p>
149+
<p className="text-sm text-body-medium">
150+
{t("page-developers-quickstart-scaffold-subtext")}{" "}
151+
<Link href="https://docs.scaffoldeth.io/">
152+
{t("page-developers-quickstart-scaffold-docs")}
153+
</Link>
154+
</p>
155+
<div className="flex items-center rounded-lg border bg-background px-3 py-1">
156+
<span className="flex-1 font-mono text-sm">
157+
npx create-eth@latest
158+
</span>
159+
<CopyButton
160+
message="npx create-eth@latest"
161+
size="sm"
162+
customEventOptions={{
163+
eventCategory: "top_boxes",
164+
eventAction: "click",
165+
eventName: "scaffold",
166+
}}
167+
/>
168+
</div>
169+
</div>
170+
</div>
171+
172+
<div>
173+
<p className="mb-2 font-bold">Need to learn the language?</p>
174+
<Link
175+
href="https://docs.soliditylang.org/en/latest/"
176+
customEventOptions={{
177+
eventCategory: "top_boxes",
178+
eventAction: "click",
179+
eventName: "solidity",
180+
}}
181+
>
182+
{t("page-developers-solidity-docs")}
183+
</Link>
184+
</div>
185+
</Card>
186+
</div>
187+
110188
<div className="-mx-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4">
111189
{paths.map((path, idx) => (
112-
<Card
190+
<OldCard
113191
className={`m-4 p-6 shadow-[0px_1px_3px_rgba(0,0,0,0.1)] transition-transform duration-100 hover:scale-105 hover:rounded hover:bg-background-highlight hover:shadow-[0px_8px_17px_rgba(0,0,0,0.15)] dark:shadow-[0px_1px_3px_rgba(60,60,60,0.1)]`}
114192
key={idx}
115193
emoji={path.emoji}
116194
title={path.title}
117195
description={path.description}
118196
>
119197
<ButtonLink href={path.url}>{path.button}</ButtonLink>
120-
</Card>
198+
</OldCard>
121199
))}
122200
</div>
123201

124-
<div className="relative" data-label="speedrunethereum-banner">
125-
<Image
126-
className="h-[450px] xl:h-auto"
127-
src={SpeedRunEthereumImage}
128-
alt="SpeedRunEthereum banner"
129-
sizes="100vw"
130-
style={{
131-
width: "100vw",
132-
objectFit: "cover",
133-
objectPosition: "20%",
134-
}}
135-
/>
136-
<Stack className="absolute top-0 max-w-lg items-start space-y-3 break-words p-6 md:top-12 md:ms-8 md:space-y-4 lg:p-8 xl:max-w-xl">
137-
<h2>{t("page-developers-speedrunethereum-title")}</h2>
138-
<ButtonLink href="https://speedrunethereum.com/">
139-
{t("page-developers-speedrunethereum-link")}
140-
</ButtonLink>
141-
</Stack>
142-
</div>
143-
144202
<div className="flex w-full flex-col items-start justify-between lg:flex-row lg:items-center">
145203
<IntroColumn>
146204
<H2>{t("page-developers-about")}</H2>
@@ -170,6 +228,7 @@ const DevelopersPage = async ({
170228
</CalloutSSR>
171229
</div>
172230
</MainArticle>
231+
173232
<div className="mt-8 w-full border-t bg-background-highlight px-0 py-16 shadow-table-item-box">
174233
<div className="w-full scroll-mt-24 px-8 py-4">
175234
<H2>{t("page-developers-explore-documentation")}</H2>

src/components/CopyToClipboard.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
"use client"
22

3+
import { BsCopy } from "react-icons/bs"
4+
import { FaRegCheckCircle } from "react-icons/fa"
5+
36
import { cn } from "@/lib/utils/cn"
47

8+
import { Button, type ButtonProps } from "./ui/buttons/Button"
9+
510
import { useClipboard } from "@/hooks/useClipboard"
611

712
export type CopyToClipboardProps = {
@@ -27,4 +32,17 @@ const CopyToClipboard = ({
2732
)
2833
}
2934

35+
type CopyButtonProps = ButtonProps & {
36+
message: string
37+
}
38+
39+
export const CopyButton = ({ message, ...props }: CopyButtonProps) => {
40+
const { onCopy, hasCopied } = useClipboard({ timeout: 1500 })
41+
return (
42+
<Button variant="ghost" onClick={() => onCopy(message)} {...props}>
43+
{hasCopied ? <FaRegCheckCircle /> : <BsCopy />}
44+
</Button>
45+
)
46+
}
47+
3048
export default CopyToClipboard

src/intl/en/page-developers-index.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"page-developers-fundamentals": "Fundamentals",
2929
"page-developers-gas-desc": "Ether needed to power transactions",
3030
"page-developers-gas-link": "Gas",
31-
"page-developers-get-started": "How would you like to get started?",
31+
"page-developers-get-started": "Experiment with Ethereum",
3232
"page-developers-improve-ethereum": "Help us make ethereum.org better",
3333
"page-developers-improve-ethereum-desc": "Like ethereum.org, these docs are a community effort. Create a PR if you see mistakes, room for improvement, or new opportunities to help Ethereum developers.",
3434
"page-developers-into-eth-desc": "An introduction to blockchain and Ethereum",
@@ -41,6 +41,7 @@
4141
"page-developers-intro-stack-desc": "An introduction to the Ethereum stack",
4242
"page-developers-js-libraries-desc": "Using JavaScript to interact with smart contracts",
4343
"page-developers-js-libraries-link": "JavaScript libraries",
44+
"page-developers-jump-right-in-title": "Quickstart your idea",
4445
"page-developers-language-desc": "Using Ethereum with familiar languages",
4546
"page-developers-languages": "Programming languages",
4647
"page-developers-learn": "Learn Ethereum development",
@@ -62,7 +63,10 @@
6263
"page-developers-oracle-desc": "Getting offchain data into your smart contracts",
6364
"page-developers-oracles-link": "Oracles",
6465
"page-developers-play-code": "Play with code",
66+
"page-developers-quickstart-scaffold-subtext": "Bootstrap your Ethereum app stack in seconds.",
67+
"page-developers-quickstart-scaffold-docs": "Read Scaffold-ETH 2 docs",
6568
"page-developers-read-docs": "Read the docs",
69+
"page-developers-resources": "Resources",
6670
"page-developers-scaling-desc": "Solutions for faster transactions",
6771
"page-developers-scaling-link": "Scaling",
6872
"page-developers-smart-contract-security-desc": "Security measures to consider during development of smart contracts",
@@ -71,10 +75,12 @@
7175
"page-developers-setup-desc": "Get your stack ready for building by configuring a development environment.",
7276
"page-developers-smart-contracts-desc": "The logic behind dapps – self-executing agreements",
7377
"page-developers-smart-contracts-link": "Smart contracts",
78+
"page-developers-solidity-docs": "Read the Solidity docs",
7479
"page-developers-speedrunethereum-title": "Learn all the most important concepts by building on Ethereum",
80+
"page-developers-speedrunethereum-description": "Hands-on challenges such as building NFTs, DEXs in a step-by-step tutorial series.",
7581
"page-developers-speedrunethereum-link": "SpeedRun Ethereum",
7682
"page-developers-stack": "The stack",
77-
"page-developers-start": "Start experimenting",
83+
"page-developers-start": "Start with guided challenges",
7884
"page-developers-start-desc": "Want to experiment first, ask questions later?",
7985
"page-developers-storage-desc": "How to handle dapp storage",
8086
"page-developers-storage-link": "Storage",

0 commit comments

Comments
 (0)