Skip to content

Commit d49fc90

Browse files
committed
Update homepage and add blog post
1 parent b090672 commit d49fc90

File tree

2 files changed

+344
-23
lines changed

2 files changed

+344
-23
lines changed
Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
import Head from "next/head";
2+
import type { NextPage } from "next";
3+
4+
export const POST = {
5+
title: "Building an AI-Native Ethereum Developer Stack",
6+
date: "February 2026",
7+
tags: ["AI-tools", "Scaffold-ETH", "Speedrun-Ethereum"],
8+
url: "/blog/ai-native-ethereum-stack",
9+
};
10+
11+
const codeCls = "bg-white/5 text-primary-content px-1 py-0.5 rounded text-[0.85em]";
12+
13+
function H2({ children }: { children: React.ReactNode }) {
14+
return <h2 className="text-secondary font-bold text-lg sm:text-xl mt-10 mb-1">{children}</h2>;
15+
}
16+
17+
const AiNativeEthereumStack: NextPage = () => {
18+
return (
19+
<>
20+
<Head>
21+
<title>{POST.title} — Sand Garden</title>
22+
<meta
23+
name="description"
24+
content="How we're restructuring our Web3 stack—Scaffold-ETH 2, Speedrun Ethereum, RAG pipelines—for a world where AI agents are primary users alongside developers."
25+
/>
26+
</Head>
27+
28+
<article className="max-w-2xl px-4 py-12 mx-auto">
29+
{/* Header */}
30+
<header className="mb-10">
31+
<div className="flex items-center gap-3 mb-4 font-mono text-sm text-white/35">
32+
<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+
))}
39+
</div>
40+
<h1 className="text-3xl sm:text-4xl font-bold leading-tight text-white">{POST.title}</h1>
41+
</header>
42+
43+
{/* Body */}
44+
<div className="space-y-5 text-white/70 leading-relaxed text-sm sm:text-base">
45+
<p>
46+
For years, we&apos;ve been building our dev tools and learning materials primarily for humans. Docs
47+
explained what our toolkit did. We taught developers with guided, hands-on experiences. Extensions shipped
48+
as mergeable code.
49+
</p>
50+
<p>But we&apos;re finding that this model gets a bit clunky when an AI agent is driving the keyboard.</p>
51+
<p>
52+
Instead of just asking &ldquo;how do we add AI to our tools&rdquo; we started asking ourselves: what would
53+
our stack look like if we treated the AI as a primary user alongside the developer?
54+
</p>
55+
<p>
56+
For us, that meant rethinking some of our core primitives rather than just patching on new features.
57+
We&apos;ve been doing exactly that across our dev toolkit (
58+
<a
59+
href="https://github.com/scaffold-eth/scaffold-eth-2"
60+
target="_blank"
61+
rel="noopener noreferrer"
62+
className="link link-primary"
63+
>
64+
Scaffold-ETH 2
65+
</a>
66+
) and our Solidity curriculum (
67+
<a
68+
href="https://speedrunethereum.com"
69+
target="_blank"
70+
rel="noopener noreferrer"
71+
className="link link-primary"
72+
>
73+
Speedrun Ethereum
74+
</a>
75+
). The Sand Garden, an intentional team within BuidlGuidl, is executing this vision.
76+
</p>
77+
<p>Here is a look at how we&apos;re restructuring our own Web3 stack for this shift.</p>
78+
79+
<H2>Structuring Docs for Agents</H2>
80+
<p>
81+
We removed Cursor rules from Scaffold-ETH 2 and replaced them with{" "}
82+
<code className={codeCls}>AGENTS.md</code>.
83+
</p>
84+
<p>
85+
Cursor rules only work in Cursor. <code className={codeCls}>AGENTS.md</code> is picked up by Claude Code,
86+
Cursor, Windsurf, and any other agent harness.{" "}
87+
<strong className="text-white font-semibold">One file, every tool.</strong> Every conversation starts with
88+
the full stack context already loaded.
89+
</p>
90+
<p>
91+
In these new workflows, we&apos;re noticing the main consumer of our docs is often an agent loading context
92+
before writing code. So we shipped <code className={codeCls}>llms-full.txt</code>: the entire SE-2
93+
documentation as a single flat file. Not a website. A file an agent loads into context and reasons against.
94+
</p>
95+
<p>It&apos;s the exact same information, just formatted for how an AI actually consumes it.</p>
96+
97+
<H2>Swapping Complex Code for AI Skills</H2>
98+
<p>
99+
Adding a Scaffold-ETH extension used to mean resolving <code className={codeCls}>package.json</code>{" "}
100+
conflicts through hundreds of lines of template processing code.
101+
</p>
102+
<p>
103+
We replaced it with <code className={codeCls}>/add-extension</code>: a simple agent skill built to work
104+
across different harnesses. Node.js handles the deterministic operations (fetching, copying), while the AI
105+
handles the judgment calls (merging).{" "}
106+
<strong className="text-white font-semibold">
107+
Hundreds of lines of template code became a markdown file and a focused script.
108+
</strong>
109+
</p>
110+
<p>
111+
Same pattern for developer workflow. Our <code className={codeCls}>pr-create</code> skill is a markdown file
112+
that tells an agent how to inspect the diff, format the PR body, and open it via{" "}
113+
<code className={codeCls}>gh</code>. No custom script. No alias. Just context.
114+
</p>
115+
<p>
116+
We&apos;ve started stripping out custom scripts wherever we find that a model just naturally handles the
117+
task better.
118+
</p>
119+
120+
<H2>Rethinking How We Teach</H2>
121+
<p>
122+
Speedrun Ethereum is how many developers learn to build on Ethereum. We&apos;re rebuilding the learning
123+
layer to the same standard.
124+
</p>
125+
<p>
126+
<strong className="text-white font-semibold">Per-challenge context files.</strong> Each challenge gets an{" "}
127+
<code className={codeCls}>AGENTS.md</code> detailing the challenge overview, smart contract structure, and
128+
frontend architecture. When a learner opens a challenge in their IDE, the agent already knows the
129+
environment.
130+
</p>
131+
<p>
132+
<strong className="text-white font-semibold">AI Teacher Mode.</strong> Type{" "}
133+
<code className={codeCls}>/start</code> in the directory and an agent walks you through it. It asks
134+
questions, checks your understanding, guides you without giving the answer away, and reviews your code at
135+
your pace.
136+
</p>
137+
<p>
138+
Build ideas are also migrating. Old format: a GitHub repo link. New format: a prompt you paste into your
139+
agent. The agent reads context and starts building with you.
140+
</p>
141+
142+
<H2>The Research Layer</H2>
143+
<p>
144+
The agent ecosystem shifts weekly. That&apos;s why we aren&apos;t assembling heavy wrappers. We need to
145+
understand the raw primitives so we can adapt the moment a new paradigm drops.
146+
</p>
147+
<p>
148+
<a
149+
href="https://github.com/BuidlGuidl/raked"
150+
target="_blank"
151+
rel="noopener noreferrer"
152+
className="link link-primary"
153+
>
154+
raked
155+
</a>{" "}
156+
is a minimal TypeScript agent built for exactly this: the agent loop, sessions, memory, tools, skills.
157+
It&apos;s under 100 lines for the core. Built to be read, understood, and extended to solve your specific
158+
use cases.
159+
</p>
160+
<p>
161+
Alongside it: an experimental RAG pipeline on Arbitrum DAO governance data. Vector search via{" "}
162+
<code className={codeCls}>pgvector</code>, retrieval via LlamaIndex, automated evaluation scoring
163+
Faithfulness, Relevancy, and Correctness.
164+
</p>
165+
<p>
166+
We built both because we really wanted to understand the underlying mechanisms before building heavier tools
167+
on top of them.
168+
</p>
169+
170+
<H2>Figuring Out the Boundaries</H2>
171+
<p>
172+
Security stays deterministic. Wallet interactions, transaction signing, and key management require hard
173+
boundaries. An agent making onchain transactions autonomously is an attack surface. That problem isn&apos;t
174+
solved yet.
175+
</p>
176+
<p>
177+
But <strong className="text-white font-semibold">code review</strong> is a perfect fit for AI judgment.
178+
</p>
179+
<p>
180+
Take{" "}
181+
<a
182+
href="https://github.com/technophile-04/grumpy-carlos-personality-fetcher"
183+
target="_blank"
184+
rel="noopener noreferrer"
185+
className="link link-primary"
186+
>
187+
Grumpy Carlos
188+
</a>
189+
: a Claude Code subagent with a review personality inferred from scraped BuidlGuidl PR history. Drop it in{" "}
190+
<code className={codeCls}>.claude/agents/</code>, ask for a review, and it responds exactly the way Carlos
191+
would: specific, strict, no vague feedback.
192+
</p>
193+
<p>
194+
The right context, structured for an AI to use, produces better output than general AI applied to problems
195+
without context.
196+
</p>
197+
198+
<H2>The Compounding Effect</H2>
199+
<p>
200+
To us, this is what going &ldquo;AI-first&rdquo; actually looks like in practice. It&apos;s not just
201+
dropping a Copilot plugin into Scaffold-ETH. It&apos;s a stack where every layer—the framework, the docs,
202+
the extensions, the curriculum—is structured to be used by an agent, not just tolerated by one.
203+
</p>
204+
<p>
205+
An agent building with SE-2 understands the stack. An agent teaching on Speedrun Ethereum understands the
206+
challenge. With <code className={codeCls}>/add-extension</code> the agent can install new capabilities
207+
without leaving the conversation.
208+
</p>
209+
<p>
210+
<strong className="text-white font-semibold">Next up:</strong> an open-source plugin that packages all of
211+
this into one installable toolkit for Claude Code, OpenCode, and Cursor.
212+
</p>
213+
214+
<H2>Try It Today</H2>
215+
<p>The PRs are open and the code is live. If you&apos;re building at the intersection of AI and Ethereum:</p>
216+
<ol className="mt-4 space-y-3 list-none">
217+
{[
218+
<>
219+
<strong className="text-white font-semibold">Start with raked:</strong>{" "}
220+
<a
221+
href="https://github.com/BuidlGuidl/raked"
222+
target="_blank"
223+
rel="noopener noreferrer"
224+
className="link link-primary"
225+
>
226+
Read the agent loop.
227+
</a>{" "}
228+
Understand what a tool call actually is before building on top of abstractions.
229+
</>,
230+
<>
231+
<strong className="text-white font-semibold">Look at Scaffold-ETH 2:</strong>{" "}
232+
<a
233+
href="https://github.com/scaffold-eth/scaffold-eth-2"
234+
target="_blank"
235+
rel="noopener noreferrer"
236+
className="link link-primary"
237+
>
238+
See the AGENTS.md and /add-extension skills in progress.
239+
</a>{" "}
240+
Build your first Dapp with it and your favourite agent.
241+
</>,
242+
<>
243+
<strong className="text-white font-semibold">Try the AI challenges:</strong> Available on{" "}
244+
<a
245+
href="https://speedrunethereum.com"
246+
target="_blank"
247+
rel="noopener noreferrer"
248+
className="link link-primary"
249+
>
250+
Speedrun Ethereum
251+
</a>{" "}
252+
as they ship.
253+
</>,
254+
].map((item, i) => (
255+
<li key={i} className="flex items-start gap-3">
256+
<span className="text-primary-content/40 font-mono shrink-0 mt-0.5"></span>
257+
<span>{item}</span>
258+
</li>
259+
))}
260+
</ol>
261+
</div>
262+
263+
{/* Footer */}
264+
<div className="mt-16 pt-6 border-t border-white/10 font-mono text-sm text-white/35">
265+
<p>
266+
Questions or want to build together?{" "}
267+
<a href="mailto:sandgarden@buidlguidl.com" className="link link-primary">
268+
sandgarden@buidlguidl.com
269+
</a>
270+
</p>
271+
</div>
272+
</article>
273+
</>
274+
);
275+
};
276+
277+
export default AiNativeEthereumStack;

