├── .eslintrc.json ├── .github ├── CODEOWNERS └── workflows │ ├── deploy_preview.yaml │ └── deploy_prod.yaml ├── .gitignore ├── README.md ├── next.config.mjs ├── package.json ├── postcss.config.mjs ├── public ├── accent-banner.png ├── ambassadors │ ├── 0.png │ ├── 1.png │ ├── 2.png │ ├── 3.png │ └── 4.png ├── cs.png ├── favicons │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ └── site.webmanifest ├── hero.png ├── logos │ ├── chainlink.png │ ├── chainstack.png │ ├── defisaver.png │ ├── ens.png │ ├── eth.png │ ├── namespace.png │ ├── near.png │ ├── optimism.png │ └── zksync.png └── web3js.png ├── src ├── app │ ├── favicon.ico │ ├── fonts │ │ ├── NeueMontreal-Light.woff2 │ │ ├── NeueMontreal-Medium.woff2 │ │ └── NeueMontreal-Regular.woff2 │ ├── globals.css │ ├── layout.tsx │ ├── page.tsx │ └── plugins │ │ └── page.tsx ├── components │ ├── Banner.tsx │ ├── Button.tsx │ ├── Footer.tsx │ ├── Navbar.tsx │ ├── PagePadding.tsx │ ├── PluginCard.tsx │ ├── SectionHeading.tsx │ ├── SectionPadding.tsx │ ├── TextDescription.tsx │ ├── TextWithCheckIcon.tsx │ ├── sections │ │ ├── Ambassadors.tsx │ │ ├── CTAWithBg.tsx │ │ ├── Features.tsx │ │ ├── Hero.tsx │ │ ├── LogoCloud.tsx │ │ ├── PluginsList.tsx │ │ ├── PluginsWithWeb3js.tsx │ │ ├── Stats.tsx │ │ ├── Testimonials.tsx │ │ ├── ThreeSteps.tsx │ │ ├── WhyBeAmbassador.tsx │ │ └── YouCan.tsx │ ├── snippets.tsx │ └── urls.ts ├── hooks │ └── usePlugins.ts └── pluginList.ts ├── tailwind.config.ts ├── tsconfig.json └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @AlexeyKrasnoperov -------------------------------------------------------------------------------- /.github/workflows/deploy_preview.yaml: -------------------------------------------------------------------------------- 1 | name: Deploy preview 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - main 7 | 8 | jobs: 9 | build-and-deploy: 10 | concurrency: ci-preview-${{ github.ref }} 11 | 12 | runs-on: ubuntu-latest 13 | 14 | permissions: 15 | contents: read 16 | deployments: write 17 | 18 | steps: 19 | - name: Checkout repository 20 | uses: actions/checkout@v4 21 | 22 | - name: Set up Node.js 23 | uses: actions/setup-node@v4 24 | with: 25 | cache: yarn 26 | node-version: 18 27 | 28 | - run: corepack enable 29 | 30 | - name: Install dependencies 31 | run: yarn 32 | 33 | - name: Build 34 | run: yarn run build 35 | 36 | - name: Publish to Cloudflare Pages 37 | uses: cloudflare/pages-action@1 38 | with: 39 | apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} 40 | accountId: 2238a825c5aca59233eab1f221f7aefb 41 | projectName: web3js-landing 42 | directory: ./build 43 | gitHubToken: ${{ secrets.GITHUB_TOKEN }} 44 | -------------------------------------------------------------------------------- /.github/workflows/deploy_prod.yaml: -------------------------------------------------------------------------------- 1 | name: Deploy production 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build-and-deploy: 10 | concurrency: ci-${{ github.ref }} 11 | 12 | runs-on: ubuntu-latest 13 | 14 | permissions: 15 | pages: write # to deploy to Pages 16 | id-token: write # to verify the deployment originates from an appropriate source 17 | 18 | environment: 19 | name: github-pages 20 | url: ${{ steps.deployment.outputs.page_url }} 21 | 22 | steps: 23 | - name: Checkout repository 24 | uses: actions/checkout@v4 25 | 26 | - name: Set up Node.js 27 | uses: actions/setup-node@v4 28 | with: 29 | cache: yarn 30 | node-version: 18 31 | 32 | - run: corepack enable 33 | 34 | - name: Install dependencies 35 | run: yarn 36 | 37 | - name: Build 38 | run: yarn run build 39 | 40 | - name: Upload artifact 41 | uses: actions/upload-pages-artifact@v3 42 | with: 43 | path: build 44 | 45 | - name: Deploy to GitHub Pages 46 | id: deployment 47 | uses: actions/deploy-pages@v4 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Web3.js Landing Page 2 | 3 | This is the source code for the landing page hosted on web3js.org. 4 | 5 | ## Plugins 6 | If you wanna list plugins in the [plugin registry](https://web3js.org/plugins), please 7 | [add your npm package to the `src/pluginList.ts` file](https://github.com/web3/web3js-landing/edit/main/src/pluginList.ts). 8 | 9 | ## Contributing 10 | 11 | This project is built on create-react-app so to run the development version: 12 | 13 | - install dependencies with `yarn` 14 | - run `yarn run start` and the website should open in your default browser 15 | 16 | For any questions, reach out on [Discord](https://discord.gg/yhHVtK5Wqt) 17 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | output: 'export', 4 | distDir: 'build', 5 | reactStrictMode: true, 6 | }; 7 | 8 | export default nextConfig; 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web3js-website-next", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@headlessui/react": "^2.1.2", 13 | "@heroicons/react": "^2.1.4", 14 | "framer-motion": "^11.2.13", 15 | "next": "14.2.4", 16 | "query-registry": "^2.6.0", 17 | "react": "^18", 18 | "react-code-blocks": "^0.1.6", 19 | "react-dom": "^18", 20 | "react-intersection-observer": "^9.10.3" 21 | }, 22 | "devDependencies": { 23 | "@types/node": "^20", 24 | "@types/react": "^18", 25 | "@types/react-dom": "^18", 26 | "autoprefixer": "^10.4.19", 27 | "eslint": "^8", 28 | "eslint-config-next": "14.2.4", 29 | "postcss": "^8.4.39", 30 | "tailwindcss": "^3.4.4", 31 | "typescript": "^5.3.3" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /public/accent-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/accent-banner.png -------------------------------------------------------------------------------- /public/ambassadors/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/ambassadors/0.png -------------------------------------------------------------------------------- /public/ambassadors/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/ambassadors/1.png -------------------------------------------------------------------------------- /public/ambassadors/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/ambassadors/2.png -------------------------------------------------------------------------------- /public/ambassadors/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/ambassadors/3.png -------------------------------------------------------------------------------- /public/ambassadors/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/ambassadors/4.png -------------------------------------------------------------------------------- /public/cs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/cs.png -------------------------------------------------------------------------------- /public/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/favicons/favicon.ico -------------------------------------------------------------------------------- /public/favicons/site.webmanifest: -------------------------------------------------------------------------------- 1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} -------------------------------------------------------------------------------- /public/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/hero.png -------------------------------------------------------------------------------- /public/logos/chainlink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/chainlink.png -------------------------------------------------------------------------------- /public/logos/chainstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/chainstack.png -------------------------------------------------------------------------------- /public/logos/defisaver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/defisaver.png -------------------------------------------------------------------------------- /public/logos/ens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/ens.png -------------------------------------------------------------------------------- /public/logos/eth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/eth.png -------------------------------------------------------------------------------- /public/logos/namespace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/namespace.png -------------------------------------------------------------------------------- /public/logos/near.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/near.png -------------------------------------------------------------------------------- /public/logos/optimism.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/optimism.png -------------------------------------------------------------------------------- /public/logos/zksync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/logos/zksync.png -------------------------------------------------------------------------------- /public/web3js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/public/web3js.png -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/src/app/favicon.ico -------------------------------------------------------------------------------- /src/app/fonts/NeueMontreal-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/src/app/fonts/NeueMontreal-Light.woff2 -------------------------------------------------------------------------------- /src/app/fonts/NeueMontreal-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/src/app/fonts/NeueMontreal-Medium.woff2 -------------------------------------------------------------------------------- /src/app/fonts/NeueMontreal-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3/web3js-landing/37f2932b9264d39cc3de3fb50d779ad5692558d9/src/app/fonts/NeueMontreal-Regular.woff2 -------------------------------------------------------------------------------- /src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | } 10 | 11 | @media (prefers-color-scheme: dark) { 12 | :root { 13 | --foreground-rgb: 255, 255, 255; 14 | --background-start-rgb: 0, 0, 0; 15 | --background-end-rgb: 0, 0, 0; 16 | } 17 | } 18 | 19 | body { 20 | color: rgb(var(--foreground-rgb)); 21 | font-family: var(--font-nm); 22 | background: #000000; 23 | overflow-x: hidden; 24 | } 25 | 26 | @layer utilities { 27 | .text-balance { 28 | text-wrap: balance; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | import localFont from 'next/font/local'; 3 | import "./globals.css"; 4 | import Script from "next/script"; 5 | 6 | export const metadata: Metadata = { 7 | title: "Web3js - The API to connect to Ethereum and any EVM Chain", 8 | description: "web3js - the longest-running EVM API", 9 | icons: { 10 | icon: './favicon.ico', 11 | }, 12 | keywords: [], 13 | twitter: { 14 | card: 'summary_large_image', 15 | title: 'Web3js', 16 | description: 'web3js - the longest-running EVM API', 17 | images: ['https://imagedelivery.net/qdx9xDn6TxxInQGWsuRsVg/f3f16fdc-3d9c-44af-eda3-49865a286f00'], 18 | }, 19 | openGraph: { 20 | title: 'web3js', 21 | description: 'web3js - the longest-running EVM API', 22 | url: 'https://web3js.org', 23 | siteName: 'web3js', 24 | images: [ 25 | { 26 | url: 'https://imagedelivery.net/qdx9xDn6TxxInQGWsuRsVg/f3f16fdc-3d9c-44af-eda3-49865a286f00', 27 | width: 800, 28 | height: 600, 29 | }, 30 | ], 31 | locale: 'en_US', 32 | type: 'website', 33 | }, 34 | robots: { 35 | index: false, 36 | follow: true, 37 | nocache: true, 38 | googleBot: { 39 | index: true, 40 | follow: false, 41 | noimageindex: true, 42 | 'max-video-preview': -1, 43 | 'max-image-preview': 'large', 44 | 'max-snippet': -1, 45 | }, 46 | }, 47 | 48 | metadataBase: new URL('https://web3js.org'), 49 | alternates: { 50 | canonical: '/', 51 | languages: { 52 | 'en-US': '/en-US', 53 | 'de-DE': '/de-DE', 54 | }, 55 | }, 56 | }; 57 | 58 | 59 | const neueMontreal = localFont({ 60 | weight: '400', 61 | src: [ 62 | { 63 | path: './fonts/NeueMontreal-Light.woff2', 64 | weight: '300', 65 | style: 'normal', 66 | }, 67 | { 68 | path: './fonts/NeueMontreal-Regular.woff2', 69 | weight: '400', 70 | style: 'normal', 71 | }, 72 | { 73 | path: './fonts/NeueMontreal-Medium.woff2', 74 | weight: '600', 75 | style: 'normal', 76 | }, 77 | ], 78 | variable: '--font-nm', 79 | }); 80 | 81 | export default function RootLayout({ 82 | children, 83 | }: Readonly<{ 84 | children: React.ReactNode; 85 | }>) { 86 | return ( 87 | 88 |