ebade 0.3.0 → 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.
- package/CHANGELOG.md +5 -0
- package/README.md +30 -30
- package/ROADMAP.md +17 -12
- package/cli/scaffold.js +315 -183
- package/cli/simulate.js +102 -0
- package/cli/templates/feature-grid.tsx +80 -0
- package/cli/templates/footer.tsx +121 -0
- package/cli/templates/hero-section.tsx +34 -0
- package/cli/templates/login-form.tsx +124 -0
- package/cli/templates/navbar.tsx +53 -0
- package/cli/templates/pricing-table.tsx +140 -0
- package/cli/templates/signup-form.tsx +111 -0
- package/demo.tape +2 -2
- package/examples/saas-dashboard.ebade.yaml +2 -0
- package/netlify.toml +7 -0
- package/package.json +1 -1
- package/packages/mcp-server/README.md +3 -3
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/index.ts +12 -16
- package/packages/mcp-server/src/tools/scaffold.ts +153 -404
- package/packages/vscode-extension/README.md +11 -8
- package/packages/vscode-extension/ebade-0.3.0.vsix +0 -0
- package/packages/vscode-extension/ebade-0.3.1.vsix +0 -0
- package/packages/vscode-extension/ebade-0.3.2.vsix +0 -0
- package/packages/vscode-extension/images/icon.png +0 -0
- package/packages/vscode-extension/package.json +2 -1
- package/packages/vscode-extension/snippets/ebade.json +86 -0
- package/www/README.md +36 -0
- package/www/app/favicon.ico +0 -0
- package/{landing/style.css → www/app/globals.css} +390 -19
- package/www/app/layout.tsx +66 -0
- package/www/app/page.tsx +374 -0
- package/www/app/playground/page.tsx +627 -0
- package/www/components/ThreeCanvas.tsx +156 -0
- package/www/next.config.ts +19 -0
- package/www/package-lock.json +1779 -0
- package/www/package.json +27 -0
- package/www/postcss.config.mjs +7 -0
- package/www/public/logo.png +0 -0
- package/www/tsconfig.json +42 -0
- package/landing/index.html +0 -268
- package/landing/main.js +0 -147
- package/packages/vscode-extension/images/icon.svg +0 -6
- /package/{demo.gif → assets/demo.gif} +0 -0
- /package/{demo.mp4 → assets/demo.mp4} +0 -0
- /package/{landing → www/public}/_headers +0 -0
- /package/{landing → www/public}/favicon.svg +0 -0
- /package/{landing → www/public}/og-image.png +0 -0
- /package/{landing → www/public}/og-readme.png +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cn } from "@/lib/utils";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 🧠 Generated via ebade
|
|
6
|
+
* Intent: signup-form
|
|
7
|
+
*/
|
|
8
|
+
export function SignupForm() {
|
|
9
|
+
return (
|
|
10
|
+
<div className="w-full max-w-md mx-auto p-8">
|
|
11
|
+
<div className="mb-8 text-center">
|
|
12
|
+
<h2 className="text-3xl font-black tracking-tight mb-2">
|
|
13
|
+
Create an account
|
|
14
|
+
</h2>
|
|
15
|
+
<p className="text-muted-foreground">
|
|
16
|
+
Start building your next big idea
|
|
17
|
+
</p>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<form className="space-y-6">
|
|
21
|
+
<div className="space-y-2">
|
|
22
|
+
<label htmlFor="name" className="text-sm font-medium">
|
|
23
|
+
Full Name
|
|
24
|
+
</label>
|
|
25
|
+
<input
|
|
26
|
+
id="name"
|
|
27
|
+
type="text"
|
|
28
|
+
placeholder="John Doe"
|
|
29
|
+
className="w-full px-4 py-3 rounded-lg border border-input bg-background focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent transition-all"
|
|
30
|
+
/>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<div className="space-y-2">
|
|
34
|
+
<label htmlFor="email" className="text-sm font-medium">
|
|
35
|
+
Email
|
|
36
|
+
</label>
|
|
37
|
+
<input
|
|
38
|
+
id="email"
|
|
39
|
+
type="email"
|
|
40
|
+
placeholder="you@example.com"
|
|
41
|
+
className="w-full px-4 py-3 rounded-lg border border-input bg-background focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent transition-all"
|
|
42
|
+
/>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<div className="space-y-2">
|
|
46
|
+
<label htmlFor="password" className="text-sm font-medium">
|
|
47
|
+
Password
|
|
48
|
+
</label>
|
|
49
|
+
<input
|
|
50
|
+
id="password"
|
|
51
|
+
type="password"
|
|
52
|
+
placeholder="At least 8 characters"
|
|
53
|
+
className="w-full px-4 py-3 rounded-lg border border-input bg-background focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent transition-all"
|
|
54
|
+
/>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<button
|
|
58
|
+
type="submit"
|
|
59
|
+
className="w-full py-3 px-6 rounded-lg bg-primary text-primary-foreground font-bold hover:opacity-90 transition-all shadow-lg hover:scale-[1.02] active:scale-95"
|
|
60
|
+
>
|
|
61
|
+
Create account
|
|
62
|
+
</button>
|
|
63
|
+
|
|
64
|
+
<p className="text-center text-xs text-muted-foreground">
|
|
65
|
+
By clicking continue, you agree to our{" "}
|
|
66
|
+
<a href="#" className="underline hover:text-primary">
|
|
67
|
+
Terms of Service
|
|
68
|
+
</a>{" "}
|
|
69
|
+
and{" "}
|
|
70
|
+
<a href="#" className="underline hover:text-primary">
|
|
71
|
+
Privacy Policy
|
|
72
|
+
</a>
|
|
73
|
+
.
|
|
74
|
+
</p>
|
|
75
|
+
|
|
76
|
+
<div className="relative my-6">
|
|
77
|
+
<div className="absolute inset-0 flex items-center">
|
|
78
|
+
<div className="w-full border-t border-border"></div>
|
|
79
|
+
</div>
|
|
80
|
+
<div className="relative flex justify-center text-xs uppercase">
|
|
81
|
+
<span className="bg-background px-2 text-muted-foreground">
|
|
82
|
+
Or register with
|
|
83
|
+
</span>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<div className="grid grid-cols-2 gap-4">
|
|
88
|
+
<button
|
|
89
|
+
type="button"
|
|
90
|
+
className="py-3 px-4 rounded-lg border border-border bg-background hover:bg-accent transition-all flex items-center justify-center gap-2 font-medium"
|
|
91
|
+
>
|
|
92
|
+
Google
|
|
93
|
+
</button>
|
|
94
|
+
<button
|
|
95
|
+
type="button"
|
|
96
|
+
className="py-3 px-4 rounded-lg border border-border bg-background hover:bg-accent transition-all flex items-center justify-center gap-2 font-medium"
|
|
97
|
+
>
|
|
98
|
+
GitHub
|
|
99
|
+
</button>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<p className="text-center text-sm text-muted-foreground">
|
|
103
|
+
Already have an account?{" "}
|
|
104
|
+
<a href="#" className="text-primary font-medium hover:underline">
|
|
105
|
+
Sign in
|
|
106
|
+
</a>
|
|
107
|
+
</p>
|
|
108
|
+
</form>
|
|
109
|
+
</div>
|
|
110
|
+
);
|
|
111
|
+
}
|
package/demo.tape
CHANGED
|
@@ -24,12 +24,14 @@ pages:
|
|
|
24
24
|
intent: "landing-page"
|
|
25
25
|
auth: none
|
|
26
26
|
components:
|
|
27
|
+
- navbar
|
|
27
28
|
- hero-section
|
|
28
29
|
- feature-grid
|
|
29
30
|
- pricing-table
|
|
30
31
|
- testimonials
|
|
31
32
|
- faq-accordion
|
|
32
33
|
- cta-banner
|
|
34
|
+
- footer
|
|
33
35
|
|
|
34
36
|
- path: "/login"
|
|
35
37
|
intent: "auth-login"
|
package/netlify.toml
ADDED
package/package.json
CHANGED
|
@@ -56,9 +56,9 @@ Create a complete project from an ebade definition.
|
|
|
56
56
|
```typescript
|
|
57
57
|
// Example usage by an AI agent:
|
|
58
58
|
ebade_scaffold({
|
|
59
|
-
projectName: "my-
|
|
60
|
-
projectType: "
|
|
61
|
-
|
|
59
|
+
projectName: "my-app",
|
|
60
|
+
projectType: "SaaS Dashboard", // "E-commerce" or "Landing Page"
|
|
61
|
+
primaryColor: "#4f46e5",
|
|
62
62
|
outputDir: "/path/to/projects"
|
|
63
63
|
})
|
|
64
64
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ebade/mcp-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP Server for ebade -
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "MCP Server for ebade v0.3.1 - The Agent-First Framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -29,7 +29,7 @@ import { generateComponent } from "./tools/generate.js";
|
|
|
29
29
|
const server = new Server(
|
|
30
30
|
{
|
|
31
31
|
name: "ebade",
|
|
32
|
-
version: "0.1
|
|
32
|
+
version: "0.3.1",
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
capabilities: {
|
|
@@ -50,8 +50,8 @@ This creates a complete Next.js project structure based on the ebade specificati
|
|
|
50
50
|
|
|
51
51
|
Use this when the user wants to:
|
|
52
52
|
- Start a new web project
|
|
53
|
-
- Create an
|
|
54
|
-
- Generate a full application structure
|
|
53
|
+
- Create an "SaaS Dashboard", "E-commerce", or "Landing Page"
|
|
54
|
+
- Generate a full application structure with agent-first rules (.cursorrules, etc.)
|
|
55
55
|
|
|
56
56
|
The ebade file uses YAML format with pages, components, data models, and API definitions.`,
|
|
57
57
|
inputSchema: {
|
|
@@ -59,25 +59,21 @@ The ebade file uses YAML format with pages, components, data models, and API def
|
|
|
59
59
|
properties: {
|
|
60
60
|
projectName: {
|
|
61
61
|
type: "string",
|
|
62
|
-
description: "Name of the project (kebab-case, e.g., 'my-
|
|
62
|
+
description: "Name of the project (kebab-case, e.g., 'my-app')",
|
|
63
63
|
},
|
|
64
64
|
projectType: {
|
|
65
65
|
type: "string",
|
|
66
66
|
enum: [
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"portfolio",
|
|
72
|
-
"api-only",
|
|
67
|
+
"SaaS Dashboard",
|
|
68
|
+
"E-commerce",
|
|
69
|
+
"Landing Page",
|
|
70
|
+
"Empty Project",
|
|
73
71
|
],
|
|
74
|
-
description: "Type of project to
|
|
72
|
+
description: "Type of project template to use",
|
|
75
73
|
},
|
|
76
|
-
|
|
77
|
-
type: "
|
|
78
|
-
|
|
79
|
-
description:
|
|
80
|
-
"Features to include (e.g., 'user-auth', 'shopping-cart', 'dark-mode')",
|
|
74
|
+
primaryColor: {
|
|
75
|
+
type: "string",
|
|
76
|
+
description: "Hex primary color (e.g., '#4f46e5')",
|
|
81
77
|
},
|
|
82
78
|
outputDir: {
|
|
83
79
|
type: "string",
|