packages/nextjs/pages/index.tsx

Lines changed: 67 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,87 @@
11
import React from "react";
22
import Link from "next/link";
33
import type { NextPage } from "next";
4-
import { StreamContractInfo } from "~~/components/StreamContractInfo";
4+
import { POST as aiNativePost } from "~~/pages/blog/ai-native-ethereum-stack";
5+
6+
const BLOG_POSTS = [aiNativePost];
57

68
const Home: NextPage = () => {
79
return (
810
<>
911
<div className="max-w-3xl px-4 py-8">
10-
<h1 className="text-4xl font-bold mb-8 text-primary-content bg-primary inline-block p-2">Welcome</h1>
11-
<div>
12-
<p className="mt-0">
13-
We're running an experiment to fund focused, high-leverage open-source work by providing a monthly UBI to
14-
developers, handpicked by Carlos & BG Sand Garden, rewarding them for their ongoing contributions to
15-
BuidlGuidl and the Ethereum Ecosystem.
12+
<h1 className="text-4xl font-bold mb-8 text-primary-content bg-primary inline-block p-2">Sand Garden</h1>
13+
<div className="space-y-4 mb-10">
14+
<p>
15+
We&apos;re a small team building the AI layer for the Ethereum developer stack. Born from BuidlGuidl, our
16+
focus sits across three pillars: making Ethereum dev tooling AI-native, rebuilding how developers learn
17+
Solidity with AI, and going deep on the AI research.
1618
</p>
1719
<p>
18-
Our emphasis is on quality over quantity, striving for well-crafted products. Our approach embraces
19-
iteration, refining our builds while fostering a culture of continuous learning and improvement.
20+
On the dev tooling side, we&apos;re turning years of{" "}
21+
<a href="https://scaffoldeth.io" className="link link-primary">
22+
Scaffold-ETH
23+
</a>{" "}
24+
and BuidlGuidl knowledge into an open-source plugin any builder can drop into their agent workflow. AI
25+
writes Ethereum code the way the best contributors in the ecosystem would, using our curated set of skills,
26+
MCPs and prompts.
2027
</p>
2128
<p>
22-
<Link href="/members" className="link link-primary">
23-
Members
24-
</Link>{" "}
25-
contributing to any of the active{" "}
26-
<Link href="/projects" className="link link-primary">
27-
projects
28-
</Link>{" "}
29-
can submit their work and claim grant streams, while showcasing their contributions to the public.
29+
On the education side, we&apos;re adding AI tutors to{" "}
30+
<a href="https://speedrunethereum.com" className="link link-primary">
31+
Speedrun Ethereum
32+
</a>
33+
. Personalized guidance that adapts it&apos;s pace to each learner&apos;s level, letting builders to ship
34+
without the friction of coding environments, and letting cracked devs go as deep as they want. All of this
35+
without replacing the rigor of onchain automated grading.
36+
</p>
37+
<p>
38+
On the research side, the agent ecosystem moves fast and heavy abstractions go stale quickly. So we work
39+
close to the primitives, building minimal tools, RAG pipelines, and agent skills scoped to specific
40+
problems.
3041
</p>
31-
<p>This initiative is made possible by BuidlGuidl!</p>
3242
<p>
33-
Read more at the{" "}
34-
<Link href="/faq" className="link link-primary">
35-
F.A.Q
43+
Quality over quantity, always iterating. Learn more about our work at{" "}
44+
<Link href="/projects" className="link link-primary">
45+
/projects
3646
</Link>
47+
.
48+
</p>
49+
<p>
50+
We&apos;re always up for building with good teams.{" "}
51+
<a href="mailto:sandgarden@buidlguidl.com" className="link link-primary">
52+
Get in touch.
53+
</a>
3754
</p>
3855
</div>
39-
<div className="mb-10">
40-
<StreamContractInfo />
56+
57+
<div>
58+
<h2 className="text-2xl font-bold mb-4">Latest Posts</h2>
59+
<div className="space-y-3">
60+
{BLOG_POSTS.map((post, i) => (
61+
<a
62+
key={i}
63+
href={post.url}
64+
className="block py-3 border-b border-base-200 hover:border-primary transition-colors group"
65+
>
66+
<span className="block text-base text-base-content group-hover:text-primary transition-colors leading-snug">
67+
{post.title}
68+
</span>
69+
<span className="flex items-center gap-2 mt-1 text-sm text-base-content/50">
70+
<span>{post.date}</span>
71+
{post.tags.length > 0 && (
72+
<>
73+
<span>·</span>
74+
{post.tags.map(tag => (
75+
<span key={tag} className="text-primary/70">
76+
{tag}
77+
</span>
78+
))}
79+
</>
80+
)}
81+
</span>
82+
</a>
83+
))}
84+
</div>
4185
</div>
4286
</div>
4387
</>

0 commit comments

Comments
 (0)