ebade 0.4.6 β 0.4.7
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/.agent/workflows/prompt-to-product.md +18 -22
- package/ARCHITECTURE.md +17 -5
- package/CHANGELOG.md +10 -2
- package/MANIFESTO.md +25 -8
- package/README.md +63 -27
- package/assets/build-demo.gif +0 -0
- package/assets/build-demo.mp4 +0 -0
- package/cli/adapters/base.js +38 -0
- package/cli/adapters/html-vanilla.js +73 -0
- package/cli/adapters/nextjs.js +368 -0
- package/cli/scaffold.js +97 -1338
- package/cli/utils.js +98 -0
- package/docs/GREEN-AI.md +3 -3
- package/package.json +4 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/index.ts +2 -2
- package/packages/mcp-server/src/tools/build.ts +1 -1
- package/tests/cli/multi-target.test.js +60 -0
- package/tests/framework/architect.test.js +1 -1
- package/vhs/build-demo.tape +54 -0
- package/{demo.tape β vhs/demo.tape} +3 -3
- package/www/app/page.tsx +1 -1
- package/www/package.json +1 -1
- package/www/public/assets/build-demo.gif +0 -0
- package/www/public/assets/build-demo.mp4 +0 -0
|
@@ -2,39 +2,35 @@
|
|
|
2
2
|
description: ebade Prompt-to-Product Workflow
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# π Hybrid Workflow: Architect & Engineer
|
|
6
6
|
|
|
7
|
-
This workflow
|
|
7
|
+
This workflow divides your task into two phases: **Offline Architecture** (Deterministic) and **Online Engineering** (Generative).
|
|
8
8
|
|
|
9
|
-
## 1.
|
|
9
|
+
## 1. Phase I: The Offline Architect (Deterministic)
|
|
10
10
|
When a user asks to "build", "create", or "start" a new web application:
|
|
11
11
|
|
|
12
12
|
// turbo
|
|
13
|
-
1.
|
|
13
|
+
1. **Execute the Architecture**: Run the `ebade build` command.
|
|
14
14
|
```bash
|
|
15
15
|
node cli/scaffold.js build "[User's Prompt]"
|
|
16
16
|
```
|
|
17
|
-
*
|
|
17
|
+
*ebade will handle the heavy lifting: selecting the project type, generating a design system, and creating the file structure with **0-token cost** and **100% determinism**.*
|
|
18
18
|
|
|
19
|
-
2.
|
|
19
|
+
2. **Move In**: `cd` into the generated project directory.
|
|
20
20
|
|
|
21
|
-
## 2.
|
|
22
|
-
|
|
23
|
-
1. Read `project.ebade.yaml` to understand the pages, components, and data models.
|
|
24
|
-
2. Respect the design system tokens in `app/globals.css`.
|
|
21
|
+
## 2. Phase II: The Online Engineer (Generative)
|
|
22
|
+
Now that the foundation is set, you act as the generative engineer to add "The Soul" to the codebase.
|
|
25
23
|
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
1. **Initialize Dependencies**: Run `npm install` to prepare the environment.
|
|
25
|
+
2. **Read the Intent**: Open `project.ebade.yaml`. This is your **Source of Truth**. Your goal is to implement the specific logic requested by the user, while respecting the boundaries set in the YAML.
|
|
26
|
+
3. **Refine Components**: Locate the UI components in `components/`. They are visually premium but contain "Business Logic" placeholders. Replace these with actual logic (API calls, state, conditional rendering).
|
|
27
|
+
4. **API Integration**: Fill the `app/api/` skeletons with real backend code (DB queries, Auth logic).
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
To add new features:
|
|
35
|
-
1. Update `project.ebade.yaml` with the new intent.
|
|
36
|
-
2. Run `node cli/scaffold.js scaffold project.ebade.yaml .` to generate the new files while preserving your logic.
|
|
37
|
-
3. Apply the specific implementation details to the new files.
|
|
29
|
+
## 3. Iterative Feedback Loop
|
|
30
|
+
To expand or modify:
|
|
31
|
+
1. Update `project.ebade.yaml` with the new intent (e.g., adding a new page or feature).
|
|
32
|
+
2. Run `node cli/scaffold.js scaffold project.ebade.yaml .` to generate new files without breaking your existing work.
|
|
33
|
+
3. Apply generative logic to the new structures.
|
|
38
34
|
|
|
39
35
|
---
|
|
40
|
-
*
|
|
36
|
+
*ebade: Empowering Agents to focus on Logic, while we handle the Architecture.*
|
package/ARCHITECTURE.md
CHANGED
|
@@ -43,13 +43,25 @@ Immediately after scaffolding, ebade runs a series of integrity checks:
|
|
|
43
43
|
- **Intent-Code Mapping:** Verifies that exported component names and routes match the original intent.
|
|
44
44
|
- **Test Coverage:** Confirms that matching unit tests (Vitest) have been generated for every new component.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
## π The Hybrid Workflow Model
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
ebade operates as a hybrid engine, splitting the lifecycle into two specific environments:
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
### 1. The Offline Architect (Deterministic)
|
|
51
|
+
|
|
52
|
+
The local CLI acts as the core architect. It performs high-speed, 0-token analysis of the user's intent to establish the foundational structure of the codebase.
|
|
53
|
+
|
|
54
|
+
- **Rules Engine**: Uses pattern matching and adjacency maps to select components and theme colors.
|
|
55
|
+
- **Scaffold Engine**: Generates 100% of the boilerplate (folders, config files, type definitions).
|
|
56
|
+
- **Zero-Token Hallucination Protection**: Since this runs locally with fixed logic, the structural integrity is guaranteed.
|
|
57
|
+
|
|
58
|
+
### 2. The Online Engineer (Generative)
|
|
59
|
+
|
|
60
|
+
Once the "House" (scaffold) is built, the AI Agent (the engineer) moves in to decorate and install the appliances (business logic).
|
|
61
|
+
|
|
62
|
+
- **Intent Mapping**: The agent maps the specific sub-intents from the `@intent` decorators into the generated templates.
|
|
63
|
+
- **Hallucination Guardrails**: By using the `project.ebade.yaml` as a strict AST-based specification, the agent is restricted from going "off-rails."
|
|
64
|
+
- **Token Efficiency**: The agent only spends compute cycles on the actual business logic, not on imports or layout setup.
|
|
53
65
|
|
|
54
66
|
---
|
|
55
67
|
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,16 @@ All notable changes to **ebade** will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.4.7] - 2025-01-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Multi-Target Support**: The ebade CLI is now target-agnostic. Decoupled Next.js logic into adapters.
|
|
13
|
+
- **Vanilla HTML Adapter**: Added support for standard HTML/CSS project generation via `--target html`.
|
|
14
|
+
- **Automated Formatting**: Integrated Prettier into the scaffolding pipeline. Every generated file is now automatically formatted to production standards.
|
|
15
|
+
- **Modular Adapter Architecture**: Introduced `TargetAdapter` base class to easily add new platforms (Flutter, Go, etc.).
|
|
16
|
+
- **Shared CLI Utilities**: Unified common logic into `cli/utils.js` for better maintainability.
|
|
17
|
+
|
|
8
18
|
## [0.4.6] - 2025-01-10
|
|
9
19
|
|
|
10
20
|
### Added
|
|
@@ -24,8 +34,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
24
34
|
- Improved project naming logic to filter out filler words (e.g., "Can you make a...").
|
|
25
35
|
- Fixed component integrity check to correctly locate test files in `tests/components/`.
|
|
26
36
|
|
|
27
|
-
## [0.4.5] - 2025-01-10
|
|
28
|
-
...
|
|
29
37
|
## [0.4.5] - 2025-01-10
|
|
30
38
|
|
|
31
39
|
### Added
|
package/MANIFESTO.md
CHANGED
|
@@ -128,18 +128,35 @@ Agent: *Next.js docs'Δ± hatΔ±rla*
|
|
|
128
128
|
*500 satΔ±r kod yaz*
|
|
129
129
|
```
|
|
130
130
|
|
|
131
|
-
### ebade ile
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Agent: *
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
131
|
+
### ebade ile (Hybrid Workflow)
|
|
132
|
+
```text
|
|
133
|
+
Phase I: Offline Architect (Deterministic)
|
|
134
|
+
Agent: *node cli/scaffold.js build "A green dashboard"*
|
|
135
|
+
-> 0 Tokens spent
|
|
136
|
+
-> Mimar yerel olarak iskeleyi kurar
|
|
137
|
+
|
|
138
|
+
Phase II: Online Engineer (Generative)
|
|
139
|
+
Agent: *ArayΓΌze ΓΆzel iΕ mantΔ±ΔΔ±nΔ± (Business Logic) yaz*
|
|
140
|
+
-> DΓΌΕΓΌk token harcamasΔ±
|
|
141
|
+
-> Sadece yaratΔ±cΔ± iΕe odaklanma
|
|
139
142
|
```
|
|
140
143
|
|
|
141
144
|
---
|
|
142
145
|
|
|
146
|
+
## Hibrit Model: Mimar ve MΓΌhendis
|
|
147
|
+
|
|
148
|
+
ebade, yazΔ±lΔ±m geliΕtirme sΓΌrecini ikiye bΓΆler:
|
|
149
|
+
|
|
150
|
+
### 1. π‘οΈ Offline Mimar (Deterministik)
|
|
151
|
+
|
|
152
|
+
Yerel CLI, hiΓ§ token harcamadan projenin iskeletini, tasarΔ±m sistemini ve dosya dΓΌzenini kurar. Bu aΕamada "halΓΌsinasyon" yoktur, sadece saf mΓΌhendislik kurallarΔ± vardΔ±r.
|
|
153
|
+
|
|
154
|
+
### 2. π§ Online MΓΌhendis (Generatif)
|
|
155
|
+
|
|
156
|
+
Δ°skelet hazΔ±r olduktan sonra AI AjanΔ± (Cursor/Claude) koltuΔa oturur. `project.ebade.yaml` dosyasΔ±nΔ± "Source of Truth" olarak kullanarak, projenin "ruhunu" (spesifik iΕ mantΔ±ΔΔ±, API entegrasyonlarΔ±) kodlar.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
143
160
|
## Design Principles
|
|
144
161
|
|
|
145
162
|
1. **Agent-Native**: AI'Δ±n dΓΌΕΓΌnce yapΔ±sΔ±na uygun
|
package/README.md
CHANGED
|
@@ -9,6 +9,30 @@
|
|
|
9
9
|
[](./docs/GREEN-AI.md)
|
|
10
10
|
[](./ARCHITECTURE.md)
|
|
11
11
|
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## π Hybrid Workflow: The Best of Both Worlds
|
|
15
|
+
|
|
16
|
+
ebade splits the development process into two distinct, high-efficiency phases:
|
|
17
|
+
|
|
18
|
+
### 1. π‘οΈ Offline Architect (Deterministic)
|
|
19
|
+
|
|
20
|
+
The **ebade CLI** runs locally and requires **0 tokens**. It uses pattern matching and predefined architectural rules to scaffold your project's skeleton, design system, and file structure.
|
|
21
|
+
|
|
22
|
+
- **Speed:** Instant results.
|
|
23
|
+
- **Reliability:** 100% deterministic (no hallucinations).
|
|
24
|
+
- **Cost:** Free.
|
|
25
|
+
|
|
26
|
+
### 2. π§ Online Agent (Generative)
|
|
27
|
+
|
|
28
|
+
Once the scaffold is ready, your **AI Agent** (Claude, Cursor, etc.) takes over to fill in the complex business logic using the `project.ebade.yaml` as its source of truth.
|
|
29
|
+
|
|
30
|
+
- **Focus:** AI only works on the "hard parts."
|
|
31
|
+
- **Efficiency:** ~70% token savings by not generating boilerplate.
|
|
32
|
+
- **Alignment:** The agent follows the rules ebade already set in stone.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
12
36
|
> **"Code is a legacy byproduct. Intent is the source of truth."**
|
|
13
37
|
|
|
14
38
|
**ebade** is not just another framework. It is a **compilation protocol** designed for an era where AI Agents are the primary developers. It shifts the paradigm from "Human-Centric Coding" to "Agentic Intent Modeling."
|
|
@@ -19,7 +43,7 @@
|
|
|
19
43
|
|
|
20
44
|
Watch how **ebade** transforms 20 lines of YAML into a production-ready, full-stack Next.js application.
|
|
21
45
|
|
|
22
|
-

|
|
46
|
+

|
|
23
47
|
|
|
24
48
|
### βοΈ The Battle of Entropy
|
|
25
49
|
|
|
@@ -49,9 +73,39 @@ ebade uses a high-density decorator syntax designed to fit within an Agent's con
|
|
|
49
73
|
|
|
50
74
|
---
|
|
51
75
|
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## π§ The Architect: Prompt-to-Product
|
|
79
|
+
|
|
80
|
+
In **v0.4.7**, we introduced **ebade Forge** (Multi-Target Support). Now you can scaffold entire projects using just natural language for Next.js or Vanilla HTML.
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# One-shot project creation
|
|
84
|
+
npx ebade build "A luxury concierge service with pricing, testimonials and a gold theme"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- **Intent Intelligence**: Automatically detects app type (SaaS, E-commerce, Blog).
|
|
88
|
+
- **Dynamic Design**: Generates a premium HSL color palette from your prompt.
|
|
89
|
+
- **Smart Scaffolding**: Detects needed components (`auth`, `charts`, `forms`) and dynamically creates routes.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
52
93
|
## π Quick Start
|
|
53
94
|
|
|
54
|
-
### 1.
|
|
95
|
+
### 1. Build from Prompt (One-Shot)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npx ebade build "Create a dark themed eco-monitor with real-time stats"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 2. Scaffold from Intent (Professional)
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Generate project from an existing .ebade.yaml
|
|
105
|
+
npx ebade scaffold examples/saas-dashboard.ebade.yaml ./my-app
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 3. For AI Agents (MCP)
|
|
55
109
|
|
|
56
110
|
Add `ebade` to your AI agent (Claude, Cursor, Windsurf) via the Model Context Protocol:
|
|
57
111
|
|
|
@@ -66,13 +120,6 @@ Add `ebade` to your AI agent (Claude, Cursor, Windsurf) via the Model Context Pr
|
|
|
66
120
|
}
|
|
67
121
|
```
|
|
68
122
|
|
|
69
|
-
### 2. For Humans (CLI)
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
# Scaffold a full project from an intent file
|
|
73
|
-
npx ebade scaffold examples/saas-dashboard.ebade.yaml ./my-app
|
|
74
|
-
```
|
|
75
|
-
|
|
76
123
|
---
|
|
77
124
|
|
|
78
125
|
## ποΈ Architecture: First Principles
|
|
@@ -101,44 +148,33 @@ ebade operates on the principle of **The Online Compiler**. It treats AI as a de
|
|
|
101
148
|
|
|
102
149
|
## π¦ Project Structure
|
|
103
150
|
|
|
151
|
+
- **`cli/`**: The core scaffolding engine & EbadeArchitect.
|
|
152
|
+
- **`packages/mcp-server/`**: The bridge for AI agents via MCP.
|
|
104
153
|
- **`www/`**: The [ebade.dev](https://ebade.dev) landing page & playground.
|
|
105
|
-
- **`
|
|
106
|
-
- **`cli/`**: The core scaffolding engine.
|
|
107
|
-
- **`examples/`**: Real-world intent templates.
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## π€ Join the Revolution
|
|
112
|
-
|
|
113
|
-
1. **Star the repo** to show your support β
|
|
114
|
-
2. **Become a Sponsor** to help us build a Green AI future π
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
MIT Β© ebade Contributors β Made with β€οΈ in TΓΌrkiye πΉπ·
|
|
154
|
+
- **`examples/`**: Real-world intent templates for various app types.
|
|
119
155
|
|
|
120
156
|
---
|
|
121
157
|
|
|
122
158
|
## π€ Contributing
|
|
123
159
|
|
|
124
|
-
**ebade** is open source and welcomes contributions!
|
|
160
|
+
**ebade** is open source and welcomes contributions! Whether it's a new adapter, a component template, or a bug fix, we'd love to have you.
|
|
125
161
|
|
|
126
162
|
1. **Star this repo** β
|
|
127
163
|
2. **Try the MCP server** with your AI agent
|
|
128
164
|
3. **Open issues** with ideas and feedback
|
|
129
165
|
4. **Submit PRs** for new features
|
|
130
166
|
|
|
131
|
-
See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
167
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for full guidelines.
|
|
132
168
|
|
|
133
169
|
---
|
|
134
170
|
|
|
135
171
|
## π Support the Movement
|
|
136
172
|
|
|
137
|
-
**ebade** is an ambitious project aiming to redefine
|
|
173
|
+
**ebade** is an ambitious project aiming to redefine software engineering for the AI age. Your support helps us build a more sustainable "Green AI" future.
|
|
138
174
|
|
|
139
175
|
- **[Become a GitHub Sponsor](https://github.com/sponsors/hasankemaldemirci)** π
|
|
140
176
|
- **Star the repo** to show your support β
|
|
141
|
-
- **Share the project** with other
|
|
177
|
+
- **Share the project** with other enthusiasts π
|
|
142
178
|
|
|
143
179
|
---
|
|
144
180
|
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base TargetAdapter class for ebade.
|
|
3
|
+
* Each platform (Next.js, HTML, Flutter, etc.) must implement this.
|
|
4
|
+
*/
|
|
5
|
+
export class TargetAdapter {
|
|
6
|
+
constructor(colors, log) {
|
|
7
|
+
this.colors = colors;
|
|
8
|
+
this.log = log;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generates the platform-specific project structure and config files.
|
|
13
|
+
*/
|
|
14
|
+
generateBoilerplate(config, targetPath) {
|
|
15
|
+
throw new Error("generateBoilerplate() must be implemented");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Generates a page using preferred platform syntax.
|
|
20
|
+
*/
|
|
21
|
+
generatePage(page, design) {
|
|
22
|
+
throw new Error("generatePage() must be implemented");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Generates a component using preferred platform syntax.
|
|
27
|
+
*/
|
|
28
|
+
generateComponent(componentName, design) {
|
|
29
|
+
throw new Error("generateComponent() must be implemented");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generates an API route/handler.
|
|
34
|
+
*/
|
|
35
|
+
generateApiRoute(endpoint) {
|
|
36
|
+
throw new Error("generateApiRoute() must be implemented");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { TargetAdapter } from "./base.js";
|
|
4
|
+
import { ensureDir } from "../utils.js";
|
|
5
|
+
|
|
6
|
+
export class HtmlVanillaAdapter extends TargetAdapter {
|
|
7
|
+
generateBoilerplate(config, projectDir) {
|
|
8
|
+
this.log.section("Creating Vanilla HTML project structure");
|
|
9
|
+
|
|
10
|
+
// Simple structure
|
|
11
|
+
const dirs = ["assets", "css", "js"];
|
|
12
|
+
dirs.forEach((dir) => {
|
|
13
|
+
ensureDir(path.join(projectDir, dir));
|
|
14
|
+
this.log.file(`${dir}/`);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// Generate style.css
|
|
18
|
+
const cssContent = `
|
|
19
|
+
:root {
|
|
20
|
+
--primary: ${config.design?.colors?.primary || "#6366f1"};
|
|
21
|
+
}
|
|
22
|
+
body {
|
|
23
|
+
font-family: sans-serif;
|
|
24
|
+
background: #0f172a;
|
|
25
|
+
color: white;
|
|
26
|
+
}
|
|
27
|
+
.container { max-width: 1200px; margin: 0 auto; padding: 2rem; }
|
|
28
|
+
`.trim();
|
|
29
|
+
|
|
30
|
+
fs.writeFileSync(path.join(projectDir, "styles.css"), cssContent);
|
|
31
|
+
this.log.file("styles.css");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
generatePage(page, design) {
|
|
35
|
+
const filename = page.path === "/" ? "index.html" : `${page.intent}.html`;
|
|
36
|
+
const componentsHtml =
|
|
37
|
+
page.components
|
|
38
|
+
?.map((c) => `<div class="component" id="${c}">${c} Intent</div>`)
|
|
39
|
+
.join("\n") || "";
|
|
40
|
+
|
|
41
|
+
return `
|
|
42
|
+
<!DOCTYPE html>
|
|
43
|
+
<html lang="en">
|
|
44
|
+
<head>
|
|
45
|
+
<meta charset="UTF-8">
|
|
46
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
47
|
+
<title>${page.intent}</title>
|
|
48
|
+
<link rel="stylesheet" href="styles.css">
|
|
49
|
+
</head>
|
|
50
|
+
<body>
|
|
51
|
+
<div class="container">
|
|
52
|
+
<h1>${page.intent} Page</h1>
|
|
53
|
+
<div class="components">
|
|
54
|
+
${componentsHtml}
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</body>
|
|
58
|
+
</html>
|
|
59
|
+
`.trim();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
generateComponent(componentName, design) {
|
|
63
|
+
// For Vanilla HTML, components might just be snippets or fragments
|
|
64
|
+
return {
|
|
65
|
+
content: `<div class="ebade-component">${componentName}</div>`,
|
|
66
|
+
testContent: `// No unit test for vanilla HTML component yet`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
generateApiRoute(endpoint) {
|
|
71
|
+
return `// API Route stub for ${endpoint.path}`;
|
|
72
|
+
}
|
|
73
|
+
}
|