ebade 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +49 -38
  3. package/ROADMAP.md +19 -14
  4. package/cli/scaffold.js +502 -186
  5. package/cli/simulate.js +102 -0
  6. package/cli/templates/feature-grid.tsx +80 -0
  7. package/cli/templates/footer.tsx +121 -0
  8. package/cli/templates/hero-section.tsx +34 -0
  9. package/cli/templates/login-form.tsx +124 -0
  10. package/cli/templates/navbar.tsx +53 -0
  11. package/cli/templates/pricing-table.tsx +140 -0
  12. package/cli/templates/signup-form.tsx +111 -0
  13. package/demo.tape +2 -2
  14. package/examples/saas-dashboard.ebade.yaml +2 -0
  15. package/netlify.toml +7 -0
  16. package/package.json +3 -1
  17. package/packages/mcp-server/README.md +3 -3
  18. package/packages/mcp-server/package.json +2 -2
  19. package/packages/mcp-server/src/index.ts +12 -16
  20. package/packages/mcp-server/src/tools/scaffold.ts +153 -404
  21. package/packages/vscode-extension/README.md +45 -0
  22. package/packages/vscode-extension/ebade-0.1.0.vsix +0 -0
  23. package/packages/vscode-extension/ebade-0.3.0.vsix +0 -0
  24. package/packages/vscode-extension/ebade-0.3.1.vsix +0 -0
  25. package/packages/vscode-extension/ebade-0.3.2.vsix +0 -0
  26. package/packages/vscode-extension/images/icon.png +0 -0
  27. package/packages/vscode-extension/language-configuration.json +24 -0
  28. package/packages/vscode-extension/package.json +54 -0
  29. package/packages/vscode-extension/snippets/ebade.json +86 -0
  30. package/packages/vscode-extension/syntaxes/ebade.tmLanguage.json +54 -0
  31. package/www/README.md +36 -0
  32. package/www/app/favicon.ico +0 -0
  33. package/www/app/globals.css +1256 -0
  34. package/www/app/layout.tsx +66 -0
  35. package/www/app/page.tsx +374 -0
  36. package/www/app/playground/page.tsx +627 -0
  37. package/www/components/ThreeCanvas.tsx +156 -0
  38. package/www/next.config.ts +19 -0
  39. package/www/package-lock.json +1779 -0
  40. package/www/package.json +27 -0
  41. package/www/postcss.config.mjs +7 -0
  42. package/www/public/logo.png +0 -0
  43. package/www/tsconfig.json +42 -0
  44. package/landing/index.html +0 -237
  45. package/landing/main.js +0 -147
  46. package/landing/style.css +0 -616
  47. /package/{demo.gif → assets/demo.gif} +0 -0
  48. /package/{demo.mp4 → assets/demo.mp4} +0 -0
  49. /package/{landing → www/public}/_headers +0 -0
  50. /package/{landing → www/public}/favicon.svg +0 -0
  51. /package/{landing → www/public}/og-image.png +0 -0
  52. /package/{landing → www/public}/og-readme.png +0 -0
