Skip to content

Commit 439332a

Browse files
looplabs-funLoop Agent
andcommitted
feat(agent): Add Buildtopia roadmap/phases section to landing page
Co-Authored-By: Loop Agent <agent@looplabs.fun>
1 parent fed3f63 commit 439332a

1 file changed

Lines changed: 165 additions & 0 deletions

File tree

app/page.jsx

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,64 @@ const PILLARS = [
2323
},
2424
];
2525

26+
const PHASES = [
27+
{
28+
phase: "Phase 1",
29+
title: "Foundation",
30+
status: "shipped",
31+
statusLabel: "✅ Shipped",
32+
items: [
33+
"Loop platform launched",
34+
"$BUILD token live on-chain",
35+
"Autonomous AI agent active",
36+
"Buildtopia landing & identity",
37+
],
38+
},
39+
{
40+
phase: "Phase 2",
41+
title: "City Skeleton",
42+
status: "building",
43+
statusLabel: "🔨 Building",
44+
items: [
45+
"Buildtopia 3D isometric map",
46+
"Building slot framework",
47+
"xStocks architecture",
48+
"Startup onboarding flow",
49+
],
50+
},
51+
{
52+
phase: "Phase 3",
53+
title: "First District",
54+
status: "next",
55+
statusLabel: "🔜 Next",
56+
items: [
57+
"First real startup buildings live",
58+
"In-city quests & exploration",
59+
"xStock earning mechanics",
60+
"Public city map explorer",
61+
],
62+
},
63+
{
64+
phase: "Phase 4",
65+
title: "Open World",
66+
status: "future",
67+
statusLabel: "🌐 Future",
68+
items: [
69+
"Open startup launch portal",
70+
"Multiplayer city events",
71+
"$BUILD holder governance",
72+
"Cross-city Loop network",
73+
],
74+
},
75+
];
76+
77+
const STATUS_COLORS = {
78+
shipped: { bg: "rgba(72,187,120,0.12)", border: "rgba(72,187,120,0.3)", text: "#68d391" },
79+
building: { bg: "rgba(99,179,237,0.12)", border: "rgba(99,179,237,0.3)", text: "#63b3ed" },
80+
next: { bg: "rgba(246,173,85,0.1)", border: "rgba(246,173,85,0.25)", text: "#f6ad55" },
81+
future: { bg: "rgba(255,255,255,0.05)", border: "rgba(255,255,255,0.1)", text: "rgba(240,240,245,0.45)" },
82+
};
83+
2684
const styles = {
2785
root: {
2886
fontFamily: "system-ui, -apple-system, sans-serif",
@@ -189,6 +247,58 @@ const styles = {
189247
pillarIcon: { fontSize: "2rem", marginBottom: "1rem" },
190248
pillarTitle: { fontWeight: 700, fontSize: "1.05rem", marginBottom: "0.6rem" },
191249
pillarBody: { color: "rgba(240,240,245,0.6)", fontSize: "0.9rem", lineHeight: 1.65 },
250+
roadmapSection: {
251+
maxWidth: "900px",
252+
margin: "0 auto",
253+
padding: "0 1.5rem 4rem",
254+
},
255+
roadmapGrid: {
256+
display: "grid",
257+
gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
258+
gap: "1.25rem",
259+
position: "relative",
260+
},
261+
phaseCard: {
262+
background: "rgba(255,255,255,0.03)",
263+
border: "1px solid rgba(255,255,255,0.08)",
264+
borderRadius: "14px",
265+
padding: "1.5rem",
266+
display: "flex",
267+
flexDirection: "column",
268+
gap: "0.85rem",
269+
},
270+
phaseHeader: {
271+
display: "flex",
272+
flexDirection: "column",
273+
gap: "0.35rem",
274+
},
275+
phaseLabel: {
276+
fontSize: "0.72rem",
277+
letterSpacing: "0.08em",
278+
textTransform: "uppercase",
279+
color: "rgba(240,240,245,0.35)",
280+
fontWeight: 600,
281+
},
282+
phaseTitle: {
283+
fontSize: "1.05rem",
284+
fontWeight: 700,
285+
color: "#f0f0f5",
286+
letterSpacing: "-0.01em",
287+
},
288+
phaseItems: {
289+
listStyle: "none",
290+
margin: 0,
291+
padding: 0,
292+
display: "flex",
293+
flexDirection: "column",
294+
gap: "0.45rem",
295+
},
296+
phaseItem: {
297+
fontSize: "0.83rem",
298+
color: "rgba(240,240,245,0.6)",
299+
paddingLeft: "1.1rem",
300+
position: "relative",
301+
},
192302
communitySection: {
193303
maxWidth: "900px",
194304
margin: "0 auto",
@@ -290,6 +400,61 @@ export default function Page() {
290400
</div>
291401
</section>
292402

403+
{/* Roadmap */}
404+
<section style={styles.roadmapSection}>
405+
<p style={styles.sectionLabel}>Roadmap</p>
406+
<h2 style={{ ...styles.sectionTitle, margin: "0 0 2.5rem" }}>Building Buildtopia, phase by phase</h2>
407+
<div style={styles.roadmapGrid}>
408+
{PHASES.map((ph) => {
409+
const colors = STATUS_COLORS[ph.status];
410+
return (
411+
<div
412+
key={ph.phase}
413+
style={{
414+
...styles.phaseCard,
415+
borderColor: colors.border,
416+
background: colors.bg,
417+
}}
418+
>
419+
<div style={styles.phaseHeader}>
420+
<span style={styles.phaseLabel}>{ph.phase}</span>
421+
<span style={styles.phaseTitle}>{ph.title}</span>
422+
<span
423+
style={{
424+
display: "inline-block",
425+
fontSize: "0.72rem",
426+
fontWeight: 600,
427+
letterSpacing: "0.04em",
428+
color: colors.text,
429+
marginTop: "0.1rem",
430+
}}
431+
>
432+
{ph.statusLabel}
433+
</span>
434+
</div>
435+
<ul style={styles.phaseItems}>
436+
{ph.items.map((item) => (
437+
<li key={item} style={styles.phaseItem}>
438+
<span
439+
style={{
440+
position: "absolute",
441+
left: 0,
442+
color: colors.text,
443+
opacity: 0.7,
444+
}}
445+
>
446+
447+
</span>
448+
{item}
449+
</li>
450+
))}
451+
</ul>
452+
</div>
453+
);
454+
})}
455+
</div>
456+
</section>
457+
293458
{/* Community */}
294459
<section style={styles.communitySection}>
295460
<p style={styles.sectionLabel}>Community</p>

0 commit comments

Comments
 (0)