@mozole/cli 2.0.0-b → 2.1.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 (105) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +147 -23
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/add.d.ts +7 -0
  7. package/dist/commands/add.d.ts.map +1 -0
  8. package/dist/commands/add.js +87 -0
  9. package/dist/commands/add.js.map +1 -0
  10. package/dist/commands/adopt.d.ts +2 -0
  11. package/dist/commands/adopt.d.ts.map +1 -1
  12. package/dist/commands/adopt.js +243 -45
  13. package/dist/commands/adopt.js.map +1 -1
  14. package/dist/commands/assets.d.ts +28 -0
  15. package/dist/commands/assets.d.ts.map +1 -0
  16. package/dist/commands/assets.js +176 -0
  17. package/dist/commands/assets.js.map +1 -0
  18. package/dist/commands/backend.d.ts +5 -0
  19. package/dist/commands/backend.d.ts.map +1 -0
  20. package/dist/commands/backend.js +68 -0
  21. package/dist/commands/backend.js.map +1 -0
  22. package/dist/commands/new.d.ts +1 -1
  23. package/dist/commands/new.d.ts.map +1 -1
  24. package/dist/commands/new.js +13 -5
  25. package/dist/commands/new.js.map +1 -1
  26. package/dist/commands/prototype.d.ts.map +1 -1
  27. package/dist/commands/prototype.js +68 -20
  28. package/dist/commands/prototype.js.map +1 -1
  29. package/dist/commands/release.d.ts +10 -0
  30. package/dist/commands/release.d.ts.map +1 -0
  31. package/dist/commands/release.js +181 -0
  32. package/dist/commands/release.js.map +1 -0
  33. package/dist/commands/ui.d.ts +12 -1
  34. package/dist/commands/ui.d.ts.map +1 -1
  35. package/dist/commands/ui.js +182 -68
  36. package/dist/commands/ui.js.map +1 -1
  37. package/dist/commands/verify.d.ts.map +1 -1
  38. package/dist/commands/verify.js +37 -5
  39. package/dist/commands/verify.js.map +1 -1
  40. package/dist/scaffold/agents.d.ts.map +1 -1
  41. package/dist/scaffold/agents.js +40 -6
  42. package/dist/scaffold/agents.js.map +1 -1
  43. package/dist/scaffold/backend.d.ts +1 -1
  44. package/dist/scaffold/backend.d.ts.map +1 -1
  45. package/dist/scaffold/backend.js +63 -31
  46. package/dist/scaffold/backend.js.map +1 -1
  47. package/dist/scaffold/components.d.ts +8 -0
  48. package/dist/scaffold/components.d.ts.map +1 -0
  49. package/dist/scaffold/components.js +305 -0
  50. package/dist/scaffold/components.js.map +1 -0
  51. package/dist/scaffold/design.d.ts.map +1 -1
  52. package/dist/scaffold/design.js +47 -25
  53. package/dist/scaffold/design.js.map +1 -1
  54. package/dist/scaffold/flagship.d.ts +5 -0
  55. package/dist/scaffold/flagship.d.ts.map +1 -1
  56. package/dist/scaffold/flagship.js +161 -102
  57. package/dist/scaffold/flagship.js.map +1 -1
  58. package/dist/scaffold/index.d.ts +1 -1
  59. package/dist/scaffold/index.d.ts.map +1 -1
  60. package/dist/scaffold/index.js +22 -7
  61. package/dist/scaffold/index.js.map +1 -1
  62. package/dist/scaffold/library.d.ts +3 -0
  63. package/dist/scaffold/library.d.ts.map +1 -0
  64. package/dist/scaffold/library.js +98 -0
  65. package/dist/scaffold/library.js.map +1 -0
  66. package/dist/scaffold/phases.d.ts.map +1 -1
  67. package/dist/scaffold/phases.js +19 -14
  68. package/dist/scaffold/phases.js.map +1 -1
  69. package/dist/scaffold/repomap.d.ts +3 -3
  70. package/dist/scaffold/repomap.d.ts.map +1 -1
  71. package/dist/scaffold/repomap.js +22 -10
  72. package/dist/scaffold/repomap.js.map +1 -1
  73. package/dist/scaffold/standard.d.ts.map +1 -1
  74. package/dist/scaffold/standard.js +3 -2
  75. package/dist/scaffold/standard.js.map +1 -1
  76. package/dist/scaffold/tokens.js +4 -4
  77. package/dist/scaffold/tools-guide.d.ts +3 -0
  78. package/dist/scaffold/tools-guide.d.ts.map +1 -0
  79. package/dist/scaffold/tools-guide.js +117 -0
  80. package/dist/scaffold/tools-guide.js.map +1 -0
  81. package/dist/scaffold/workflow.d.ts +5 -0
  82. package/dist/scaffold/workflow.d.ts.map +1 -0
  83. package/dist/scaffold/workflow.js +221 -0
  84. package/dist/scaffold/workflow.js.map +1 -0
  85. package/dist/ui/CockpitApp.d.ts +13 -0
  86. package/dist/ui/CockpitApp.d.ts.map +1 -0
  87. package/dist/ui/CockpitApp.js +612 -0
  88. package/dist/ui/CockpitApp.js.map +1 -0
  89. package/dist/ui/ToolsPanel.d.ts +6 -0
  90. package/dist/ui/ToolsPanel.d.ts.map +1 -0
  91. package/dist/ui/ToolsPanel.js +128 -0
  92. package/dist/ui/ToolsPanel.js.map +1 -0
  93. package/dist/utils/fs.d.ts +7 -0
  94. package/dist/utils/fs.d.ts.map +1 -1
  95. package/dist/utils/fs.js +169 -3
  96. package/dist/utils/fs.js.map +1 -1
  97. package/dist/utils/project-files.d.ts +4 -0
  98. package/dist/utils/project-files.d.ts.map +1 -0
  99. package/dist/utils/project-files.js +49 -0
  100. package/dist/utils/project-files.js.map +1 -0
  101. package/dist/version.d.ts +1 -1
  102. package/dist/version.d.ts.map +1 -1
  103. package/dist/version.js +1 -1
  104. package/dist/version.js.map +1 -1
  105. package/package.json +32 -4
