Skip to content

Commit be8e6a7

Browse files
committed
Homepage++
1 parent 93bf893 commit be8e6a7

File tree

5 files changed

+258
-83
lines changed

5 files changed

+258
-83
lines changed

packages/nextjs/pages/blog/ai-native-ethereum-stack.tsx

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type { NextPage } from "next";
44
export const POST = {
55
title: "Building an AI-Native Ethereum Developer Stack",
66
date: "February 2026",
7-
tags: ["AI-tools", "Scaffold-ETH", "Speedrun-Ethereum"],
87
url: "/blog/ai-native-ethereum-stack",
98
};
109

@@ -30,12 +29,6 @@ const AiNativeEthereumStack: NextPage = () => {
3029
<header className="mb-10">
3130
<div className="flex items-center gap-3 mb-4 font-mono text-sm text-white/35">
3231
<span>{POST.date}</span>
33-
<span>·</span>
34-
{POST.tags.map(tag => (
35-
<span key={tag} className="text-primary/70">
36-
{tag}
37-
</span>
38-
))}
3932
</div>
4033
<h1 className="text-3xl sm:text-4xl font-bold leading-tight text-white">{POST.title}</h1>
4134
</header>

packages/nextjs/pages/index.tsx

Lines changed: 120 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,141 @@
11
import React from "react";
2+
import Image from "next/image";
23
import Link from "next/link";
34
import type { NextPage } from "next";
45
import { POST as aiNativePost } from "~~/pages/blog/ai-native-ethereum-stack";
56

67
const BLOG_POSTS = [aiNativePost];
78

9+
const FEATURED_PROJECTS = [
10+
{
11+
name: "Scaffold-ETH 2",
12+
description: "An open-source toolkit for building decentralized applications on Ethereum.",
13+
href: "https://github.com/scaffold-eth/scaffold-eth-2",
14+
},
15+
{
16+
name: "SpeedRunEthereum",
17+
description: "A platform to learn how to build on Ethereum; the superpowers and the gotchas.",
18+
href: "https://speedrunethereum.com",
19+
},
20+
{
21+
name: "Capture the Flag",
22+
description: "Ethereum CTF challenges with seasons from Devcon Bangkok and Devconnect Buenos Aires.",
23+
href: "https://ctf.buidlguidl.com",
24+
},
25+
];
26+
27+
const COLLABORATORS = [
28+
{ name: "Ethereum Foundation", href: "https://ethereum.foundation", logo: "/logos/ef.png" },
29+
{ name: "Arbitrum", href: "https://arbitrum.foundation/", logo: "/logos/arbitrum.svg" },
30+
{ name: "ENS", href: "https://ens.domains", logo: "/logos/ens.png" },
31+
];
32+
833
const Home: NextPage = () => {
934
return (
1035
<>
11-
<div className="max-w-3xl px-4 py-8">
12-
<h1 className="text-4xl font-bold mb-8 text-primary-content bg-primary inline-block p-2">Sand Garden</h1>
13-
14-
<div className="space-y-6 mb-10">
15-
<section className="space-y-2">
16-
<p>We&apos;re a small team building the AI layer of the Ethereum developer stack.</p>
17-
<p>
18-
We explore the edges of AI, researching how to practically apply it to developer tooling and education.
36+
<div className="flex flex-col lg:flex-row gap-10 lg:gap-16 px-4 py-8 max-w-5xl">
37+
<div className="flex-1 max-w-3xl flex flex-col">
38+
{/* Hero */}
39+
<div className="order-1">
40+
<h1 className="text-4xl font-bold text-primary-content bg-primary inline-block p-2">Sand Garden</h1>
41+
<p className="text-sm uppercase tracking-widest text-base-content/50 font-semibold mt-1">
42+
Tooling · Education · Research
1943
</p>
20-
</section>
44+
</div>
2145

22-
<section className="space-y-1">
23-
<h2 className="text-lg font-semibold text-secondary">Tooling</h2>
24-
<p>
25-
We&apos;re turning years of Scaffold-ETH and BuidlGuidl experience into open-source AI building blocks:
26-
skills, MCPs, and prompts that give AI the context it needs to build dapps &quot;the Ethereum way&quot;.
27-
</p>
28-
</section>
46+
<div className="space-y-6 mb-4 order-2">
47+
<section className="space-y-2">
48+
<p>
49+
We&apos;re a{" "}
50+
<a
51+
href="https://buidlguidl.com"
52+
className="link link-primary"
53+
target="_blank"
54+
rel="noopener noreferrer"
55+
>
56+
BuidlGuidl
57+
</a>{" "}
58+
team working on the AI layer of the Ethereum developer stack, turning research into practical tools and
59+
education for builders.
60+
</p>
61+
</section>
62+
</div>
2963

30-
<section className="space-y-1">
31-
<h2 className="text-lg font-semibold text-secondary">Education</h2>
32-
<p>We&apos;re bringing AI tutors into Speedrun Ethereum.</p>
33-
<p>
34-
Think personalized guidance that adapts to your pace. It empowers builders to ship dapps without the
35-
friction of a coding environment, while letting cracked devs dive as deep as they want.
36-
</p>
37-
<p>All while keeping the rigor of onchain automated grading.</p>
38-
</section>
64+
{/* Latest Posts — inline on mobile, hidden on desktop (shown in sidebar) */}
65+
<div className="mb-10 order-3 lg:hidden border-l border-primary/30 pl-4">
66+
<h2 className="text-sm uppercase tracking-widest text-primary/70 font-semibold mb-3">Latest Posts</h2>
67+
<div className="space-y-3">
68+
{BLOG_POSTS.map((post, i) => (
69+
<a key={i} href={post.url} className="block group">
70+
<span className="block text-sm text-base-content/80 group-hover:text-primary transition-colors leading-snug">
71+
{post.title}
72+
</span>
73+
<span className="flex flex-wrap items-center gap-1.5 mt-1 text-xs text-base-content/40">
74+
<span>{post.date}</span>
75+
</span>
76+
</a>
77+
))}
78+
</div>
79+
</div>
3980

40-
<section className="space-y-1">
41-
<h2 className="text-lg font-semibold text-secondary">Research</h2>
42-
<p>The agent ecosystem moves fast, so we try to stay close to the primitives.</p>
43-
<p>
44-
No heavy frameworks. We focus on small, composable pieces: minimal tools, clean RAG pipelines, and
45-
laser-focused agent skills.
46-
</p>
47-
</section>
81+
<div className="mb-10 order-4">
82+
<h2 className="text-2xl font-bold mb-4">Featured Projects</h2>
83+
<div className="space-y-4">
84+
{FEATURED_PROJECTS.map(project => (
85+
<div key={project.name}>
86+
<a
87+
href={project.href}
88+
className="font-bold text-secondary hover:underline underline-offset-2"
89+
target="_blank"
90+
rel="noopener noreferrer"
91+
>
92+
{project.name}
93+
</a>
94+
<p className="mt-0.5 text-sm text-base-content/70">{project.description}</p>
95+
</div>
96+
))}
97+
</div>
98+
<Link href="/projects" className="inline-block mt-4 text-sm link link-primary">
99+
View all projects &rarr;
100+
</Link>
101+
</div>
48102

49-
<section className="space-y-2">
50-
<p>
51-
Build, test, adjust, repeat. See what we&apos;re currently building at{" "}
52-
<Link href="/projects" className="link link-primary">
53-
/projects
54-
</Link>
55-
.
56-
</p>
57-
<p>
58-
If you&apos;re building something interesting and see an overlap,{" "}
59-
<a href="mailto:sandgarden@buidlguidl.com" className="link link-primary">
60-
let&apos;s talk.
61-
</a>
62-
</p>
63-
</section>
103+
<div className="mb-10 order-5">
104+
<h2 className="text-2xl font-bold mb-4">Collaborators</h2>
105+
<div className="flex flex-wrap items-center gap-6">
106+
{COLLABORATORS.map(client => (
107+
<a
108+
key={client.name}
109+
href={client.href}
110+
className="opacity-90 hover:opacity-100 transition-opacity bg-white/90 rounded-md px-3 py-2"
111+
target="_blank"
112+
rel="noopener noreferrer"
113+
>
114+
<Image src={client.logo} alt={client.name} width={140} height={48} className="h-8 w-auto" />
115+
</a>
116+
))}
117+
</div>
118+
</div>
64119
</div>
65120

66-
<div>
67-
<h2 className="text-2xl font-bold mb-4">Latest Posts</h2>
68-
<div className="space-y-3">
69-
{BLOG_POSTS.map((post, i) => (
70-
<a
71-
key={i}
72-
href={post.url}
73-
className="block py-3 border-b border-base-200 hover:border-primary transition-colors group"
74-
>
75-
<span className="block text-base text-base-content group-hover:text-primary transition-colors leading-snug">
76-
{post.title}
77-
</span>
78-
<span className="flex items-center gap-2 mt-1 text-sm text-base-content/50">
79-
<span>{post.date}</span>
80-
{post.tags.length > 0 && (
81-
<>
82-
<span>·</span>
83-
{post.tags.map(tag => (
84-
<span key={tag} className="text-primary/70">
85-
{tag}
86-
</span>
87-
))}
88-
</>
89-
)}
90-
</span>
91-
</a>
92-
))}
121+
{/* Sidebar — desktop only */}
122+
<aside className="hidden lg:block lg:w-56 lg:pt-20 shrink-0">
123+
<div className="lg:sticky lg:top-8 border-l border-primary/30 pl-4">
124+
<h2 className="text-sm uppercase tracking-widest text-primary/70 font-semibold mb-3">Latest Posts</h2>
125+
<div className="space-y-3">
126+
{BLOG_POSTS.map((post, i) => (
127+
<a key={i} href={post.url} className="block group">
128+
<span className="block text-sm text-base-content/80 group-hover:text-primary transition-colors leading-snug">
129+
{post.title}
130+
</span>
131+
<span className="flex flex-wrap items-center gap-1.5 mt-1 text-xs text-base-content/40">
132+
<span>{post.date}</span>
133+
</span>
134+
</a>
135+
))}
136+
</div>
93137
</div>
94-
</div>
138+
</aside>
95139
</div>
96140
</>
97141
);

0 commit comments

Comments
 (0)