Skip to content

Commit 038ea71

Browse files
committed
fix: remove PartnersSection from RoadmapSection and update partners list
1 parent 17e0f48 commit 038ea71

3 files changed

Lines changed: 5 additions & 348 deletions

File tree

app/conveyotstack.tsx

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,6 @@ export default function RoadmapSection() {
8080
</div>
8181
</div>
8282
</section>
83-
84-
{/* PARTNERS SECTION ADDITION */}
85-
<PartnersSection />
8683
</>
8784
);
8885
}
@@ -284,57 +281,3 @@ function Tooltip({ text }: { text: string }) {
284281
</span>
285282
);
286283
}
287-
288-
/* -------- Partners Section -------- */
289-
290-
function PartnersSection() {
291-
const partners = [
292-
"Open Infrastructure Foundation",
293-
"Cloud Native Alliance",
294-
"Distributed Systems Lab",
295-
"InfraLane",
296-
"Apex Compute",
297-
"Nexus Networks",
298-
];
299-
300-
return (
301-
<section className="py-24 border-b border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900/20">
302-
<div className="max-w-7xl mx-auto px-6">
303-
{/* Header */}
304-
<div className="mb-16">
305-
<span className="text-[10px] font-bold uppercase tracking-[0.3em] text-primary mb-2 block">
306-
Ecosystem
307-
</span>
308-
<h2 className="text-4xl font-black uppercase tracking-tighter text-slate-900 dark:text-slate-100">
309-
Strategic Partners
310-
</h2>
311-
</div>
312-
313-
{/* Partners Grid (Collapsed Borders) */}
314-
<motion.div
315-
initial={{ opacity: 0, y: 20 }}
316-
whileInView={{ opacity: 1, y: 0 }}
317-
viewport={{ once: true }}
318-
transition={{ duration: 0.6 }}
319-
className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-px bg-slate-200 dark:bg-slate-800 border border-slate-200 dark:border-slate-800"
320-
>
321-
{partners.map((partner, i) => (
322-
<div
323-
key={i}
324-
className="bg-background-light dark:bg-background-dark aspect-square flex flex-col items-center justify-center p-6 text-center group hover:bg-white dark:hover:bg-slate-900 transition-colors cursor-pointer"
325-
>
326-
<div className="h-12 w-12 mb-4 border border-slate-300 dark:border-slate-700 group-hover:border-primary transition-colors flex items-center justify-center bg-slate-100 dark:bg-slate-800 group-hover:bg-primary/10">
327-
<span className="text-xl font-black text-slate-400 dark:text-slate-500 group-hover:text-primary transition-colors">
328-
{partner.charAt(0)}
329-
</span>
330-
</div>
331-
<span className="text-[10px] font-bold uppercase tracking-widest text-slate-500 dark:text-slate-400 group-hover:text-slate-900 dark:group-hover:text-slate-100 transition-colors">
332-
{partner}
333-
</span>
334-
</div>
335-
))}
336-
</motion.div>
337-
</div>
338-
</section>
339-
);
340-
}

app/page.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Metrics from "./metrics";
77
import RecentPapers from "./papers";
88
import Community from "./community";
99
import { CTASection } from "./cta";
10+
import PartnersSection from "./partners";
1011