@@ -0,0 +1,66 @@
1
+ import type { Metadata } from "next";
2
+ import { Outfit, JetBrains_Mono } from "next/font/google";
3
+ import Script from "next/script";
4
+ import "./globals.css";
5
+
6
+ const outfit = Outfit({
7
+ subsets: ["latin"],
8
+ variable: "--font-sans",
9
+ display: "swap",
10
+ });
11
+
12
+ const jetbrainsMono = JetBrains_Mono({
13
+ subsets: ["latin"],
14
+ variable: "--font-mono",
15
+ display: "swap",
16
+ });
17
+
18
+ export const metadata: Metadata = {
19
+ title: "ebade | The First Agent-First Framework",
20
+ description:
21
+ "ebade is The first framework designed for AI agents, readable by humans. Reduce token usage by 70% with intent-driven development.",
22
+ openGraph: {
23
+ type: "website",
24
+ url: "https://ebade.dev/",
25
+ title: "ebade | The First Agent-First Framework",
26
+ description:
27
+ "The first framework designed FOR AI agents. Reduce token usage by 70% with intent-driven development.",
28
+ images: [{ url: "https://ebade.dev/og-image.png" }],
29
+ },
30
+ twitter: {
31
+ card: "summary_large_image",
32
+ title: "ebade | The First Agent-First Framework",
33
+ description:
34
+ "The first framework designed FOR AI agents. Reduce token usage by 70%.",
35
+ images: ["https://ebade.dev/og-image.png"],
36
+ },
37
+ icons: {
38
+ icon: "/favicon.svg",
39
+ },
40
+ };
41
+
42
+ export default function RootLayout({
43
+ children,
44
+ }: {
45
+ children: React.ReactNode;
46
+ }) {
47
+ return (
48
+ <html lang="en" className={`${outfit.variable} ${jetbrainsMono.variable}`}>
49
+ <head>
50
+ <Script
51
+ src="https://www.googletagmanager.com/gtag/js?id=G-RMQ7E747ZH"
52
+ strategy="afterInteractive"
53
+ />
54
+ <Script id="google-analytics" strategy="afterInteractive">
55
+ {`
56
+ window.dataLayer = window.dataLayer || [];
57
+ function gtag(){dataLayer.push(arguments);}
58
+ gtag('js', new Date());
59
+ gtag('config', 'G-RMQ7E747ZH');
60
+ `}
61
+ </Script>
62
+ </head>
63
+ <body>{children}</body>
64
+ </html>
65
+ );
66
+ }
@@ -0,0 +1,374 @@
1
+ "use client";
2
+
3
+ import { useEffect, useRef, useState } from "react";
4
+ import Link from "next/link";
5
+ import dynamic from "next/dynamic";
6
+ import {
7
+ Cpu,
8
+ Github,
9
+ Zap,
10
+ Brain,
11
+ Leaf,
12
+ Code2,
13
+ Layers,
14
+ Terminal,
15
+ } from "lucide-react";
16
+
17
+ // Dynamically import Three.js canvas to avoid SSR issues
18
+ const ThreeCanvas = dynamic(() => import("@/components/ThreeCanvas"), {
19
+ ssr: false,
20
+ });
21
+
22
+ export default function HomePage() {
23
+ const [menuOpen, setMenuOpen] = useState(false);
24
+
25
+ const toggleMenu = () => {
26
+ setMenuOpen(!menuOpen);
27
+ };
28
+
29
+ const closeMenu = () => {
30
+ setMenuOpen(false);
31
+ };
32
+
33
+ return (
34
+ <>
35
+ <div className="page-wrapper">
36
+ <ThreeCanvas />
37
+ <div className="bg-glow"></div>
38
+ <div
39
+ className={`nav-overlay ${menuOpen ? "active" : ""}`}
40
+ onClick={closeMenu}
41
+ ></div>
42
+
43
+ <nav className="full-nav">
44
+ <div className="logo">
45
+ ebade<span>.dev</span>
46
+ </div>
47
+ <button
48
+ className={`hamburger ${menuOpen ? "active" : ""}`}
49
+ onClick={toggleMenu}
50
+ aria-label="Toggle menu"
51
+ aria-expanded={menuOpen}
52
+ >
53
+ <span className="hamburger-line"></span>
54
+ <span className="hamburger-line"></span>
55
+ <span className="hamburger-line"></span>
56
+ </button>
57
+ <div className={`nav-links ${menuOpen ? "open" : ""}`}>
58
+ <a href="#technology" onClick={closeMenu}>
59
+ Technology
60
+ </a>
61
+ <a href="#benchmarks" onClick={closeMenu}>
62
+ Benchmarks
63
+ </a>
64
+ <Link href="/playground" onClick={closeMenu}>
65
+ Playground
66
+ </Link>
67
+ <a
68
+ href="https://github.com/hasankemaldemirci/ebade"
69
+ target="_blank"
70
+ className="nav-github"
71
+ onClick={closeMenu}
72
+ >
73
+ <Github size={18} />
74
+ <span>GitHub</span>
75
+ </a>
76
+ <a
77
+ href="https://github.com/hasankemaldemirci/ebade#-quick-start"
78
+ target="_blank"
79
+ className="nav-cta"
80
+ onClick={closeMenu}
81
+ >
82
+ Get Started
83
+ </a>
84
+ </div>
85
+ </nav>
86
+
87
+ <main>
88
+ {/* Hero Section */}
89
+ <section className="hero-full">
90
+ <div className="hero-content">
91
+ <div className="badge-modern">
92
+ <Cpu className="icon-small" size={14} />
93
+ Protocol 0.1.0 // Alpha
94
+ </div>
95
+ <h1 className="glitch-text" data-version="1.0.1">
96
+ Code = f(<span>Intent</span>)
97
+ </h1>
98
+ <p className="hero-description">
99
+ <span className="ebade-brand">ebade</span> is an evolution in
100
+ abstract engineering. We don&apos;t build components; we model
101
+ intent. Designed for the era where <strong>Agents</strong> are
102
+ the primary developers.
103
+ </p>
104
+ <div className="hero-actions">
105
+ <a href="#technology" className="btn-glow">
106
+ Explore Protocol
107
+ </a>
108
+ <a
109
+ href="https://www.npmjs.com/package/ebade"
110
+ className="btn-minimal"
111
+ >
112
+ npm install ebade
113
+ </a>
114
+ </div>
115
+ </div>
116
+
117
+ <div className="scroll-indicator">
118
+ <div className="line"></div>
119
+ <span>INTENT_STREAM</span>
120
+ </div>
121
+ </section>
122
+
123
+ {/* Technology Section */}
124
+ <section id="technology" className="section-dark">
125
+ <div className="section-container">
126
+ <header className="section-header">
127
+ <div className="badge-accent">Philosophy</div>
128
+ <h2>
129
+ Agentic <span>Intent</span>
130
+ </h2>
131
+ <p>
132
+ Why write 100 lines of boilerplate when an agent can infer
133
+ implementation from 8 lines of pure intent?
134
+ </p>
135
+ </header>
136
+
137
+ <div className="comparison-modern">
138
+ {/* ebade Intent (Input) */}
139
+ <div className="code-card ebade">
140
+ <div className="card-header">
141
+ <div className="window-controls">
142
+ <span className="control close"></span>
143
+ <span className="control minimize"></span>
144
+ <span className="control maximize"></span>
145
+ </div>
146
+ <div className="card-tag">ebade Protocol (Intent)</div>
147
+ </div>
148
+ <pre>
149
+ <code>
150
+ <span className="keyword">@page</span>(
151
+ <span className="string">&apos;/products&apos;</span>)
152
+ {"\n"}
153
+ <span className="keyword">@intent</span>(
154
+ <span className="string">
155
+ &apos;product-catalog&apos;
156
+ </span>
157
+ ){"\n"}
158
+ <span className="keyword">@requires</span>([
159
+ <span className="string">&apos;products&apos;</span>])
160
+ {"\n"}
161
+ <span className="keyword">@compose</span>([
162
+ <span className="string">&apos;grid&apos;</span>,{" "}
163
+ <span className="string">&apos;loader&apos;</span>])
164
+ {"\n"}
165
+ <span className="keyword">export function</span>{" "}
166
+ <span className="function">Catalog</span>() {"{}"}
167
+ </code>
168
+ </pre>
169
+ </div>
170
+
171
+ <div className="transform-arrow">
172
+ <Zap size={24} />
173
+ </div>
174
+
175
+ {/* React Output (Generated Code) */}
176
+ <div className="code-card legacy">
177
+ <div className="card-header">
178
+ <div className="window-controls">
179
+ <span className="control close"></span>
180
+ <span className="control minimize"></span>
181
+ <span className="control maximize"></span>
182
+ </div>
183
+ <div className="card-tag">Generated: React + Next.js</div>
184
+ </div>
185
+ <pre>
186
+ <code>{`export default function ProductList() {
187
+ const [items, setItems] = useState([]);
188
+ const [loading, setLoading] = useState(true);
189
+
190
+ useEffect(() => {
191
+ async function load() {
192
+ const res = await fetch('/api/products');
193
+ const json = await res.json();
194
+ setItems(json);
195
+ setLoading(false);
196
+ }
197
+ load();
198
+ }, []);
199
+
200
+ if (loading) return <Spinner />;
201
+
202
+ return (
203
+ <section className="grid">
204
+ {items.map(p => <Card key={p.id} {...p} />)}
205
+ </section>
206
+ );
207
+ }`}</code>
208
+ </pre>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ </section>
213
+
214
+ {/* Benchmarks Section */}
215
+ <section id="benchmarks" className="benchmark-minimal">
216
+ <div className="section-container">
217
+ <header
218
+ className="section-header"
219
+ style={{ marginBottom: "4rem" }}
220
+ >
221
+ <div className="badge-accent">Efficiency</div>
222
+ <h2>
223
+ Proven <span>Performance</span>
224
+ </h2>
225
+ <p
226
+ style={{
227
+ margin: "0 auto",
228
+ color: "var(--text-dim)",
229
+ maxWidth: "600px",
230
+ }}
231
+ >
232
+ Real-world benchmarks demonstrating how ebade slashes
233
+ operational costs and cognitive load for AI agents.
234
+ </p>
235
+ </header>
236
+ <div className="stats-box">
237
+ <div className="stat">
238
+ <div className="stat-icon">
239
+ <Zap size={32} />
240
+ </div>
241
+ <span className="val">70%</span>
242
+ <span className="label">Token Reduction</span>
243
+ </div>
244
+ <div className="stat-divider"></div>
245
+ <div className="stat">
246
+ <div className="stat-icon">
247
+ <Brain size={32} />
248
+ </div>
249
+ <span className="val">4.1x</span>
250
+ <span className="label">Agent Context Efficiency</span>
251
+ </div>
252
+ <div className="stat-divider"></div>
253
+ <div className="stat">
254
+ <div
255
+ className="stat-icon"
256
+ style={{ color: "var(--accent-emerald)" }}
257
+ >
258
+ <Leaf size={32} />
259
+ </div>
260
+ <span className="val">Zero</span>
261
+ <span className="label">Sustainable AI Core</span>
262
+ </div>
263
+ </div>
264
+ </div>
265
+ </section>
266
+
267
+ {/* Features Section */}
268
+ <section className="features-grid-section">
269
+ <div className="section-container">
270
+ <header className="section-header">
271
+ <div className="badge-accent">Standard</div>
272
+ <h2 style={{ color: "var(--text)" }}>
273
+ The ebade <span>Ecosystem</span>
274
+ </h2>
275
+ <p style={{ margin: "0 auto", color: "var(--text-dim)" }}>
276
+ Engineered for high-autonomy agents and complex product
277
+ lifecycles.
278
+ </p>
279
+ </header>
280
+ <div className="grid-3">
281
+ <div className="feature-item">
282
+ <Code2 size={40} />
283
+ <h3>Agent-Native</h3>
284
+ <p>
285
+ Designed as a first-class citizen for LLMs. Structured
286
+ intent that models understand instantly.
287
+ </p>
288
+ </div>
289
+ <div className="feature-item">
290
+ <Layers size={40} />
291
+ <h3>Meta-Abstraction</h3>
292
+ <p>
293
+ Platform-agnostic intent layer. Currently optimized for
294
+ Next.js. The same intent will power mobile, backend, and
295
+ beyond.
296
+ </p>
297
+ </div>
298
+ <div className="feature-item">
299
+ <Terminal size={40} />
300
+ <h3>Binary Scaffold</h3>
301
+ <p>
302
+ Generate full, production-ready project structures from a
303
+ single schema definition.
304
+ </p>
305
+ </div>
306
+ </div>
307
+ </div>
308
+ </section>
309
+ </main>
310
+
311
+ {/* Footer */}
312
+ <footer className="site-footer">
313
+ <div className="footer-container">
314
+ <div className="footer-brand">
315
+ <div className="footer-logo">🧠 ebade</div>
316
+ <p className="footer-slogan">
317
+ Capture the essence of code.
318
+ <br />
319
+ Less tokens. Less carbon. Same result. 🌱
320
+ </p>
321
+ </div>
322
+ <div className="footer-links">
323
+ <div className="footer-column">
324
+ <h4>Product</h4>
325
+ <a href="#technology">Technology</a>
326
+ <a href="#benchmarks">Benchmarks</a>
327
+ <a
328
+ href="https://github.com/hasankemaldemirci/ebade/tree/main/examples"
329
+ target="_blank"
330
+ >
331
+ Examples
332
+ </a>
333
+ </div>
334
+ <div className="footer-column">
335
+ <h4>Resources</h4>
336
+ <a
337
+ href="https://github.com/hasankemaldemirci/ebade"
338
+ target="_blank"
339
+ >
340
+ GitHub
341
+ </a>
342
+ <a href="https://www.npmjs.com/package/ebade" target="_blank">
343
+ npm
344
+ </a>
345
+ <a
346
+ href="https://github.com/hasankemaldemirci/ebade/blob/main/ROADMAP.md"
347
+ target="_blank"
348
+ >
349
+ Roadmap
350
+ </a>
351
+ </div>
352
+ <div className="footer-column">
353
+ <h4>Contact</h4>
354
+ <a href="mailto:hello@ebade.dev">hello@ebade.dev</a>
355
+ <a
356
+ href="https://github.com/sponsors/hasankemaldemirci"
357
+ target="_blank"
358
+ >
359
+ Sponsor 💜
360
+ </a>
361
+ </div>
362
+ </div>
363
+ </div>
364
+ <div className="footer-bottom">
365
+ <p>© 2026 ebade. The Agent-First Framework.</p>
366
+ <p className="footer-tagline">
367
+ Code = f(Intent) // Kind to Earth 🌍
368
+ </p>
369
+ </div>
370
+ </footer>
371
+ </div>
372
+ </>
373
+ );
374
+ }