ebade 0.1.0 β 0.2.1
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.
- package/.github/FUNDING.yml +2 -0
- package/README.md +33 -20
- package/ROADMAP.md +25 -13
- package/benchmarks/RESULTS.md +1 -1
- package/cli/scaffold.js +129 -43
- package/demo.gif +0 -0
- package/demo.mp4 +0 -0
- package/demo.tape +63 -0
- package/docs/GREEN-AI.md +2 -2
- package/examples/saas-dashboard.ebade.yaml +299 -0
- package/landing/_headers +6 -0
- package/landing/index.html +17 -7
- package/landing/og-readme.png +0 -0
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# ebade π§
|
|
2
2
|
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/ebade)
|
|
6
|
+
[](https://ebade.dev)
|
|
3
7
|
[](https://opensource.org/licenses/MIT)
|
|
4
8
|
[](./packages/mcp-server)
|
|
5
9
|
[](./ROADMAP.md)
|
|
6
|
-
[](./docs/GREEN-AI.md)
|
|
11
|
+
[](https://github.com/sponsors/hasankemaldemirci)
|
|
7
12
|
|
|
8
|
-
> **The first framework designed
|
|
13
|
+
> **The first framework designed for AI agents, readable by humans.**
|
|
9
14
|
>
|
|
10
15
|
> `Code = f(ebade)`
|
|
11
16
|
>
|
|
@@ -72,16 +77,17 @@ npx ebade dev
|
|
|
72
77
|
|
|
73
78
|
---
|
|
74
79
|
|
|
75
|
-
## π Benchmark: ~
|
|
80
|
+
## π Benchmark: ~70% Fewer Tokens (Tested)
|
|
76
81
|
|
|
77
82
|
We measured token usage across common development tasks:
|
|
78
83
|
|
|
79
84
|
| Task | Next.js | ebade | Savings | Efficiency |
|
|
80
|
-
|
|
85
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
81
86
|
| Checkout Page | 258 tokens | 66 tokens | **74.4%** | 3.9x |
|
|
82
87
|
| Product Listing | 133 tokens | 63 tokens | **52.6%** | 2.1x |
|
|
83
88
|
| User Auth | 148 tokens | 56 tokens | **62.2%** | 2.6x |
|
|
84
|
-
|
|
|
89
|
+
| SaaS Dashboard β | 1,850 tokens | 245 tokens | **86.8%** | 7.6x |
|
|
90
|
+
| **Average** | | | **68.8%** | **4.1x** |
|
|
85
91
|
|
|
86
92
|
> *For full project scaffolding, savings can reach 75-92%.*
|
|
87
93
|
|
|
@@ -90,7 +96,7 @@ We measured token usage across common development tasks:
|
|
|
90
96
|
At scale (1M AI coding sessions):
|
|
91
97
|
|
|
92
98
|
| Framework | Token Cost | Savings |
|
|
93
|
-
|
|
99
|
+
| :--- | :--- | :--- |
|
|
94
100
|
| Next.js | $5,390 | - |
|
|
95
101
|
| **ebade** | **$1,850** | **$3,540** |
|
|
96
102
|
|
|
@@ -104,8 +110,9 @@ At scale (1M AI coding sessions):
|
|
|
104
110
|
|
|
105
111
|
AI agents (Cursor, Copilot, Claude) write code for **human-designed frameworks**:
|
|
106
112
|
|
|
107
|
-
```
|
|
113
|
+
```text
|
|
108
114
|
AI: "Is this a server or client component?"
|
|
115
|
+
|
|
109
116
|
AI: "App router or pages router?"
|
|
110
117
|
AI: "useState or useReducer?"
|
|
111
118
|
AI: "Where does this file go?"
|
|
@@ -117,7 +124,7 @@ Every decision is **ambiguous**. AI guesses. Sometimes wrong.
|
|
|
117
124
|
|
|
118
125
|
**ebade** - A framework where AI expresses **intent**, not implementation.
|
|
119
126
|
|
|
120
|
-
```
|
|
127
|
+
```text
|
|
121
128
|
Human describes β AI writes intent β ebade compiles β Working code
|
|
122
129
|
β
|
|
123
130
|
No ambiguity here
|
|
@@ -128,11 +135,11 @@ Human describes β AI writes intent β ebade compiles β Working code
|
|
|
128
135
|
## π¦ Packages
|
|
129
136
|
|
|
130
137
|
| Package | Description | Status |
|
|
131
|
-
|
|
138
|
+
| :--- | :--- | :--- |
|
|
139
|
+
| **`ebade`** | Core Framework & CLI | β
Alpha |
|
|
132
140
|
| [@ebade/mcp-server](./packages/mcp-server) | MCP Server for AI agents | β
Alpha |
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
| @ebade/vscode | VS Code extension | π Planned |
|
|
141
|
+
| `@ebade/compiler` | Advanced Intent Compiler | π§ Planning |
|
|
142
|
+
| `@ebade/vscode` | VS Code extension | π Planned |
|
|
136
143
|
|
|
137
144
|
---
|
|
138
145
|
|
|
@@ -215,7 +222,7 @@ pages:
|
|
|
215
222
|
## π The Paradigm Shift
|
|
216
223
|
|
|
217
224
|
| Era | Paradigm | Core Question |
|
|
218
|
-
|
|
225
|
+
| :--- | :--- | :--- |
|
|
219
226
|
| 2000s | jQuery | "How do I manipulate DOM?" |
|
|
220
227
|
| 2013 | React | "What if UI = f(state)?" |
|
|
221
228
|
| 2024 | AI Coding | "AI writes code, but for humans" |
|
|
@@ -247,17 +254,23 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
|
247
254
|
|
|
248
255
|
---
|
|
249
256
|
|
|
257
|
+
## π Support the Movement
|
|
258
|
+
|
|
259
|
+
**ebade** is an ambitious project aiming to redefine how we build software in the age of AI. Your support helps us move faster, maintain high-quality documentation, and build a more sustainable "Green AI" future.
|
|
260
|
+
|
|
261
|
+
- **[Become a GitHub Sponsor](https://github.com/sponsors/hasankemaldemirci)** π
|
|
262
|
+
- **Star the repo** to show your support β
|
|
263
|
+
- **Share the project** with other AI enthusiasts π
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
250
267
|
## π License
|
|
251
268
|
|
|
252
269
|
MIT Β© ebade Contributors β Made with β€οΈ in TΓΌrkiye πΉπ·
|
|
253
270
|
|
|
254
271
|
---
|
|
255
272
|
|
|
256
|
-
|
|
257
|
-
<strong>Built for AI. Readable by humans. Revolutionary by design.</strong>
|
|
258
|
-
</p>
|
|
273
|
+
**Built for AI. Readable by humans. Revolutionary by design.**
|
|
259
274
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
ebade makes frameworks better for AI.</i>
|
|
263
|
-
</p>
|
|
275
|
+
*TypeScript made JavaScript better for humans.*
|
|
276
|
+
*ebade makes frameworks better for AI.*
|
package/ROADMAP.md
CHANGED
|
@@ -12,9 +12,9 @@ It's more efficient, deterministic, and KIND TO EARTH. π±
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
## Phase 1: Foundation (Week 1-2) β
|
|
15
|
+
## Phase 1: Foundation (Week 1-2) β
COMPLETE
|
|
16
16
|
|
|
17
|
-
### 1.1 MCP Server
|
|
17
|
+
### 1.1 MCP Server β
|
|
18
18
|
|
|
19
19
|
Make ebade usable by AI agents RIGHT NOW.
|
|
20
20
|
|
|
@@ -24,7 +24,19 @@ Make ebade usable by AI agents RIGHT NOW.
|
|
|
24
24
|
- [x] `ebade_compile` tool - compile single ebade to code
|
|
25
25
|
- [x] `ebade_generate` tool - infer ebade from natural language
|
|
26
26
|
|
|
27
|
-
### 1.2
|
|
27
|
+
### 1.2 CLI Premium Experience β
|
|
28
|
+
|
|
29
|
+
- [x] ASCII Art logo on startup
|
|
30
|
+
- [x] Spinner animations for progress
|
|
31
|
+
- [x] Statistics summary (files, token savings, time)
|
|
32
|
+
- [x] "Generated via ebade" headers in all output files
|
|
33
|
+
|
|
34
|
+
### 1.3 Examples & Templates β
|
|
35
|
+
|
|
36
|
+
- [x] E-commerce template (193 lines)
|
|
37
|
+
- [x] SaaS Dashboard template (300 lines, multi-tenant, billing, team management)
|
|
38
|
+
|
|
39
|
+
### 1.4 Real Compiler (In Progress)
|
|
28
40
|
|
|
29
41
|
Replace string templates with actual AST-based compilation.
|
|
30
42
|
|
|
@@ -32,7 +44,7 @@ Replace string templates with actual AST-based compilation.
|
|
|
32
44
|
- [ ] Code generator (AST β React/Next.js)
|
|
33
45
|
- [ ] Support for multiple framework targets
|
|
34
46
|
|
|
35
|
-
### 1.
|
|
47
|
+
### 1.5 CLI Improvements
|
|
36
48
|
|
|
37
49
|
- [ ] `ebade init` - interactive project setup
|
|
38
50
|
- [ ] `ebade dev` - watch mode with local agent sync
|
|
@@ -71,7 +83,7 @@ Replace string templates with actual AST-based compilation.
|
|
|
71
83
|
|
|
72
84
|
### 3.2 Framework Targets
|
|
73
85
|
|
|
74
|
-
- [
|
|
86
|
+
- [x] Next.js App Router β
(v0.1)
|
|
75
87
|
- [ ] Vue 3 + Nuxt
|
|
76
88
|
- [ ] Svelte + SvelteKit
|
|
77
89
|
- [ ] Mobile (React Native / Flutter)
|
|
@@ -99,20 +111,20 @@ Replace string templates with actual AST-based compilation.
|
|
|
99
111
|
|
|
100
112
|
## Success Metrics (3 Months)
|
|
101
113
|
|
|
102
|
-
| Metric | Target |
|
|
103
|
-
| :--- | :--- | :--- |
|
|
104
|
-
| Token Savings | >70% |
|
|
105
|
-
| Carbon Saved | >100kg |
|
|
106
|
-
| Framework Targets | 3 |
|
|
107
|
-
| Community Size | 1,000 "Badiks" |
|
|
114
|
+
| Metric | Target | Current | Status |
|
|
115
|
+
| :--- | :--- | :--- | :--- |
|
|
116
|
+
| Token Savings | >70% | ~70% | β
|
|
|
117
|
+
| Carbon Saved | >100kg | TBD | π |
|
|
118
|
+
| Framework Targets | 3 | 1 | π |
|
|
119
|
+
| Community Size | 1,000 "Badiks" | 0 | π |
|
|
108
120
|
|
|
109
121
|
---
|
|
110
122
|
|
|
111
123
|
## Current Status
|
|
112
124
|
|
|
113
|
-
**Phase 1
|
|
125
|
+
**Phase 1 - Foundation** β NEARLY COMPLETE
|
|
114
126
|
|
|
115
|
-
The MCP server is live. AI agents can now use ebade to scaffold full Next.js apps with
|
|
127
|
+
The MCP server is live. CLI has premium UX. Two comprehensive examples (E-commerce + SaaS Dashboard) are ready. AI agents can now use ebade to scaffold full Next.js apps with **~70% fewer tokens**.
|
|
116
128
|
|
|
117
129
|
---
|
|
118
130
|
|
package/benchmarks/RESULTS.md
CHANGED
package/cli/scaffold.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import fs from "fs";
|
|
11
11
|
import path from "path";
|
|
12
12
|
import yaml from "yaml";
|
|
13
|
+
import ora from "ora";
|
|
13
14
|
|
|
14
15
|
// ============================================
|
|
15
16
|
// ANSI Renk KodlarΔ± (Terminal Γ§Δ±ktΔ±sΔ± iΓ§in)
|
|
@@ -23,8 +24,22 @@ const colors = {
|
|
|
23
24
|
yellow: "\x1b[33m",
|
|
24
25
|
cyan: "\x1b[36m",
|
|
25
26
|
magenta: "\x1b[35m",
|
|
27
|
+
red: "\x1b[31m",
|
|
28
|
+
gray: "\x1b[90m",
|
|
26
29
|
};
|
|
27
30
|
|
|
31
|
+
// ASCII Art Logo
|
|
32
|
+
const LOGO = `
|
|
33
|
+
${colors.magenta} ββββββββ${colors.cyan}βββββββ ${colors.magenta}ββββββ ${colors.cyan}βββββββ ${colors.magenta}ββββββββ
|
|
34
|
+
${colors.magenta} ββββββββ${colors.cyan}ββββββββ${colors.magenta}ββββββββ${colors.cyan}ββββββββ${colors.magenta}ββββββββ
|
|
35
|
+
${colors.magenta} ββββββ ${colors.cyan}ββββββββ${colors.magenta}ββββββββ${colors.cyan}βββ βββ${colors.magenta}ββββββ
|
|
36
|
+
${colors.magenta} ββββββ ${colors.cyan}ββββββββ${colors.magenta}ββββββββ${colors.cyan}βββ βββ${colors.magenta}ββββββ
|
|
37
|
+
${colors.magenta} ββββββββ${colors.cyan}ββββββββ${colors.magenta}βββ βββ${colors.cyan}ββββββββ${colors.magenta}ββββββββ
|
|
38
|
+
${colors.magenta} ββββββββ${colors.cyan}βββββββ ${colors.magenta}βββ βββ${colors.cyan}βββββββ ${colors.magenta}ββββββββ${colors.reset}
|
|
39
|
+
|
|
40
|
+
${colors.dim}β¨ Agent-First Framework ${colors.yellow}v0.1.0${colors.reset}
|
|
41
|
+
`;
|
|
42
|
+
|
|
28
43
|
const log = {
|
|
29
44
|
info: (msg) => console.log(`${colors.blue}βΉ${colors.reset} ${msg}`),
|
|
30
45
|
success: (msg) => console.log(`${colors.green}β${colors.reset} ${msg}`),
|
|
@@ -115,13 +130,16 @@ function generatePage(page, design) {
|
|
|
115
130
|
|
|
116
131
|
return `
|
|
117
132
|
/**
|
|
133
|
+
* π§ Generated via ebade - The Agent-First Framework
|
|
134
|
+
* https://github.com/hasankemaldemirci/ebade
|
|
135
|
+
*
|
|
118
136
|
* @page('${page.path}')
|
|
119
|
-
* @
|
|
120
|
-
* Built with ebade
|
|
137
|
+
* @intent('${page.intent}')
|
|
121
138
|
*/
|
|
122
139
|
|
|
123
140
|
${componentImports}
|
|
124
141
|
|
|
142
|
+
|
|
125
143
|
export default function ${toPascalCase(page.intent)}Page() {
|
|
126
144
|
return (
|
|
127
145
|
<main className="page ${page.intent}">
|
|
@@ -141,10 +159,13 @@ function generateApiRoute(endpoint) {
|
|
|
141
159
|
const handlers = endpoint.methods
|
|
142
160
|
.map(
|
|
143
161
|
(method) => `
|
|
162
|
+
/**
|
|
163
|
+
* π§ Generated via ebade - The Agent-First Framework
|
|
164
|
+
* ${method} ${endpoint.path}
|
|
165
|
+
* Auth: ${endpoint.auth || "none"}
|
|
166
|
+
*/
|
|
144
167
|
export async function ${method}(request) {
|
|
145
|
-
// TODO: Implement ${method} handler
|
|
146
|
-
// Auth: ${endpoint.auth || "none"}
|
|
147
|
-
// Built with ebade
|
|
168
|
+
// TODO: Implement ${method} handler
|
|
148
169
|
|
|
149
170
|
return Response.json({
|
|
150
171
|
message: "${method} ${endpoint.path} - Not implemented"
|
|
@@ -494,12 +515,10 @@ function ensureDir(dir) {
|
|
|
494
515
|
// Main Scaffold Function
|
|
495
516
|
// ============================================
|
|
496
517
|
function scaffold(ebadePath, outputDir) {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
ββββββββββββββββββββββββββββββββββββββββββ${colors.reset}
|
|
502
|
-
`);
|
|
518
|
+
const startTime = Date.now();
|
|
519
|
+
let stats = { pages: 0, components: 0, apiRoutes: 0, files: 0 };
|
|
520
|
+
|
|
521
|
+
console.log(LOGO);
|
|
503
522
|
|
|
504
523
|
// Parse ebade file
|
|
505
524
|
log.info(`Reading ebade file: ${ebadePath}`);
|
|
@@ -534,6 +553,7 @@ ${colors.bright}${colors.magenta}βββββββββββββββ
|
|
|
534
553
|
log.section("Generating pages");
|
|
535
554
|
|
|
536
555
|
if (config.pages) {
|
|
556
|
+
const spinner = ora("Generating pages...").start();
|
|
537
557
|
config.pages.forEach((page) => {
|
|
538
558
|
const pagePath =
|
|
539
559
|
page.path === "/"
|
|
@@ -545,8 +565,12 @@ ${colors.bright}${colors.magenta}βββββββββββββββ
|
|
|
545
565
|
|
|
546
566
|
const pageContent = generatePage(page, config.design);
|
|
547
567
|
fs.writeFileSync(path.join(projectDir, pagePath), pageContent.trim());
|
|
548
|
-
|
|
568
|
+
stats.pages++;
|
|
569
|
+
stats.files++;
|
|
549
570
|
});
|
|
571
|
+
spinner.succeed(
|
|
572
|
+
`Generated ${colors.bright}${stats.pages}${colors.reset} pages`
|
|
573
|
+
);
|
|
550
574
|
}
|
|
551
575
|
|
|
552
576
|
// ========== Generate Components ==========
|
|
@@ -557,6 +581,7 @@ ${colors.bright}${colors.magenta}βββββββββββββββ
|
|
|
557
581
|
page.components?.forEach((c) => allComponents.add(c));
|
|
558
582
|
});
|
|
559
583
|
|
|
584
|
+
const spinner2 = ora("Generating components...").start();
|
|
560
585
|
allComponents.forEach((component) => {
|
|
561
586
|
const componentPath = `components/${component}.tsx`;
|
|
562
587
|
const template = componentTemplates[component];
|
|
@@ -569,13 +594,18 @@ ${colors.bright}${colors.magenta}βββββββββββββββ
|
|
|
569
594
|
)}() {\n return <div>${component}</div>;\n}\n`;
|
|
570
595
|
|
|
571
596
|
fs.writeFileSync(path.join(projectDir, componentPath), content.trim());
|
|
572
|
-
|
|
597
|
+
stats.components++;
|
|
598
|
+
stats.files++;
|
|
573
599
|
});
|
|
600
|
+
spinner2.succeed(
|
|
601
|
+
`Generated ${colors.bright}${stats.components}${colors.reset} components`
|
|
602
|
+
);
|
|
574
603
|
|
|
575
604
|
// ========== Generate API Routes ==========
|
|
576
605
|
log.section("Generating API routes");
|
|
577
606
|
|
|
578
607
|
if (config.api) {
|
|
608
|
+
const spinner3 = ora("Generating API routes...").start();
|
|
579
609
|
config.api.forEach((endpoint) => {
|
|
580
610
|
const apiPath = `app/api${endpoint.path}/route.ts`;
|
|
581
611
|
const apiDir = path.dirname(path.join(projectDir, apiPath));
|
|
@@ -583,8 +613,12 @@ ${colors.bright}${colors.magenta}βββββββββββββββ
|
|
|
583
613
|
|
|
584
614
|
const routeContent = generateApiRoute(endpoint);
|
|
585
615
|
fs.writeFileSync(path.join(projectDir, apiPath), routeContent.trim());
|
|
586
|
-
|
|
616
|
+
stats.apiRoutes++;
|
|
617
|
+
stats.files++;
|
|
587
618
|
});
|
|
619
|
+
spinner3.succeed(
|
|
620
|
+
`Generated ${colors.bright}${stats.apiRoutes}${colors.reset} API routes`
|
|
621
|
+
);
|
|
588
622
|
}
|
|
589
623
|
|
|
590
624
|
// ========== Generate Design System ==========
|
|
@@ -651,23 +685,44 @@ ${colors.bright}${colors.magenta}βββββββββββββββ
|
|
|
651
685
|
log.file("project.ebade.yaml (for agent reference)");
|
|
652
686
|
|
|
653
687
|
// ========== Summary ==========
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
${colors.green}β${colors.reset} ebade scaffold complete!
|
|
688
|
+
const duration = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
689
|
+
const estimatedTokenSavings = Math.round(stats.files * 35); // ~35 tokens saved per file
|
|
657
690
|
|
|
658
|
-
|
|
659
|
-
${colors.
|
|
660
|
-
${colors.
|
|
691
|
+
console.log(`
|
|
692
|
+
${colors.bright}${colors.green} β${"β".repeat(41)}β${colors.reset}
|
|
693
|
+
${colors.green} β${colors.reset} ${colors.bright}β
ebade scaffold complete!${
|
|
694
|
+
colors.reset
|
|
695
|
+
} ${colors.green}β${colors.reset}
|
|
696
|
+
${colors.green} β${"β".repeat(41)}β€${colors.reset}
|
|
697
|
+
${colors.green} β${colors.reset} ${colors.dim}Project:${
|
|
698
|
+
colors.reset
|
|
699
|
+
} ${config.name.padEnd(26)} ${colors.green}β${colors.reset}
|
|
700
|
+
${colors.green} β${colors.reset} ${colors.dim}Type:${
|
|
701
|
+
colors.reset
|
|
702
|
+
} ${config.type.padEnd(26)} ${colors.green}β${colors.reset}
|
|
703
|
+
${colors.green} β${"β".repeat(41)}β€${colors.reset}
|
|
704
|
+
${colors.green} β${colors.reset} ${colors.cyan}π Files Created:${
|
|
705
|
+
colors.reset
|
|
706
|
+
} ${String(stats.files).padEnd(18)} ${colors.green}β${colors.reset}
|
|
707
|
+
${colors.green} β${colors.reset} ${colors.cyan}π Token Savings:${
|
|
708
|
+
colors.reset
|
|
709
|
+
} ~${String(estimatedTokenSavings).padEnd(17)} ${colors.green}β${
|
|
710
|
+
colors.reset
|
|
711
|
+
}
|
|
712
|
+
${colors.green} β${colors.reset} ${colors.cyan}β± Completed in:${
|
|
713
|
+
colors.reset
|
|
714
|
+
} ${String(duration + "s").padEnd(18)} ${colors.green}β${colors.reset}
|
|
715
|
+
${colors.green} β${"β".repeat(41)}β${colors.reset}
|
|
661
716
|
|
|
662
717
|
${colors.dim}Next steps:${colors.reset}
|
|
663
|
-
1. cd ${projectDir}
|
|
664
|
-
2. npm install
|
|
665
|
-
3. npm run dev
|
|
666
|
-
|
|
667
|
-
${colors.yellow}
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
718
|
+
${colors.gray}1.${colors.reset} cd ${colors.cyan}${projectDir}${colors.reset}
|
|
719
|
+
${colors.gray}2.${colors.reset} npm install
|
|
720
|
+
${colors.gray}3.${colors.reset} npm run dev
|
|
721
|
+
|
|
722
|
+
${colors.yellow}π‘ Tip:${colors.reset} AI Agents can read ${
|
|
723
|
+
colors.cyan
|
|
724
|
+
}project.ebade.yaml${colors.reset}
|
|
725
|
+
to understand and iterate on this project.
|
|
671
726
|
`);
|
|
672
727
|
}
|
|
673
728
|
|
|
@@ -675,32 +730,63 @@ ${colors.bright}${colors.green}ββββββββββββββββ
|
|
|
675
730
|
// CLI Entry Point
|
|
676
731
|
// ============================================
|
|
677
732
|
const args = process.argv.slice(2);
|
|
733
|
+
const command = args[0];
|
|
678
734
|
|
|
679
|
-
|
|
735
|
+
function showHelp() {
|
|
680
736
|
console.log(`
|
|
681
|
-
${colors.bright}ebade
|
|
737
|
+
${colors.bright}ebade CLI${colors.reset} - The Agent-First Framework
|
|
682
738
|
|
|
683
|
-
Usage
|
|
684
|
-
npx ebade
|
|
739
|
+
${colors.dim}Usage:${colors.reset}
|
|
740
|
+
npx ebade <command> [options]
|
|
685
741
|
|
|
686
|
-
|
|
742
|
+
${colors.dim}Commands:${colors.reset}
|
|
743
|
+
scaffold <file> [output] Scaffold a project from ebade file
|
|
744
|
+
|
|
745
|
+
${colors.dim}Examples:${colors.reset}
|
|
687
746
|
npx ebade scaffold examples/ecommerce.ebade.yaml ./output
|
|
747
|
+
npx ebade scaffold my-project.ebade.yaml
|
|
688
748
|
|
|
689
|
-
|
|
690
|
-
ebade
|
|
691
|
-
output-dir Output directory (default: ./output)
|
|
749
|
+
${colors.dim}Learn more:${colors.reset}
|
|
750
|
+
https://ebade.dev
|
|
692
751
|
`);
|
|
693
|
-
process.exit(1);
|
|
694
752
|
}
|
|
695
753
|
|
|
696
|
-
|
|
697
|
-
|
|
754
|
+
if (
|
|
755
|
+
args.length === 0 ||
|
|
756
|
+
command === "help" ||
|
|
757
|
+
command === "--help" ||
|
|
758
|
+
command === "-h"
|
|
759
|
+
) {
|
|
760
|
+
showHelp();
|
|
761
|
+
process.exit(0);
|
|
762
|
+
}
|
|
698
763
|
|
|
699
|
-
if (
|
|
764
|
+
if (command === "scaffold") {
|
|
765
|
+
const ebadeFile = args[1];
|
|
766
|
+
const outputDir = args[2] || "./output";
|
|
767
|
+
|
|
768
|
+
if (!ebadeFile) {
|
|
769
|
+
console.error(
|
|
770
|
+
`${colors.red}Error:${colors.reset} Please provide an ebade file path.`
|
|
771
|
+
);
|
|
772
|
+
console.log(
|
|
773
|
+
`\n${colors.dim}Usage:${colors.reset} npx ebade scaffold <file.ebade.yaml> [output-dir]\n`
|
|
774
|
+
);
|
|
775
|
+
process.exit(1);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
if (!fs.existsSync(ebadeFile)) {
|
|
779
|
+
console.error(
|
|
780
|
+
`${colors.red}Error:${colors.reset} ebade file not found: ${ebadeFile}`
|
|
781
|
+
);
|
|
782
|
+
process.exit(1);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
scaffold(ebadeFile, outputDir);
|
|
786
|
+
} else {
|
|
700
787
|
console.error(
|
|
701
|
-
`${colors.red}Error:${colors.reset}
|
|
788
|
+
`${colors.red}Error:${colors.reset} Unknown command: ${command}`
|
|
702
789
|
);
|
|
790
|
+
showHelp();
|
|
703
791
|
process.exit(1);
|
|
704
792
|
}
|
|
705
|
-
|
|
706
|
-
scaffold(ebadeFile, outputDir);
|
package/demo.gif
ADDED
|
Binary file
|
package/demo.mp4
ADDED
|
Binary file
|
package/demo.tape
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# ebade Demo Video Script
|
|
2
|
+
# Run with: vhs demo.tape
|
|
3
|
+
# Outputs: demo.gif + demo.mp4
|
|
4
|
+
|
|
5
|
+
# Outputs - both formats
|
|
6
|
+
Output demo.gif
|
|
7
|
+
Output demo.mp4
|
|
8
|
+
|
|
9
|
+
# Configuration
|
|
10
|
+
Set FontSize 20
|
|
11
|
+
Set Width 1200
|
|
12
|
+
Set Height 700
|
|
13
|
+
Set Theme "Catppuccin Mocha"
|
|
14
|
+
Set Padding 30
|
|
15
|
+
Set TypingSpeed 50ms
|
|
16
|
+
Set PlaybackSpeed 1.0
|
|
17
|
+
|
|
18
|
+
# Clear and prepare
|
|
19
|
+
Hide
|
|
20
|
+
Type "clear"
|
|
21
|
+
Enter
|
|
22
|
+
Sleep 500ms
|
|
23
|
+
Show
|
|
24
|
+
|
|
25
|
+
# Intro
|
|
26
|
+
Type "# π§ ebade - The Agent-First Framework"
|
|
27
|
+
Enter
|
|
28
|
+
Sleep 1.2s
|
|
29
|
+
|
|
30
|
+
Type "# Scaffold a full SaaS Dashboard in seconds..."
|
|
31
|
+
Enter
|
|
32
|
+
Sleep 1.5s
|
|
33
|
+
|
|
34
|
+
# The magic command with npx
|
|
35
|
+
Type "npx ebade scaffold examples/saas-dashboard.ebade.yaml ./output/demo"
|
|
36
|
+
Sleep 500ms
|
|
37
|
+
Enter
|
|
38
|
+
|
|
39
|
+
# Wait for CLI output (ASCII logo + spinners + summary)
|
|
40
|
+
Sleep 10s
|
|
41
|
+
|
|
42
|
+
# Show generated file
|
|
43
|
+
Type ""
|
|
44
|
+
Enter
|
|
45
|
+
Sleep 500ms
|
|
46
|
+
|
|
47
|
+
Type "head -12 output/demo/AnalyticsHQ/app/page.tsx"
|
|
48
|
+
Enter
|
|
49
|
+
Sleep 4s
|
|
50
|
+
|
|
51
|
+
# Final tagline
|
|
52
|
+
Type ""
|
|
53
|
+
Enter
|
|
54
|
+
Type "# β
51 files. ~70% fewer tokens. In 0.1s."
|
|
55
|
+
Enter
|
|
56
|
+
Sleep 500ms
|
|
57
|
+
Type "# π± Green AI. Kind to Earth."
|
|
58
|
+
Enter
|
|
59
|
+
Sleep 500ms
|
|
60
|
+
Type "# β ebade.dev"
|
|
61
|
+
Enter
|
|
62
|
+
|
|
63
|
+
Sleep 3s
|
package/docs/GREEN-AI.md
CHANGED
|
@@ -25,7 +25,7 @@ Every token an AI generates requires:
|
|
|
25
25
|
| Vue.js | 420,000,000 | ~78% | ~21.0 kg |
|
|
26
26
|
| **ebade** | **185,000,000** | **34%** | **~9.2 kg** |
|
|
27
27
|
|
|
28
|
-
**ebade uses
|
|
28
|
+
**ebade uses 70% less compute for the same output.** π±
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
@@ -70,7 +70,7 @@ Add this to your repository to show your commitment to sustainable AI developmen
|
|
|
70
70
|
[](https://github.com/ebade)
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
> π± **Built with ebade β saving
|
|
73
|
+
> π± **Built with ebade β saving 70% of AI compute.**
|
|
74
74
|
|
|
75
75
|
---
|
|
76
76
|
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# ebade Project Definition File
|
|
2
|
+
# SaaS Dashboard - Subscription-based analytics platform
|
|
3
|
+
# -----------------------------------------------------------
|
|
4
|
+
|
|
5
|
+
name: "AnalyticsHQ"
|
|
6
|
+
type: "saas-dashboard"
|
|
7
|
+
description: "Modern SaaS dashboard with subscriptions, team management, and analytics"
|
|
8
|
+
|
|
9
|
+
# Core features of this SaaS
|
|
10
|
+
features:
|
|
11
|
+
- user-auth
|
|
12
|
+
- team-management
|
|
13
|
+
- subscription-billing
|
|
14
|
+
- analytics-dashboard
|
|
15
|
+
- notifications
|
|
16
|
+
- api-keys
|
|
17
|
+
- audit-logs
|
|
18
|
+
- dark-mode
|
|
19
|
+
- multi-tenant
|
|
20
|
+
|
|
21
|
+
# Page structure
|
|
22
|
+
pages:
|
|
23
|
+
- path: "/"
|
|
24
|
+
intent: "landing-page"
|
|
25
|
+
auth: none
|
|
26
|
+
components:
|
|
27
|
+
- hero-section
|
|
28
|
+
- feature-grid
|
|
29
|
+
- pricing-table
|
|
30
|
+
- testimonials
|
|
31
|
+
- faq-accordion
|
|
32
|
+
- cta-banner
|
|
33
|
+
|
|
34
|
+
- path: "/login"
|
|
35
|
+
intent: "auth-login"
|
|
36
|
+
components:
|
|
37
|
+
- login-form
|
|
38
|
+
- social-auth-buttons
|
|
39
|
+
- forgot-password-link
|
|
40
|
+
|
|
41
|
+
- path: "/signup"
|
|
42
|
+
intent: "auth-register"
|
|
43
|
+
components:
|
|
44
|
+
- signup-form
|
|
45
|
+
- plan-selector
|
|
46
|
+
- social-auth-buttons
|
|
47
|
+
|
|
48
|
+
- path: "/dashboard"
|
|
49
|
+
intent: "main-dashboard"
|
|
50
|
+
auth: required
|
|
51
|
+
layout: "dashboard-shell"
|
|
52
|
+
components:
|
|
53
|
+
- stats-grid
|
|
54
|
+
- activity-chart
|
|
55
|
+
- recent-events
|
|
56
|
+
- quick-actions
|
|
57
|
+
|
|
58
|
+
- path: "/dashboard/analytics"
|
|
59
|
+
intent: "analytics-view"
|
|
60
|
+
auth: required
|
|
61
|
+
layout: "dashboard-shell"
|
|
62
|
+
components:
|
|
63
|
+
- date-range-picker
|
|
64
|
+
- metrics-cards
|
|
65
|
+
- line-chart
|
|
66
|
+
- bar-chart
|
|
67
|
+
- data-table
|
|
68
|
+
|
|
69
|
+
- path: "/dashboard/team"
|
|
70
|
+
intent: "team-management"
|
|
71
|
+
auth: required
|
|
72
|
+
roles: ["admin", "owner"]
|
|
73
|
+
layout: "dashboard-shell"
|
|
74
|
+
components:
|
|
75
|
+
- team-members-list
|
|
76
|
+
- invite-member-modal
|
|
77
|
+
- role-selector
|
|
78
|
+
- pending-invites
|
|
79
|
+
|
|
80
|
+
- path: "/dashboard/settings"
|
|
81
|
+
intent: "user-settings"
|
|
82
|
+
auth: required
|
|
83
|
+
layout: "dashboard-shell"
|
|
84
|
+
components:
|
|
85
|
+
- profile-form
|
|
86
|
+
- password-change
|
|
87
|
+
- notification-preferences
|
|
88
|
+
- connected-accounts
|
|
89
|
+
|
|
90
|
+
- path: "/dashboard/billing"
|
|
91
|
+
intent: "billing-management"
|
|
92
|
+
auth: required
|
|
93
|
+
roles: ["owner"]
|
|
94
|
+
layout: "dashboard-shell"
|
|
95
|
+
components:
|
|
96
|
+
- current-plan-card
|
|
97
|
+
- usage-meter
|
|
98
|
+
- upgrade-modal
|
|
99
|
+
- invoice-history
|
|
100
|
+
|
|
101
|
+
- path: "/dashboard/api-keys"
|
|
102
|
+
intent: "api-key-management"
|
|
103
|
+
auth: required
|
|
104
|
+
roles: ["admin", "owner"]
|
|
105
|
+
layout: "dashboard-shell"
|
|
106
|
+
components:
|
|
107
|
+
- api-keys-table
|
|
108
|
+
- create-key-modal
|
|
109
|
+
- key-permissions
|
|
110
|
+
|
|
111
|
+
# Layouts
|
|
112
|
+
layouts:
|
|
113
|
+
dashboard-shell:
|
|
114
|
+
components:
|
|
115
|
+
- sidebar-navigation
|
|
116
|
+
- topbar
|
|
117
|
+
- user-menu
|
|
118
|
+
- notification-bell
|
|
119
|
+
|
|
120
|
+
# Design system
|
|
121
|
+
design:
|
|
122
|
+
style: "modern-glassmorphism"
|
|
123
|
+
colors:
|
|
124
|
+
primary: "#6366f1" # Indigo
|
|
125
|
+
secondary: "#8b5cf6" # Violet
|
|
126
|
+
accent: "#06b6d4" # Cyan
|
|
127
|
+
success: "#10b981" # Emerald
|
|
128
|
+
warning: "#f59e0b" # Amber
|
|
129
|
+
error: "#ef4444" # Red
|
|
130
|
+
background: "#0f172a" # Slate 900
|
|
131
|
+
surface: "#1e293b" # Slate 800
|
|
132
|
+
font: "Inter"
|
|
133
|
+
borderRadius: "xl"
|
|
134
|
+
shadows: true
|
|
135
|
+
glassmorphism: true
|
|
136
|
+
|
|
137
|
+
# Integrations
|
|
138
|
+
integrations:
|
|
139
|
+
database: "supabase"
|
|
140
|
+
auth: "clerk"
|
|
141
|
+
payments: "stripe"
|
|
142
|
+
analytics: "posthog"
|
|
143
|
+
email: "resend"
|
|
144
|
+
notifications: "knock"
|
|
145
|
+
|
|
146
|
+
# Subscription plans
|
|
147
|
+
plans:
|
|
148
|
+
- name: "Starter"
|
|
149
|
+
price: 0
|
|
150
|
+
limits:
|
|
151
|
+
events: 1000
|
|
152
|
+
team_members: 1
|
|
153
|
+
retention_days: 7
|
|
154
|
+
features:
|
|
155
|
+
- basic-analytics
|
|
156
|
+
- email-support
|
|
157
|
+
|
|
158
|
+
- name: "Pro"
|
|
159
|
+
price: 29
|
|
160
|
+
limits:
|
|
161
|
+
events: 50000
|
|
162
|
+
team_members: 5
|
|
163
|
+
retention_days: 90
|
|
164
|
+
features:
|
|
165
|
+
- advanced-analytics
|
|
166
|
+
- api-access
|
|
167
|
+
- priority-support
|
|
168
|
+
- custom-dashboards
|
|
169
|
+
|
|
170
|
+
- name: "Enterprise"
|
|
171
|
+
price: 99
|
|
172
|
+
limits:
|
|
173
|
+
events: unlimited
|
|
174
|
+
team_members: unlimited
|
|
175
|
+
retention_days: 365
|
|
176
|
+
features:
|
|
177
|
+
- all-pro-features
|
|
178
|
+
- sso
|
|
179
|
+
- audit-logs
|
|
180
|
+
- dedicated-support
|
|
181
|
+
- sla
|
|
182
|
+
|
|
183
|
+
# API Endpoints
|
|
184
|
+
api:
|
|
185
|
+
- path: "/api/events"
|
|
186
|
+
methods: ["GET", "POST"]
|
|
187
|
+
auth: api-key
|
|
188
|
+
description: "Track and query analytics events"
|
|
189
|
+
|
|
190
|
+
- path: "/api/team"
|
|
191
|
+
methods: ["GET", "POST", "DELETE"]
|
|
192
|
+
auth: required
|
|
193
|
+
roles: ["admin", "owner"]
|
|
194
|
+
description: "Team member management"
|
|
195
|
+
|
|
196
|
+
- path: "/api/team/invite"
|
|
197
|
+
methods: ["POST"]
|
|
198
|
+
auth: required
|
|
199
|
+
roles: ["admin", "owner"]
|
|
200
|
+
description: "Send team invitation"
|
|
201
|
+
|
|
202
|
+
- path: "/api/billing/subscription"
|
|
203
|
+
methods: ["GET", "POST", "PUT"]
|
|
204
|
+
auth: required
|
|
205
|
+
roles: ["owner"]
|
|
206
|
+
description: "Subscription management"
|
|
207
|
+
|
|
208
|
+
- path: "/api/billing/portal"
|
|
209
|
+
methods: ["POST"]
|
|
210
|
+
auth: required
|
|
211
|
+
description: "Generate Stripe billing portal URL"
|
|
212
|
+
|
|
213
|
+
- path: "/api/api-keys"
|
|
214
|
+
methods: ["GET", "POST", "DELETE"]
|
|
215
|
+
auth: required
|
|
216
|
+
roles: ["admin", "owner"]
|
|
217
|
+
description: "API key CRUD operations"
|
|
218
|
+
|
|
219
|
+
- path: "/api/webhooks/stripe"
|
|
220
|
+
methods: ["POST"]
|
|
221
|
+
auth: webhook
|
|
222
|
+
description: "Handle Stripe webhook events"
|
|
223
|
+
|
|
224
|
+
# Data models
|
|
225
|
+
data:
|
|
226
|
+
Organization:
|
|
227
|
+
fields:
|
|
228
|
+
id: { type: "uuid", required: true, unique: true }
|
|
229
|
+
name: { type: "string", required: true }
|
|
230
|
+
slug: { type: "string", required: true, unique: true }
|
|
231
|
+
plan: { type: "enum", required: true } # starter, pro, enterprise
|
|
232
|
+
stripeCustomerId: { type: "string", required: false }
|
|
233
|
+
stripeSubscriptionId: { type: "string", required: false }
|
|
234
|
+
createdAt: { type: "timestamp", required: true }
|
|
235
|
+
relations:
|
|
236
|
+
- "has_many: User"
|
|
237
|
+
- "has_many: Event"
|
|
238
|
+
- "has_many: ApiKey"
|
|
239
|
+
|
|
240
|
+
User:
|
|
241
|
+
fields:
|
|
242
|
+
id: { type: "uuid", required: true, unique: true }
|
|
243
|
+
email: { type: "string", required: true, unique: true }
|
|
244
|
+
name: { type: "string", required: true }
|
|
245
|
+
avatar: { type: "string", required: false }
|
|
246
|
+
role: { type: "enum", required: true } # owner, admin, member
|
|
247
|
+
organizationId: { type: "uuid", required: true }
|
|
248
|
+
createdAt: { type: "timestamp", required: true }
|
|
249
|
+
relations:
|
|
250
|
+
- "belongs_to: Organization"
|
|
251
|
+
|
|
252
|
+
Event:
|
|
253
|
+
fields:
|
|
254
|
+
id: { type: "uuid", required: true, unique: true }
|
|
255
|
+
organizationId: { type: "uuid", required: true }
|
|
256
|
+
name: { type: "string", required: true }
|
|
257
|
+
properties: { type: "json", required: false }
|
|
258
|
+
timestamp: { type: "timestamp", required: true }
|
|
259
|
+
relations:
|
|
260
|
+
- "belongs_to: Organization"
|
|
261
|
+
|
|
262
|
+
ApiKey:
|
|
263
|
+
fields:
|
|
264
|
+
id: { type: "uuid", required: true, unique: true }
|
|
265
|
+
organizationId: { type: "uuid", required: true }
|
|
266
|
+
name: { type: "string", required: true }
|
|
267
|
+
keyHash: { type: "string", required: true }
|
|
268
|
+
permissions: { type: "array", required: true }
|
|
269
|
+
lastUsedAt: { type: "timestamp", required: false }
|
|
270
|
+
expiresAt: { type: "timestamp", required: false }
|
|
271
|
+
createdAt: { type: "timestamp", required: true }
|
|
272
|
+
relations:
|
|
273
|
+
- "belongs_to: Organization"
|
|
274
|
+
|
|
275
|
+
Invitation:
|
|
276
|
+
fields:
|
|
277
|
+
id: { type: "uuid", required: true, unique: true }
|
|
278
|
+
email: { type: "string", required: true }
|
|
279
|
+
organizationId: { type: "uuid", required: true }
|
|
280
|
+
role: { type: "enum", required: true }
|
|
281
|
+
token: { type: "string", required: true, unique: true }
|
|
282
|
+
expiresAt: { type: "timestamp", required: true }
|
|
283
|
+
acceptedAt: { type: "timestamp", required: false }
|
|
284
|
+
relations:
|
|
285
|
+
- "belongs_to: Organization"
|
|
286
|
+
|
|
287
|
+
AuditLog:
|
|
288
|
+
fields:
|
|
289
|
+
id: { type: "uuid", required: true, unique: true }
|
|
290
|
+
organizationId: { type: "uuid", required: true }
|
|
291
|
+
userId: { type: "uuid", required: true }
|
|
292
|
+
action: { type: "string", required: true }
|
|
293
|
+
resourceType: { type: "string", required: true }
|
|
294
|
+
resourceId: { type: "uuid", required: true }
|
|
295
|
+
metadata: { type: "json", required: false }
|
|
296
|
+
createdAt: { type: "timestamp", required: true }
|
|
297
|
+
relations:
|
|
298
|
+
- "belongs_to: Organization"
|
|
299
|
+
- "belongs_to: User"
|
package/landing/_headers
ADDED
package/landing/index.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>ebade | The First Agent-First Framework</title>
|
|
8
8
|
<meta name="description"
|
|
9
|
-
content="ebade is
|
|
9
|
+
content="ebade is The first framework designed for AI agents, readable by humans. Reduce token usage by 70% with intent-driven development." />
|
|
10
10
|
|
|
11
11
|
<!-- Favicon -->
|
|
12
12
|
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
|
|
@@ -16,14 +16,24 @@
|
|
|
16
16
|
<meta property="og:url" content="https://ebade.dev/" />
|
|
17
17
|
<meta property="og:title" content="ebade | The First Agent-First Framework" />
|
|
18
18
|
<meta property="og:description"
|
|
19
|
-
content="The first framework designed FOR AI agents. Reduce token usage by
|
|
19
|
+
content="The first framework designed FOR AI agents. Reduce token usage by 70% with intent-driven development." />
|
|
20
20
|
<meta property="og:image" content="https://ebade.dev/og-image.png" />
|
|
21
21
|
|
|
22
22
|
<!-- Twitter -->
|
|
23
23
|
<meta name="twitter:card" content="summary_large_image" />
|
|
24
24
|
<meta name="twitter:title" content="ebade | The First Agent-First Framework" />
|
|
25
|
-
<meta name="twitter:description" content="The first framework designed FOR AI agents. Reduce token usage by
|
|
25
|
+
<meta name="twitter:description" content="The first framework designed FOR AI agents. Reduce token usage by 70%." />
|
|
26
26
|
<meta name="twitter:image" content="https://ebade.dev/og-image.png" />
|
|
27
|
+
|
|
28
|
+
<!-- Google tag (gtag.js) -->
|
|
29
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=G-RMQ7E747ZH"></script>
|
|
30
|
+
<script>
|
|
31
|
+
window.dataLayer = window.dataLayer || [];
|
|
32
|
+
function gtag() { dataLayer.push(arguments); }
|
|
33
|
+
gtag('js', new Date());
|
|
34
|
+
|
|
35
|
+
gtag('config', 'G-RMQ7E747ZH');
|
|
36
|
+
</script>
|
|
27
37
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
28
38
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
29
39
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;600;800;900&family=JetBrains+Mono&display=swap"
|
|
@@ -45,7 +55,7 @@
|
|
|
45
55
|
<i data-lucide="github"></i>
|
|
46
56
|
<span>GitHub</span>
|
|
47
57
|
</a>
|
|
48
|
-
<a href="https://github.com/hasankemaldemirci/ebade
|
|
58
|
+
<a href="https://github.com/hasankemaldemirci/ebade#-quick-start" target="_blank" class="nav-cta">Get Started</a>
|
|
49
59
|
</div>
|
|
50
60
|
</nav>
|
|
51
61
|
|
|
@@ -55,7 +65,7 @@
|
|
|
55
65
|
<div class="badge-modern">
|
|
56
66
|
<i data-lucide="cpu" class="icon-small"></i> Protocol 0.1.0 // Alpha
|
|
57
67
|
</div>
|
|
58
|
-
<h1 class="glitch-text">
|
|
68
|
+
<h1 class="glitch-text">Code = f(<span>Intent</span>)</h1>
|
|
59
69
|
<p class="hero-description">
|
|
60
70
|
<span class="ebade-brand">ebade</span> is an evolution in abstract
|
|
61
71
|
engineering. We don't build components; we model intent. Designed
|
|
@@ -155,13 +165,13 @@
|
|
|
155
165
|
<div class="stats-box">
|
|
156
166
|
<div class="stat">
|
|
157
167
|
<div class="stat-icon"><i data-lucide="zap"></i></div>
|
|
158
|
-
<span class="val">
|
|
168
|
+
<span class="val">70%</span>
|
|
159
169
|
<span class="label">Token Reduction</span>
|
|
160
170
|
</div>
|
|
161
171
|
<div class="stat-divider"></div>
|
|
162
172
|
<div class="stat">
|
|
163
173
|
<div class="stat-icon"><i data-lucide="brain"></i></div>
|
|
164
|
-
<span class="val">
|
|
174
|
+
<span class="val">4.1x</span>
|
|
165
175
|
<span class="label">Agent Context Efficiency</span>
|
|
166
176
|
</div>
|
|
167
177
|
<div class="stat-divider"></div>
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ebade",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "ebade - Agent-First Framework. The first framework designed
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "ebade - Agent-First Framework. The first framework designed for AI agents, readable by humans.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "cli/scaffold.js",
|
|
7
7
|
"bin": {
|
|
@@ -30,11 +30,12 @@
|
|
|
30
30
|
"type": "git",
|
|
31
31
|
"url": "git+https://github.com/hasankemaldemirci/ebade.git"
|
|
32
32
|
},
|
|
33
|
-
"homepage": "https://
|
|
33
|
+
"homepage": "https://ebade.dev",
|
|
34
34
|
"bugs": {
|
|
35
35
|
"url": "https://github.com/hasankemaldemirci/ebade/issues"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
+
"ora": "^9.0.0",
|
|
38
39
|
"yaml": "^2.3.4"
|
|
39
40
|
},
|
|
40
41
|
"engines": {
|