1112
const page = () => {
1213
return (
@@ -17,6 +18,7 @@ const page = () => {
1718
<RecentPapers />
1819
<RoadmapSection />
1920
<Community />
21+
<PartnersSection />
2022
<CTASection />
2123
</>
2224
);

app/partners.tsx

Lines changed: 3 additions & 291 deletions
Original file line numberDiff line numberDiff line change
@@ -1,300 +1,12 @@
11
"use client";
22

33
import { motion } from "framer-motion";
4-
import {
5-
FiGitMerge,
6-
FiLayers,
7-
FiActivity,
8-
FiCloud,
9-
FiCpu,
10-
FiInfo,
11-
} from "react-icons/fi";
124

13-
export default function RoadmapSection() {
14-
return (
15-
<>
16-
<section
17-
id="roadmap"
18-
className="relative py-32 border-t border-b border-slate-200 dark:border-slate-800 overflow-hidden bg-background-light dark:bg-background-dark"
19-
>
20-
{/* Micro Grid Background */}
21-
<div className="absolute inset-0 micro-grid opacity-10 pointer-events-none"></div>
22-
23-
<div className="relative z-10 max-w-7xl mx-auto px-6">
24-
{/* Header & Sponsor Badge */}
25-
<motion.div
26-
initial={{ opacity: 0, y: 40 }}
27-
whileInView={{ opacity: 1, y: 0 }}
28-
viewport={{ once: true }}
29-
transition={{ duration: 0.8 }}
30-
className="flex flex-col items-center text-center max-w-4xl mx-auto"
31-
>
32-
{/* InfraLane Sponsor Badge */}
33-
<div className="inline-flex items-center gap-4 border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 px-5 py-2 mb-10 shadow-sm">
34-
<span className="text-[10px] font-bold uppercase tracking-[0.3em] text-slate-400">
35-
Sponsored By
36-
</span>
37-
<div className="h-3 w-px bg-slate-300 dark:bg-slate-700"></div>
38-
<span className="text-[10px] font-black uppercase tracking-[0.3em] text-primary">
39-
InfraLane
40-
</span>
41-
</div>
42-
43-
<span className="text-[10px] font-bold uppercase tracking-widest text-primary mb-4 block">
44-
Flagship Project
45-
</span>
46-
<h2 className="text-4xl md:text-6xl font-black uppercase tracking-tighter text-slate-900 dark:text-slate-100">
47-
Conveyor Stack <br /> Roadmap
48-
</h2>
49-
<p className="mt-6 text-lg text-slate-600 dark:text-slate-400 leading-relaxed max-w-2xl">
50-
A long-term initiative to build a sovereign, vendor-neutral IaaS
51-
platform — evolving through open governance or independent system
52-
design.
53-
</p>
54-
</motion.div>
55-
56-
{/* Roadmap Flow */}
57-
<div className="mt-24 flex flex-col items-center">
58-
<Node
59-
icon={<FiLayers />}
60-
title="Conveyor Stack"
61-
description="A multi-year program to design an open infrastructure platform comparable to OpenStack or Apache CloudStack."
62-
highlight
63-
/>
64-
65-
<Line />
66-
67-
<Node
68-
icon={<FiActivity />}
69-
title="Phase 1: Conveyor CI"
70-
description="A headless, cloud-native CI/CD orchestration engine designed as the foundation of the stack."
71-
/>
72-
73-
<Line />
74-
75-
{/* DECISION GATE */}
76-
<DecisionGate />
77-
78-
{/* SPLIT PATHS */}
79-
<SplitPaths />
80-
</div>
81-
</div>
82-
</section>
83-
84-
{/* PARTNERS SECTION ADDITION */}
85-
<PartnersSection />
86-
</>
87-
);
88-
}
89-
90-
/* ================= Components ================= */
91-
92-
function Node({
93-
icon,
94-
title,
95-
description,
96-
highlight = false,
97-
}: {
98-
icon: React.ReactNode;
99-
title: string;
100-
description: string;
101-
highlight?: boolean;
102-
}) {
103-
return (
104-
<motion.div
105-
initial={{ opacity: 0, scale: 0.98 }}
106-
whileInView={{ opacity: 1, scale: 1 }}
107-
viewport={{ once: true }}
108-
transition={{ duration: 0.6 }}
109-
className={`w-full max-w-xl text-center p-8 border ${
110-
highlight
111-
? "bg-primary/5 border-primary"
112-
: "bg-white dark:bg-slate-900/50 border-slate-200 dark:border-slate-800"
113-
}`}
114-
>
115-
<div
116-
className={`flex justify-center mb-6 text-3xl ${
117-
highlight ? "text-primary" : "text-slate-900 dark:text-slate-100"
118-
}`}
119-
>
120-
{icon}
121-
</div>
122-
<h3 className="text-xl font-bold uppercase tracking-tight text-slate-900 dark:text-slate-100 mb-3">
123-
{title}
124-
</h3>
125-
<p className="text-sm text-slate-500 dark:text-slate-400 leading-relaxed">
126-
{description}
127-
</p>
128-
</motion.div>
129-
);
130-
}
131-
132-
function Line() {
133-
return <div className="h-16 w-px bg-slate-300 dark:bg-slate-700" />;
134-
}
135-
136-
/* -------- Decision Gate -------- */
137-
138-
function DecisionGate() {
139-
return (
140-
<motion.div
141-
initial={{ opacity: 0 }}
142-
whileInView={{ opacity: 1 }}
143-
viewport={{ once: true }}
144-
transition={{ duration: 0.8 }}
145-
className="relative flex flex-col items-center w-full max-w-lg"
146-
>
147-
{/* Pulsing Square Border (Swiss geometric style instead of rounded ring) */}
148-
<motion.div
149-
animate={{ scale: [1, 1.05, 1], opacity: [0.3, 0.8, 0.3] }}
150-
transition={{ duration: 3, repeat: Infinity, ease: "easeInOut" }}
151-
className="absolute inset-[-15px] border border-primary pointer-events-none"
152-
/>
153-
154-
<div className="relative z-10 w-full p-8 bg-slate-900 dark:bg-white text-center border border-slate-800 dark:border-slate-200">
155-
<div className="flex justify-center items-center gap-3 text-white dark:text-slate-900 mb-4">
156-
<FiGitMerge className="text-2xl text-primary" />
157-
<span className="text-lg font-bold uppercase tracking-tight">
158-
CNCF Sandbox Gate
159-
</span>
160-
<Tooltip text="The acceptance of Conveyor CI into the CNCF Sandbox determines governance, development model, and long-term ecosystem alignment." />
161-
</div>
162-
163-
<p className="text-slate-400 dark:text-slate-500 text-sm leading-relaxed text-justify-custom">
164-
Conveyor CI is evaluated for acceptance into the CNCF Sandbox. This
165-
outcome determines whether Conveyor Stack evolves through
166-
community-integrated development or through a fully sovereign stack.
167-
</p>
168-
169-
<div className="mt-6 pt-4 border-t border-slate-800 dark:border-slate-200">
170-
<p className="text-[10px] font-bold uppercase tracking-widest text-primary">
171-
Critical Junction point
172-
</p>
173-
</div>
174-
</div>
175-
</motion.div>
176-
);
177-
}
178-
179-
/* -------- Split Paths -------- */
180-
181-
function SplitPaths() {
182-
return (
183-
<div className="relative w-full max-w-6xl mt-16">
184-
{/* Vertical connector to split */}
185-
<div className="absolute left-1/2 -top-16 h-16 w-px bg-slate-300 dark:bg-slate-700 -translate-x-1/2" />
186-
{/* Horizontal connector line */}
187-
<div className="hidden md:block absolute left-1/4 right-1/4 top-0 h-px bg-slate-300 dark:bg-slate-700" />
188-
189-
{/* Drop lines for columns */}
190-
<div className="hidden md:block absolute left-1/4 top-0 h-10 w-px bg-slate-300 dark:bg-slate-700 -translate-x-1/2" />
191-
<div className="hidden md:block absolute right-1/4 top-0 h-10 w-px bg-slate-300 dark:bg-slate-700 translate-x-1/2" />
192-
193-
<motion.div
194-
initial={{ opacity: 0 }}
195-
whileInView={{ opacity: 1 }}
196-
viewport={{ once: true }}
197-
transition={{ duration: 0.6 }}
198-
className="grid md:grid-cols-2 gap-8 md:gap-16 pt-10"
199-
>
200-
<Path
201-
title="Community Path"
202-
icon={<FiCloud />}
203-
tooltip="Activated if Conveyor CI is accepted into the CNCF Sandbox."
204-
description="Leverage existing CNCF-aligned systems and communities to accelerate development."
205-
items={[
206-
"Reuse mature databases & brokers",
207-
"Community-driven governance",
208-
"Focus on orchestration & integration",
209-
]}
210-
/>
211-
212-
<Path
213-
title="Sovereign Stack"
214-
icon={<FiCpu />}
215-
tooltip="Activated if CNCF Sandbox acceptance is not achieved."
216-
description="Design and build a fully sovereign infrastructure stack from first principles."
217-
items={[
218-
"Distributed embeddable document database",
219-
"Event-based message broker",
220-
"Custom storage & virtualization",
221-
]}
222-
/>
223-
</motion.div>
224-
</div>
225-
);
226-
}
227-
228-
function Path({
229-
title,
230-
icon,
231-
tooltip,
232-
description,
233-
items,
234-
}: {
235-
title: string;
236-
icon: React.ReactNode;
237-
tooltip: string;
238-
description: string;
239-
items: string[];
240-
}) {
241-
return (
242-
<motion.div
243-
initial={{ opacity: 0, y: 20 }}
244-
whileInView={{ opacity: 1, y: 0 }}
245-
viewport={{ once: true }}
246-
transition={{ duration: 0.7 }}
247-
className="p-8 bg-white dark:bg-slate-900/50 border border-slate-200 dark:border-slate-800 hover:border-primary dark:hover:border-primary transition-colors group cursor-default"
248-
>
249-
<div className="flex items-center gap-4 mb-6 text-slate-900 dark:text-slate-100">
250-
<span className="text-3xl text-primary">{icon}</span>
251-
<h4 className="text-lg font-bold uppercase tracking-tight">{title}</h4>
252-
<Tooltip text={tooltip} />
253-
</div>
254-
255-
<p className="text-slate-500 dark:text-slate-400 text-sm leading-relaxed mb-6">
256-
{description}
257-
</p>
258-
259-
<ul className="space-y-3">
260-
{items.map((item, i) => (
261-
<li key={i} className="flex items-start gap-3">
262-
<span className="h-1.5 w-1.5 bg-primary mt-1.5 shrink-0"></span>
263-
<span className="text-slate-600 dark:text-slate-300 text-sm font-medium">
264-
{item}
265-
</span>
266-
</li>
267-
))}
268-
</ul>
269-
</motion.div>
270-
);
271-
}
272-
273-
/* -------- Tooltip -------- */
274-
275-
function Tooltip({ text }: { text: string }) {
276-
return (
277-
<span className="relative group ml-auto">
278-
<FiInfo className="text-slate-300 dark:text-slate-600 hover:text-primary dark:hover:text-primary cursor-help transition-colors text-lg" />
279-
<span className="absolute bottom-full right-0 md:left-1/2 md:-translate-x-1/2 mb-4 w-64 opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none z-50">
280-
<span className="block p-4 text-[10px] uppercase tracking-widest leading-relaxed text-white dark:text-slate-900 bg-slate-900 dark:bg-white border-b-2 border-primary shadow-xl">
281-
{text}
282-
</span>
283-
</span>
284-
</span>
285-
);
286-
}
287-
288-
/* -------- Partners Section -------- */
289-
290-
function PartnersSection() {
5+
export default function PartnersSection() {
2916
const partners = [
292-
"Open Infrastructure Foundation",
293-
"Cloud Native Alliance",
294-
"Distributed Systems Lab",
7+
"Cloud Native Kampala",
2958
"InfraLane",
296-
"Apex Compute",
297-
"Nexus Networks",
9+
"Cranom Technologies Ltd",
29810
];
29911

30012
return (

0 commit comments

Comments
 (0)