@@ -45,6 +45,7 @@ export default defineConfig({
45
45
  plugins: [react(), tailwindcss()],
46
46
  server: {
47
47
  port: 5173,
48
+ proxy: { "/api": "http://127.0.0.1:3001" },
48
49
  },
49
50
  });
50
51
  `;
@@ -153,44 +154,16 @@ export function CanvasLayer() {
153
154
  `;
154
155
  }
155
156
  export function generateFlagshipApp() {
156
- return `import Lenis from "lenis";
157
- import { useEffect } from "react";
158
- import { Link, Route, Switch } from "wouter";
157
+ return `import { Link, Route, Switch } from "wouter";
158
+ import { useSmoothScroll } from "./behaviors";
159
159
  import { CanvasLayer } from "./components/creative/CanvasLayer";
160
- import { Button } from "./components/ui/Button";
160
+ import { Footer, Header } from "./components/layout";
161
+ import { Button } from "./components/ui";
162
+ import HomeView from "./routes/home";
163
+ import ShowcaseView from "./routes/showcase";
161
164
 
162
165
  export default function App() {
163
- useEffect(() => {
164
- const preference = window.matchMedia("(prefers-reduced-motion: reduce)");
165
- let lenis: Lenis | undefined;
166
- let frameId = 0;
167
- const stop = () => {
168
- cancelAnimationFrame(frameId);
169
- lenis?.destroy();
170
- lenis = undefined;
171
- };
172
- const update = () => {
173
- stop();
174
- if (preference.matches) return;
175
- const instance = new Lenis({
176
- duration: 1.2,
177
- easing: (t) => Math.min(1, 1.001 - 2 ** (-10 * t)),
178
- smoothWheel: true,
179
- });
180
- lenis = instance;
181
- const raf = (time: number) => {
182
- instance.raf(time);
183
- frameId = requestAnimationFrame(raf);
184
- };
185
- frameId = requestAnimationFrame(raf);
186
- };
187
- update();
188
- preference.addEventListener("change", update);
189
- return () => {
190
- preference.removeEventListener("change", update);
191
- stop();
192
- };
193
- }, []);
166
+ useSmoothScroll();
194
167
 
195
168
  return (
196
169
  <div className="relative min-h-screen bg-[var(--color-background)] text-[var(--color-foreground)] flex flex-col">
@@ -205,33 +178,7 @@ export default function App() {
205
178
  <CanvasLayer />
206
179
 
207
180
  {/* Top Header */}
208
- <header className="border-b border-[var(--color-border)] bg-[var(--color-surface)]/80 backdrop-blur-md sticky top-0 z-40">
209
- <div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] h-16 flex items-center justify-between">
210
- <Link
211
- href="/"
212
- className="text-[var(--text-lg)] font-bold tracking-tight text-[var(--color-foreground)]"
213
- >
214
- Flagship Studio
215
- </Link>
216
- <nav
217
- aria-label="Main Navigation"
218
- className="flex items-center gap-6 text-[var(--text-sm)]"
219
- >
220
- <Link
221
- href="/"
222
- className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
223
- >
224
- Home
225
- </Link>
226
- <Link
227
- href="/showcase"
228
- className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
229
- >
230
- Showcase
231
- </Link>
232
- </nav>
233
- </div>
234
- </header>
181
+ <Header />
235
182
 
236
183
  {/* Main Content Landmark */}
237
184
  <main id="main-content" tabIndex={-1} className="relative z-10 flex-1 flex flex-col">
@@ -250,49 +197,10 @@ export default function App() {
250
197
  </main>
251
198
 
252
199
  {/* Footer */}
253
- <footer className="relative z-10 border-t border-[var(--color-border)] bg-[var(--color-surface)] py-8 mt-auto">
254
- <div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] flex flex-col sm:flex-row items-center justify-between gap-4 text-[var(--text-xs)] text-[var(--color-muted-foreground)]">
255
- <p>&copy; {new Date().getFullYear()} Flagship Studio. All rights reserved.</p>
256
- </div>
257
- </footer>
200
+ <Footer />
258
201
  </div>
259
202
  );
260
203
  }
261
-
262
- function HomeView() {
263
- return (
264
- <section className="py-24 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
265
- <div className="flex flex-col gap-6 max-w-2xl">
266
- <h1 className="text-[var(--text-5xl)] font-bold leading-tight tracking-tight">
267
- Creative Engineering & Visual Systems
268
- </h1>
269
- <p className="text-[var(--text-xl)] text-[var(--color-muted-foreground)] leading-relaxed">
270
- Interactive web experiences with headless routing, smooth scrolling, and dynamic graphics
271
- layers.
272
- </p>
273
- <div className="flex gap-4 pt-4">
274
- <Button variant="primary" size="lg">
275
- Explore Showcase
276
- </Button>
277
- <Button variant="outline" size="lg">
278
- Architecture
279
- </Button>
280
- </div>
281
- </div>
282
- </section>
283
- );
284
- }
285
-
286
- function ShowcaseView() {
287
- return (
288
- <section className="py-20 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
289
- <h1 className="text-[var(--text-4xl)] font-bold mb-6">Creative Showcase</h1>
290
- <p className="text-[var(--text-base)] text-[var(--color-muted-foreground)]">
291
- Interactive experiences delivered with precision performance.
292
- </p>
293
- </section>
294
- );
295
- }
296
204
  `;
297
205
  }
298
206
  export async function scaffoldFlagshipProject(projectRoot, projectName) {
@@ -326,12 +234,163 @@ export async function scaffoldFlagshipProject(projectRoot, projectName) {
326
234
  javascript: { formatter: { quoteStyle: "double", trailingCommas: "all" } },
327
235
  };
328
236
  await atomicWrite(path.join(projectRoot, "biome.json"), JSON.stringify(biomeConfig, null, 2));
237
+ await atomicWrite(path.join(projectRoot, "src/behaviors/useSmoothScroll.ts"), generateSmoothScroll());
238
+ await atomicWrite(path.join(projectRoot, "src/behaviors/index.ts"), 'export { useSmoothScroll } from "./useSmoothScroll";\n');
239
+ await atomicWrite(path.join(projectRoot, "src/components/motion/Reveal.tsx"), `import { type HTMLMotionProps, motion, useReducedMotion } from "motion/react";
240
+
241
+ export function Reveal({ children, ...props }: HTMLMotionProps<"div">) {
242
+ const reduced = useReducedMotion();
243
+ return (
244
+ <motion.div
245
+ initial={reduced ? false : { opacity: 0 }}
246
+ whileInView={{ opacity: 1 }}
247
+ viewport={{ once: true }}
248
+ {...props}
249
+ >
250
+ {children}
251
+ </motion.div>
252
+ );
253
+ }
254
+ `);
255
+ await atomicWrite(path.join(projectRoot, "src/components/motion/index.ts"), 'export { Reveal } from "./Reveal";\n');
256
+ await atomicWrite(path.join(projectRoot, "src/library/index.ts"), 'export * from "../components/ui";\nexport * from "../components/layout";\nexport * from "../components/features";\nexport * from "../components/sections";\nexport * from "../components/motion";\nexport * from "../behaviors";\n');
329
257
  // Source files
330
258
  const srcDir = path.join(projectRoot, "src");
331
259
  await atomicWrite(path.join(srcDir, "main.tsx"), generateFlagshipMain());
332
260
  await atomicWrite(path.join(srcDir, "App.tsx"), generateFlagshipApp());
261
+ await atomicWrite(path.join(srcDir, "components/layout/Header.tsx"), generateFlagshipHeader());
262
+ await atomicWrite(path.join(srcDir, "components/layout/Footer.tsx"), generateFlagshipFooter());
263
+ await atomicWrite(path.join(srcDir, "routes/home.tsx"), generateFlagshipHome());
264
+ await atomicWrite(path.join(srcDir, "routes/showcase.tsx"), generateFlagshipShowcase());
333
265
  await atomicWrite(path.join(srcDir, "components", "creative", "CanvasLayer.tsx"), generateFlagshipCanvasLayer());
334
266
  await atomicWrite(path.join(srcDir, "components", "ui", "Button.tsx"), generateBespokeButton());
335
267
  await atomicWrite(path.join(srcDir, "components", "ui", "Input.tsx"), generateBespokeInput());
336
268
  }
269
+ export function generateSmoothScroll() {
270
+ return `import Lenis from "lenis";
271
+ import "lenis/dist/lenis.css";
272
+ import { useEffect } from "react";
273
+
274
+ export function useSmoothScroll() {
275
+ useEffect(() => {
276
+ const preference = window.matchMedia("(prefers-reduced-motion: reduce)");
277
+ let lenis: Lenis | undefined;
278
+ let frameId = 0;
279
+ const stop = () => {
280
+ cancelAnimationFrame(frameId);
281
+ lenis?.destroy();
282
+ lenis = undefined;
283
+ };
284
+ const update = () => {
285
+ stop();
286
+ if (preference.matches) return;
287
+ const instance = new Lenis({
288
+ duration: 1.2,
289
+ easing: (t) => Math.min(1, 1.001 - 2 ** (-10 * t)),
290
+ smoothWheel: true,
291
+ });
292
+ lenis = instance;
293
+ const raf = (time: number) => {
294
+ instance.raf(time);
295
+ frameId = requestAnimationFrame(raf);
296
+ };
297
+ frameId = requestAnimationFrame(raf);
298
+ };
299
+ update();
300
+ preference.addEventListener("change", update);
301
+ return () => {
302
+ preference.removeEventListener("change", update);
303
+ stop();
304
+ };
305
+ }, []);
306
+ }
307
+ `;
308
+ }
309
+ export function generateFlagshipHeader() {
310
+ return `import { Link } from "wouter";
311
+
312
+ export function Header() {
313
+ return (
314
+ <header className="border-b border-[var(--color-border)] bg-[var(--color-surface)]/80 backdrop-blur-md sticky top-0 z-40">
315
+ <div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] h-16 flex items-center justify-between">
316
+ <Link
317
+ href="/"
318
+ className="text-[var(--text-lg)] font-bold tracking-tight text-[var(--color-foreground)]"
319
+ >
320
+ Flagship Studio
321
+ </Link>
322
+ <nav aria-label="Main Navigation" className="flex items-center gap-6 text-[var(--text-sm)]">
323
+ <Link
324
+ href="/"
325
+ className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
326
+ >
327
+ Home
328
+ </Link>
329
+ <Link
330
+ href="/showcase"
331
+ className="text-[var(--color-muted-foreground)] hover:text-[var(--color-foreground)] transition-colors"
332
+ >
333
+ Showcase
334
+ </Link>
335
+ </nav>
336
+ </div>
337
+ </header>
338
+ );
339
+ }
340
+ `;
341
+ }
342
+ export function generateFlagshipFooter() {
343
+ return `export function Footer() {
344
+ return (
345
+ <footer className="relative z-10 border-t border-[var(--color-border)] bg-[var(--color-surface)] py-8 mt-auto">
346
+ <div className="max-w-[var(--spacing-container-max)] mx-auto px-[var(--spacing-container-gutter)] flex flex-col sm:flex-row items-center justify-between gap-4 text-[var(--text-xs)] text-[var(--color-muted-foreground)]">
347
+ <p>&copy; {new Date().getFullYear()} Flagship Studio. All rights reserved.</p>
348
+ </div>
349
+ </footer>
350
+ );
351
+ }
352
+ `;
353
+ }
354
+ export function generateFlagshipHome() {
355
+ return `import { Reveal } from "../components/motion";
356
+ import { Button } from "../components/ui";
357
+
358
+ export default function HomeView() {
359
+ return (
360
+ <section className="py-24 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
361
+ <Reveal className="flex flex-col gap-6 max-w-2xl">
362
+ <h1 className="text-[var(--text-5xl)] font-bold leading-tight tracking-tight">
363
+ Creative Engineering & Visual Systems
364
+ </h1>
365
+ <p className="text-[var(--text-xl)] text-[var(--color-muted-foreground)] leading-relaxed">
366
+ Interactive web experiences with headless routing, smooth scrolling, and dynamic graphics
367
+ layers.
368
+ </p>
369
+ <div className="flex gap-4 pt-4">
370
+ <Button variant="primary" size="lg">
371
+ Explore Showcase
372
+ </Button>
373
+ <Button variant="outline" size="lg">
374
+ Architecture
375
+ </Button>
376
+ </div>
377
+ </Reveal>
378
+ </section>
379
+ );
380
+ }
381
+ `;
382
+ }
383
+ export function generateFlagshipShowcase() {
384
+ return `export default function ShowcaseView() {
385
+ return (
386
+ <section className="py-20 px-[var(--spacing-container-gutter)] max-w-[var(--spacing-container-max)] mx-auto w-full">
387
+ <h1 className="text-[var(--text-4xl)] font-bold mb-6">Creative Showcase</h1>
388
+ <p className="text-[var(--text-base)] text-[var(--color-muted-foreground)]">
389
+ Interactive experiences delivered with precision performance.
390
+ </p>
391
+ </section>
392
+ );
393
+ }
394
+ `;
395
+ }
337
396
  //# sourceMappingURL=flagship.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flagship.js","sourceRoot":"","sources":["../../src/scaffold/flagship.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flagship.js","sourceRoot":"","sources":["../../src/scaffold/flagship.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ export interface ScaffoldOptions {
2
2
  targetDir: string;
3
3
  name: string;
4
4
  flagship?: boolean;
5
- backend?: "php" | "node";
5
+ backend?: "php" | "node" | "none";
6
6
  initGit?: boolean;
7
7
  }
8
8
  export declare function scaffoldNewProject(options: ScaffoldOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EhF"}
@@ -1,17 +1,20 @@
1
- import { isSafeProjectName } from "../utils/fs.js";
1
+ import path from "node:path";
2
+ import { atomicWrite, isSafeProjectName } from "../utils/fs.js";
2
3
  import { initGit } from "../utils/git.js";
3
4
  import { scaffoldAgentPolicies } from "./agents.js";
4
5
  import { scaffoldBackend } from "./backend.js";
5
6
  import { scaffoldDesign } from "./design.js";
6
7
  import { scaffoldFlagshipProject } from "./flagship.js";
8
+ import { scaffoldLibrary } from "./library.js";
7
9
  import { scaffoldPhases } from "./phases.js";
8
10
  import { scaffoldRepomap } from "./repomap.js";
9
11
  import { scaffoldStandardProject } from "./standard.js";
10
12
  import { scaffoldTokens } from "./tokens.js";
13
+ import { scaffoldWorkflow } from "./workflow.js";
11
14
  export async function scaffoldNewProject(options) {
12
- const { targetDir, name, flagship = false, backend = "php", initGit: shouldInitGit = true, } = options;
13
- if (backend !== "php" && backend !== "node") {
14
- throw new Error(`Invalid backend '${backend}'. Expected php or node.`);
15
+ const { targetDir, name, flagship = false, backend = "none", initGit: shouldInitGit = true, } = options;
16
+ if (backend !== "php" && backend !== "node" && backend !== "none") {
17
+ throw new Error(`Invalid backend '${backend}'. Expected none, php, or node.`);
15
18
  }
16
19
  if (!isSafeProjectName(name)) {
17
20
  throw new Error(`Invalid project name '${name}'. Use lowercase alphanumeric characters and hyphens.`);
@@ -23,9 +26,10 @@ export async function scaffoldNewProject(options) {
23
26
  // 3. 10-Step Atomic Phases
24
27
  await scaffoldPhases(targetDir);
25
28
  // 4. Repomap & Fihrist
26
- await scaffoldRepomap(targetDir, name, flagship);
29
+ await scaffoldRepomap(targetDir, name, flagship, backend);
27
30
  // 5. Design Evidence Directory
28
31
  await scaffoldDesign(targetDir, name);
32
+ await scaffoldWorkflow(targetDir);
29
33
  // 6. Frontend Framework Engine
30
34
  if (flagship) {
31
35
  await scaffoldFlagshipProject(targetDir, name);
@@ -33,8 +37,19 @@ export async function scaffoldNewProject(options) {
33
37
  else {
34
38
  await scaffoldStandardProject(targetDir, name);
35
39
  }
36
- // 7. Backend API & Security Layer
37
- await scaffoldBackend(targetDir, backend);
40
+ await scaffoldLibrary(targetDir);
41
+ await atomicWrite(path.join(targetDir, ".mozole", "project.json"), JSON.stringify({
42
+ version: 1,
43
+ name,
44
+ profile: flagship ? "flagship" : "standard",
45
+ backend,
46
+ library: "src/library/index.ts",
47
+ }, null, 2));
48
+ await atomicWrite(path.join(targetDir, ".gitignore"), "node_modules/\ndist/\nbuild/\n.react-router/\n.env\n.env.*\n!.env.example\n*.log\nrelease/\nrelease.zip\nreleases/\n");
49
+ // 7. Backend API & Security Layer (optional)
50
+ if (backend !== "none") {
51
+ await scaffoldBackend(targetDir, backend);
52
+ }
38
53
  // 8. Initialize Git Repository with Clean Initial Commit
39
54
  if (shouldInitGit) {
40
55
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAU7C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAwB;IAC/D,MAAM,EACJ,SAAS,EACT,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,OAAO,EAAE,aAAa,GAAG,IAAI,GAC9B,GAAG,OAAO,CAAC;IACZ,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,0BAA0B,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,uDAAuD,CACrF,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,MAAM,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE7C,sCAAsC;IACtC,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAEhC,2BAA2B;IAC3B,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAEhC,uBAAuB;IACvB,MAAM,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEjD,+BAA+B;IAC/B,MAAM,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAEtC,+BAA+B;IAC/B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,kCAAkC;IAClC,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE1C,yDAAyD;IACzD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function generateDialog(): string;
2
+ export declare function scaffoldLibrary(root: string): Promise<void>;
3
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/scaffold/library.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,IAAI,MAAM,CA4BvC;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEjE"}
@@ -0,0 +1,98 @@
1
+ import path from "node:path";
2
+ import { atomicWrite, exists, writeFiles } from "../utils/fs.js";
3
+ import { generateBespokeButton, generateBespokeInput } from "./standard.js";
4
+ export function generateDialog() {
5
+ return `import * as Primitive from "@radix-ui/react-dialog";
6
+ import type { ComponentProps } from "react";
7
+
8
+ export const Dialog = Primitive.Root;
9
+ export const DialogTrigger = Primitive.Trigger;
10
+ export const DialogClose = Primitive.Close;
11
+ export const DialogTitle = Primitive.Title;
12
+ export const DialogDescription = Primitive.Description;
13
+
14
+ export function DialogContent({
15
+ children,
16
+ className = "",
17
+ ...props
18
+ }: ComponentProps<typeof Primitive.Content>) {
19
+ return (
20
+ <Primitive.Portal>
21
+ <Primitive.Overlay className="fixed inset-0 z-50 bg-[var(--color-background)]/80" />
22
+ <Primitive.Content
23
+ className={\`fixed left-1/2 top-1/2 z-50 w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2 rounded-[var(--radius-sm)] border border-[var(--color-border)] bg-[var(--color-surface)] p-6 text-[var(--color-foreground)] focus:outline-none \${className}\`}
24
+ {...props}
25
+ >
26
+ {children}
27
+ </Primitive.Content>
28
+ </Primitive.Portal>
29
+ );
30
+ }
31
+ `;
32
+ }
33
+ export async function scaffoldLibrary(root) {
34
+ await writeFiles(root, {
35
+ "src/components/ui/Button.tsx": generateBespokeButton(),
36
+ "src/components/ui/Input.tsx": generateBespokeInput(),
37
+ "src/components/ui/Dialog.tsx": generateDialog(),
38
+ "src/components/layout/Container.tsx": `import type { ComponentProps } from "react";
39
+
40
+ export function Container({ className = "", ...props }: ComponentProps<"div">) {
41
+ return (
42
+ <div
43
+ className={\`mx-auto w-full max-w-[var(--spacing-container-max)] px-[var(--spacing-container-gutter)] \${className}\`}
44
+ {...props}
45
+ />
46
+ );
47
+ }
48
+ `,
49
+ "src/components/features/index.ts": "export {};\n",
50
+ "src/components/sections/index.ts": "export {};\n",
51
+ "src/components/motion/index.ts": "export {};\n",
52
+ "src/behaviors/index.ts": "export {};\n",
53
+ "src/components/motion/README.md": "# Project motion\n\nOwn animation components here. Standard has no required motion runtime; Flagship uses Motion.\n",
54
+ "src/behaviors/README.md": "# Project behaviors\n\nOwn hooks and interaction policies here. Never import implementations from sibling projects.\n",
55
+ "docs/library.md": "# Project library\n\nImport UI from src/components/ui, layouts from src/components/layout, and the project library from src/library. Every implementation and token belongs to this project. Prototype workspaces share npm dependencies only.\n\nCompose Dialog with DialogTrigger, DialogContent, DialogTitle, DialogDescription and DialogClose. Provide an accessible title and a visible close control; use aria-describedby={undefined} when intentionally omitting a description.\n\nEach independent primitive must have its own named file; related Dialog parts may share Dialog.tsx. Add reusable feature components in src/components/features and independent sections in src/components/sections. Pages compose sections. Adding a component requires an explicit export in its local index.ts. Keep backend access in project-owned services and pass data/actions into visual components. Keep primitives independent of routes and backend. Follow docs/workflow.md and docs/toolkit.md; design direction comes from the conversation. Do not create a /ui gallery unless requested.\n",
56
+ });
57
+ const indexes = {
58
+ "src/components/ui/index.ts": [
59
+ 'export * from "./Button";',
60
+ 'export * from "./Input";',
61
+ 'export * from "./Dialog";',
62
+ ],
63
+ "src/components/layout/index.ts": ['export { Container } from "./Container";'],
64
+ "src/library/index.ts": [
65
+ 'export * from "../components/ui";',
66
+ 'export * from "../components/layout";',
67
+ 'export * from "../components/features";',
68
+ 'export * from "../components/sections";',
69
+ 'export * from "../components/motion";',
70
+ 'export * from "../behaviors";',
71
+ ],
72
+ };
73
+ for (const component of ["Header", "Footer"]) {
74
+ if (await exists(path.join(root, `src/components/layout/${component}.tsx`))) {
75
+ indexes["src/components/layout/index.ts"].push(`export * from "./${component}";`);
76
+ }
77
+ }
78
+ for (const [file, exports] of Object.entries(indexes)) {
79
+ const target = path.join(root, file);
80
+ // Existing custom barrels may expose different symbols; adoption reports them for review.
81
+ if (!(await exists(target)))
82
+ await atomicWrite(target, `${exports.join("\n")}\n`);
83
+ }
84
+ const manifest = path.join(root, ".mozole", "library.json");
85
+ if (!(await exists(manifest))) {
86
+ await atomicWrite(manifest, JSON.stringify({
87
+ ownership: "project",
88
+ entry: "src/library/index.ts",
89
+ ui: "src/components/ui",
90
+ layout: "src/components/layout",
91
+ features: "src/components/features",
92
+ sections: "src/components/sections",
93
+ motion: "src/components/motion",
94
+ behavior: "src/behaviors",
95
+ }, null, 2));
96
+ }
97
+ }
98
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/scaffold/library.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BR,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,UAAU,CAAC,IAAI,EAAE;QACrB,8BAA8B,EAAE,qBAAqB,EAAE;QACvD,6BAA6B,EAAE,oBAAoB,EAAE;QACrD,8BAA8B,EAAE,cAAc,EAAE;QAChD,qCAAqC,EAAE;;;;;;;;;;CAU1C;QACG,kCAAkC,EAAE,cAAc;QAClD,kCAAkC,EAAE,cAAc;QAClD,gCAAgC,EAAE,cAAc;QAChD,wBAAwB,EAAE,cAAc;QACxC,iCAAiC,EAC/B,qHAAqH;QACvH,yBAAyB,EACvB,uHAAuH;QACzH,iBAAiB,EACf,yiCAAyiC;KAC5iC,CAAC,CAAC;IACH,MAAM,OAAO,GAA6B;QACxC,4BAA4B,EAAE;YAC5B,2BAA2B;YAC3B,0BAA0B;YAC1B,2BAA2B;SAC5B;QACD,gCAAgC,EAAE,CAAC,0CAA0C,CAAC;QAC9E,sBAAsB,EAAE;YACtB,mCAAmC;YACnC,uCAAuC;YACvC,yCAAyC;YACzC,yCAAyC;YACzC,uCAAuC;YACvC,+BAA+B;SAChC;KACF,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7C,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC;YAC5E,OAAO,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,oBAAoB,SAAS,IAAI,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,0FAA0F;QAC1F,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,WAAW,CACf,QAAQ,EACR,IAAI,CAAC,SAAS,CACZ;YACE,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,sBAAsB;YAC7B,EAAE,EAAE,mBAAmB;YACvB,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,eAAe;SAC1B,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,EAAE,eAAe,EAuInC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,YAAY,SAAO,GAAG,MAAM,CA0BlE;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
1
+ {"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,EAAE,eAAe,EA4InC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,YAAY,SAAO,GAAG,MAAM,CA0BlE;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
@@ -16,12 +16,12 @@ export const PHASES = [
16
16
  {
17
17
  id: "01",
18
18
  name: "Core Architecture & Layout",
19
- description: "Application root shell, navigation container, footer, and responsive viewport frame.",
19
+ description: "Technical root shell and module boundaries before visual composition.",
20
20
  checklist: [
21
21
  "Root layout established with single <main> landmark",
22
22
  "Skip-to-content accessible link implemented",
23
- "Navigation header with responsive mobile drawer/menu",
24
- "Footer landmark with copyright and essential links",
23
+ "Project-local UI, feature, section, layout, motion and behavior boundaries documented",
24
+ "Starter layout is not treated as approved design; no unrequested visual composition",
25
25
  "Zero viewport overflow at 320px minimum mobile width",
26
26
  ],
27
27
  },
@@ -30,7 +30,9 @@ export const PHASES = [
30
30
  name: "Design Tokens & Primitive Components",
31
31
  description: "Bespoke Radix UI primitives, typography hierarchies, and token integration.",
32
32
  checklist: [
33
- "Bespoke primitives implemented in src/components/ui/ (Button, Dialog, Input)",
33
+ "Each independent primitive in its own src/components/ui/ file; related primitive parts may stay together",
34
+ "Reusable modules exported through local barrels and src/library/index.ts",
35
+ "Settled conversation decisions recorded separately from assumptions in docs/decisions.md",
34
36
  "Zero hardcoded color hex/rgb literals (enforced by PostCSS AST audit)",
35
37
  "Semantic typography applied via var(--font-display) and var(--font-body)",
36
38
  "Interactive targets satisfy minimum 24px/44px touch area",
@@ -40,9 +42,12 @@ export const PHASES = [
40
42
  {
41
43
  id: "03",
42
44
  name: "Primary Routes & Pages",
43
- description: "Static content routes, hierarchy, meta tags, and document title management.",
45
+ description: "Compose feature components, then sections, then pages as authorized by the user.",
44
46
  checklist: [
45
- "Home page and primary sub-pages declared with unique routes",
47
+ "Only requested pages declared with unique routes",
48
+ "Feature components compose primitives; separate section files compose features",
49
+ "Pages compose sections; visual modules receive data/actions via props",
50
+ "No /ui gallery or additional design stage created without user direction",
46
51
  "Single <h1> per page verified across all views",
47
52
  "Semantic HTML tags used (section, article, nav, aside)",
48
53
  "All images include descriptive alt text or explicit decorative alt=''",
@@ -75,14 +80,14 @@ export const PHASES = [
75
80
  },
76
81
  {
77
82
  id: "06",
78
- name: "Backend Integration & Security",
79
- description: "Zero-dependency PHP 8.1+ endpoints, honeypot spam protection, and rate limiting.",
83
+ name: "Integrations & Security",
84
+ description: "Form submission handling, anti-spam honeypot, security headers, and optional API endpoints.",
80
85
  checklist: [
81
- "PHP endpoints responding with valid JSON headers and CORS checks",
82
- "Honeypot field stops bot spam without user friction",
83
- "IP rate limiting active and bounded by temporary storage window",
84
- "Direct file access to config.php denied via .htaccess / security headers",
85
- "Input sanitization and email header injection protection active",
86
+ "Form submissions validated and protected against spam (honeypot or rate limiting)",
87
+ "Security headers and CORS origins verified",
88
+ "Input sanitization active on all interactive input fields",
89
+ "Backend API endpoints (if applicable) or client form handlers respond cleanly",
90
+ "Sensitive secrets and environment variables protected from client bundle leakage",
86
91
  ],
87
92
  },
88
93
  {
@@ -137,7 +142,7 @@ export const PHASES = [
137
142
  export function generatePhasesStatusMd(currentPhase = "00") {
138
143
  let content = `# Project Development Phases & Status
139
144
 
140
- > **Discipline Notice:** Development proceeds sequentially through phases 00 to 10. Run \`mozole phase status\` to inspect progress, and \`mozole phase next\` to advance upon passing all checklist criteria and \`mozole verify\`.
145
+ > **Discipline Notice:** Engineering progress is tracked through phases 00 to 10. Follow docs/workflow.md: primitives, feature components, sections, then pages, only within conversation-authorized scope. Phase 01 establishes technical boundaries, not a finished visual layout. Run \`mozole phase status\` to inspect progress, and \`mozole phase next\` to advance after applicable criteria and authorized checks. It does not run verification itself and may create a Git commit. If tests are prohibited, report them as not run; do not mark them passed.
141
146
 
142
147
  **Current Phase:** Phase ${currentPhase}
143
148
 
@@ -1 +1 @@
1
- {"version":3,"file":"phases.js","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phases.js","sourceRoot":"","sources":["../../src/scaffold/phases.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- export declare function generateRepomapArchitecture(projectName: string, isFlagship: boolean): string;
1
+ export declare function generateRepomapArchitecture(projectName: string, isFlagship: boolean, backend?: "none" | "php" | "node"): string;
2
2
  export declare function generateRepomapComponents(): string;
3
- export declare function generateRepomapRoutes(): string;
3
+ export declare function generateRepomapRoutes(isFlagship?: boolean): string;
4
4
  export declare function generateRepomapTokens(): string;
5
- export declare function scaffoldRepomap(projectRoot: string, projectName: string, isFlagship?: boolean): Promise<void>;
5
+ export declare function scaffoldRepomap(projectRoot: string, projectName: string, isFlagship?: boolean, backend?: "none" | "php" | "node"): Promise<void>;
6
6
  //# sourceMappingURL=repomap.d.ts.map