@theproductguy/create-mission-control 1.0.0 → 1.0.4

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 (143) hide show
  1. package/bin/cli.js +12 -5
  2. package/package.json +2 -2
  3. package/src/template/agent-os/commands/export-product/export-product.md +26 -1
  4. package/src/template/agent-os/commands/initialize-design/initialize-design.md +10 -1
  5. package/src/template/agent-os-ui/README.md +5 -5
  6. package/src/template/agent-os-ui/package.json +1 -1
  7. package/src/template/control-center/backend/index.js +9 -3
  8. package/src/template/control-center/frontend/package.json +1 -1
  9. package/src/template/control-center/frontend/src/App.tsx +90 -31
  10. package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/design-shell.md +95 -69
  11. package/src/template/design-system/.gemini/commands/design-os/design-tokens.md +211 -0
  12. package/src/template/design-system/.gemini/commands/impeccable/WORKFLOW.md +163 -0
  13. package/src/template/design-system/.gemini/commands/impeccable/adapt.md +189 -0
  14. package/src/template/design-system/.gemini/commands/impeccable/animate.md +184 -0
  15. package/src/template/design-system/.gemini/commands/impeccable/audit.md +123 -0
  16. package/src/template/design-system/.gemini/commands/impeccable/bolder.md +126 -0
  17. package/src/template/design-system/.gemini/commands/impeccable/clarify.md +173 -0
  18. package/src/template/design-system/.gemini/commands/impeccable/colorize.md +152 -0
  19. package/src/template/design-system/.gemini/commands/impeccable/critique.md +112 -0
  20. package/src/template/design-system/.gemini/commands/impeccable/delight.md +311 -0
  21. package/src/template/design-system/.gemini/commands/impeccable/extract.md +88 -0
  22. package/src/template/design-system/.gemini/commands/impeccable/harden.md +351 -0
  23. package/src/template/design-system/.gemini/commands/impeccable/normalize.md +61 -0
  24. package/src/template/design-system/.gemini/commands/impeccable/onboard.md +236 -0
  25. package/src/template/design-system/.gemini/commands/impeccable/optimize.md +262 -0
  26. package/src/template/design-system/.gemini/commands/impeccable/polish.md +196 -0
  27. package/src/template/design-system/.gemini/commands/impeccable/quieter.md +112 -0
  28. package/src/template/design-system/.gemini/commands/impeccable/simplify.md +131 -0
  29. package/src/template/design-system/.gemini/commands/impeccable/teach-impeccable.md +67 -0
  30. package/src/template/design-system/.gemini/skills/frontend-design/SKILL.md +126 -0
  31. package/src/template/design-system/.gemini/skills/frontend-design/reference/color-and-contrast.md +132 -0
  32. package/src/template/design-system/.gemini/skills/frontend-design/reference/interaction-design.md +123 -0
  33. package/src/template/design-system/.gemini/skills/frontend-design/reference/motion-design.md +99 -0
  34. package/src/template/design-system/.gemini/skills/frontend-design/reference/responsive-design.md +114 -0
  35. package/src/template/design-system/.gemini/skills/frontend-design/reference/spatial-design.md +100 -0
  36. package/src/template/design-system/.gemini/skills/frontend-design/reference/typography.md +131 -0
  37. package/src/template/design-system/.gemini/skills/frontend-design/reference/ux-writing.md +107 -0
  38. package/src/template/{design → design-system}/src/components/DesignPage.tsx +104 -0
  39. package/src/template/{design → design-system}/src/components/ExportPage.tsx +9 -2
  40. package/src/template/package-lock.json +10308 -0
  41. package/src/template/tailwind.config.js +1 -1
  42. package/src/template/design/.claude/commands/design-os/design-tokens.md +0 -166
  43. package/src/template/design/.claude/skills/frontend-design/SKILL.md +0 -42
  44. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/data-model.md +0 -0
  45. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/design-screen.md +0 -0
  46. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/export-product.md +0 -0
  47. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/product-roadmap.md +0 -0
  48. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/product-vision.md +0 -0
  49. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/sample-data.md +0 -0
  50. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/screenshot-design.md +0 -0
  51. /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/shape-section.md +0 -0
  52. /package/src/template/{design → design-system}/.github/CODE_OF_CONDUCT.md +0 -0
  53. /package/src/template/{design → design-system}/.github/CONTRIBUTING.md +0 -0
  54. /package/src/template/{design → design-system}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  55. /package/src/template/{design → design-system}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  56. /package/src/template/{design → design-system}/.github/SECURITY.yml +0 -0
  57. /package/src/template/{design → design-system}/.github/SUPPORT.md +0 -0
  58. /package/src/template/{design → design-system}/.github/workflows/pr-decline.yml +0 -0
  59. /package/src/template/{design → design-system}/.github/workflows/stale.yml +0 -0
  60. /package/src/template/{design → design-system}/CHANGELOG.md +0 -0
  61. /package/src/template/{design → design-system}/LICENSE +0 -0
  62. /package/src/template/{design → design-system}/README.md +0 -0
  63. /package/src/template/{design → design-system}/agents.md +0 -0
  64. /package/src/template/{design → design-system}/components.json +0 -0
  65. /package/src/template/{design → design-system}/docs/codebase-implementation.md +0 -0
  66. /package/src/template/{design → design-system}/docs/design-section.md +0 -0
  67. /package/src/template/{design → design-system}/docs/export.md +0 -0
  68. /package/src/template/{design → design-system}/docs/getting-started.md +0 -0
  69. /package/src/template/{design → design-system}/docs/index.md +0 -0
  70. /package/src/template/{design → design-system}/docs/product-planning.md +0 -0
  71. /package/src/template/{design → design-system}/docs/requirements.md +0 -0
  72. /package/src/template/{design → design-system}/docs/usage.md +0 -0
  73. /package/src/template/{design → design-system}/eslint.config.js +0 -0
  74. /package/src/template/{design/claude.md → design-system/gemini.md} +0 -0
  75. /package/src/template/{design → design-system}/index.html +0 -0
  76. /package/src/template/{design → design-system}/package.json +0 -0
  77. /package/src/template/{design → design-system}/postcss.config.js +0 -0
  78. /package/src/template/{design → design-system}/public/favicon.svg +0 -0
  79. /package/src/template/{design → design-system}/public/vite.svg +0 -0
  80. /package/src/template/{design → design-system}/src/assets/react.svg +0 -0
  81. /package/src/template/{design → design-system}/src/components/AppLayout.tsx +0 -0
  82. /package/src/template/{design → design-system}/src/components/DataCard.tsx +0 -0
  83. /package/src/template/{design → design-system}/src/components/DataModelPage.tsx +0 -0
  84. /package/src/template/{design → design-system}/src/components/EmptyState.tsx +0 -0
  85. /package/src/template/{design → design-system}/src/components/NextPhaseButton.tsx +0 -0
  86. /package/src/template/{design → design-system}/src/components/PhaseNav.tsx +0 -0
  87. /package/src/template/{design → design-system}/src/components/PhaseWarningBanner.tsx +0 -0
  88. /package/src/template/{design → design-system}/src/components/ProductOverviewCard.tsx +0 -0
  89. /package/src/template/{design → design-system}/src/components/ProductPage.tsx +0 -0
  90. /package/src/template/{design → design-system}/src/components/ScreenDesignPage.tsx +0 -0
  91. /package/src/template/{design → design-system}/src/components/ScreenDesignsCard.tsx +0 -0
  92. /package/src/template/{design → design-system}/src/components/SectionPage.tsx +0 -0
  93. /package/src/template/{design → design-system}/src/components/SectionsCard.tsx +0 -0
  94. /package/src/template/{design → design-system}/src/components/SectionsPage.tsx +0 -0
  95. /package/src/template/{design → design-system}/src/components/ShellCard.tsx +0 -0
  96. /package/src/template/{design → design-system}/src/components/ShellDesignPage.tsx +0 -0
  97. /package/src/template/{design → design-system}/src/components/SpecCard.tsx +0 -0
  98. /package/src/template/{design → design-system}/src/components/StepIndicator.tsx +0 -0
  99. /package/src/template/{design → design-system}/src/components/ThemeToggle.tsx +0 -0
  100. /package/src/template/{design → design-system}/src/components/ui/ToastContext.tsx +0 -0
  101. /package/src/template/{design → design-system}/src/components/ui/avatar.tsx +0 -0
  102. /package/src/template/{design → design-system}/src/components/ui/badge.tsx +0 -0
  103. /package/src/template/{design → design-system}/src/components/ui/button.tsx +0 -0
  104. /package/src/template/{design → design-system}/src/components/ui/card.tsx +0 -0
  105. /package/src/template/{design → design-system}/src/components/ui/collapsible.tsx +0 -0
  106. /package/src/template/{design → design-system}/src/components/ui/dialog.tsx +0 -0
  107. /package/src/template/{design → design-system}/src/components/ui/dropdown-menu.tsx +0 -0
  108. /package/src/template/{design → design-system}/src/components/ui/input.tsx +0 -0
  109. /package/src/template/{design → design-system}/src/components/ui/label.tsx +0 -0
  110. /package/src/template/{design → design-system}/src/components/ui/progress.tsx +0 -0
  111. /package/src/template/{design → design-system}/src/components/ui/scroll-area.tsx +0 -0
  112. /package/src/template/{design → design-system}/src/components/ui/select.tsx +0 -0
  113. /package/src/template/{design → design-system}/src/components/ui/separator.tsx +0 -0
  114. /package/src/template/{design → design-system}/src/components/ui/sheet.tsx +0 -0
  115. /package/src/template/{design → design-system}/src/components/ui/skeleton.tsx +0 -0
  116. /package/src/template/{design → design-system}/src/components/ui/switch.tsx +0 -0
  117. /package/src/template/{design → design-system}/src/components/ui/table.tsx +0 -0
  118. /package/src/template/{design → design-system}/src/components/ui/tabs.tsx +0 -0
  119. /package/src/template/{design → design-system}/src/index.css +0 -0
  120. /package/src/template/{design → design-system}/src/lib/data-model-loader.ts +0 -0
  121. /package/src/template/{design → design-system}/src/lib/design-system-loader.ts +0 -0
  122. /package/src/template/{design → design-system}/src/lib/product-loader.ts +0 -0
  123. /package/src/template/{design → design-system}/src/lib/router.tsx +0 -0
  124. /package/src/template/{design → design-system}/src/lib/section-loader.ts +0 -0
  125. /package/src/template/{design → design-system}/src/lib/shell-loader.ts +0 -0
  126. /package/src/template/{design → design-system}/src/lib/utils.ts +0 -0
  127. /package/src/template/{design → design-system}/src/main.tsx +0 -0
  128. /package/src/template/{design → design-system}/src/sections/.gitkeep +0 -0
  129. /package/src/template/{design → design-system}/src/sections/ai-orchestration-engine-oai/OrchestrationEngine.tsx +0 -0
  130. /package/src/template/{design → design-system}/src/sections/core-platform-shell/AppShell.tsx +0 -0
  131. /package/src/template/{design → design-system}/src/sections/gemini-live-integration/GeminiIntegration.tsx +0 -0
  132. /package/src/template/{design → design-system}/src/sections/interactive-2d-canvas/WhiteboardCanvas.tsx +0 -0
  133. /package/src/template/{design → design-system}/src/sections/participation-equity-tracker/EquityTracker.tsx +0 -0
  134. /package/src/template/{design → design-system}/src/sections/persistent-memory-system/PersistentMemory.tsx +0 -0
  135. /package/src/template/{design → design-system}/src/sections/real-time-communication-layer/VideoSession.tsx +0 -0
  136. /package/src/template/{design → design-system}/src/sections/visual-intelligence-agents/VisualAgents.tsx +0 -0
  137. /package/src/template/{design → design-system}/src/types/product.ts +0 -0
  138. /package/src/template/{design → design-system}/src/types/section.ts +0 -0
  139. /package/src/template/{design → design-system}/tailwind.config.js +0 -0
  140. /package/src/template/{design → design-system}/tsconfig.app.json +0 -0
  141. /package/src/template/{design → design-system}/tsconfig.json +0 -0
  142. /package/src/template/{design → design-system}/tsconfig.node.json +0 -0
  143. /package/src/template/{design → design-system}/vite.config.ts +0 -0
package/bin/cli.js CHANGED
@@ -87,16 +87,23 @@ async function init() {
87
87
  const templateDir = path.resolve(__dirname, '../src/template');
88
88
 
89
89
  // Copy Control Center
90
- fs.cpSync(path.join(templateDir, 'control-center'), path.join(root, 'control-center'), { recursive: true });
90
+ // Copy helper to exclude node_modules
91
+ const copyOptions = {
92
+ recursive: true,
93
+ filter: (src) => !src.includes('node_modules')
94
+ };
95
+
96
+ // Copy Control Center
97
+ fs.cpSync(path.join(templateDir, 'control-center'), path.join(root, 'control-center'), copyOptions);
91
98
 
92
99
  // Copy Design System
93
- fs.cpSync(path.join(templateDir, 'design'), path.join(root, 'design-system'), { recursive: true });
100
+ fs.cpSync(path.join(templateDir, 'design-system'), path.join(root, 'design-system'), copyOptions);
94
101
 
95
102
  // Copy Agent OS Docs
96
- fs.cpSync(path.join(templateDir, 'agent-os'), path.join(root, 'agent-os'), { recursive: true });
103
+ fs.cpSync(path.join(templateDir, 'agent-os'), path.join(root, 'agent-os'), copyOptions);
97
104
 
98
105
  // Copy Agent OS UI Package (for local workspace support)
99
- fs.cpSync(path.join(templateDir, 'agent-os-ui'), path.join(root, 'agent-os-ui'), { recursive: true });
106
+ fs.cpSync(path.join(templateDir, 'agent-os-ui'), path.join(root, 'agent-os-ui'), copyOptions);
100
107
 
101
108
  // 3. Configure Workspace
102
109
  console.log(cyan('\n3. Configuring Workspace...'));
@@ -112,7 +119,7 @@ async function init() {
112
119
 
113
120
  appPkg.dependencies = {
114
121
  ...appPkg.dependencies,
115
- "@builderos/agent-os-ui": "*", // Use workspace version
122
+ "@theproductguy/agent-os-ui": "*", // Use workspace version
116
123
  "lucide-react": "^0.469.0",
117
124
  "clsx": "^2.1.0",
118
125
  "tailwind-merge": "^2.2.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theproductguy/create-mission-control",
3
- "version": "1.0.0",
3
+ "version": "1.0.4",
4
4
  "description": "Scaffolding tool for Agent OS applications",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,4 +41,4 @@
41
41
  "typescript": "^5.3.3",
42
42
  "vite": "^5.0.10"
43
43
  }
44
- }
44
+ }
@@ -19,6 +19,30 @@ Verify the minimum requirements exist:
19
19
 
20
20
  If required files are missing, stop and ask the user to complete them first.
21
21
 
22
+ ## Step 1.5: Impeccable Quality Check (Pre-Export)
23
+
24
+ Before exporting, run a quick quality assessment:
25
+
26
+ **Check for QA Reports:**
27
+ 1. Look for `design-system/QA/audit-report.md` — Has a full audit been run?
28
+ 2. Look for `design-system/QA/tokens-audit.md` — Were design tokens audited?
29
+ 3. Look for `design-system/QA/shell-audit.md` — Was the shell audited?
30
+
31
+ **If no audit reports exist:**
32
+ "⚠️ **Impeccable Warning**: No quality audits found. I recommend running `/audit` before exporting to ensure your design meets quality standards and avoids 'AI Slop'.
33
+
34
+ Would you like me to:
35
+ 1. Run `/audit` now (recommended)
36
+ 2. Proceed with export anyway"
37
+
38
+ **If audits exist but have failures:**
39
+ "⚠️ **Impeccable Warning**: Previous audit found issues that may not have been addressed. Consider running the suggested fix commands (`/normalize`, `/harden`, etc.) before exporting.
40
+
41
+ Proceed with export?"
42
+
43
+ **If audits pass or user confirms:**
44
+ Continue to Step 2.
45
+
22
46
  ## Step 2: Create Export Directory Structure
23
47
 
24
48
  Create the `product-plan/` directory in the project root with this structure:
@@ -167,7 +191,8 @@ Use Test-Driven Development (TDD) based on `@product-plan/sections/SECTION_ID/te
167
191
  ## Step 9: Zip and Handoff
168
192
 
169
193
  1. Zip `product-plan/` into `product-plan.zip`.
170
- 2. Sync key files to `app/agent-os/product/` (Overview, Roadmap, Data Model, Design System) to update the status in the main app dashboard.
194
+ 2. Copy `product-plan.zip` to `design-system/product-plan.zip` (so Design OS can detect it).
195
+ 3. Sync key files to `app/agent-os/product/` (Overview, Roadmap, Data Model, Design System) to update the status in the main app dashboard.
171
196
 
172
197
  ## Final Output
173
198
 
@@ -64,4 +64,13 @@ Create a draft data model file:
64
64
  ### Step 3: Verification
65
65
  - Check that `design-system/product/product-overview.md` exists.
66
66
  - Check that `design-system/product/product-roadmap.md` exists.
67
- - Output a confirmation message: "Design OS initialized! You can now open http://localhost:3000 to begin designing."
67
+ - Output a confirmation message:
68
+
69
+ "Design OS initialized! You can now open http://localhost:5400 to begin designing.
70
+
71
+ **Recommended Next Steps:**
72
+ 1. Run `/teach-impeccable` — One-time setup to establish design context for this project.
73
+ 2. Run `/design-tokens` — Define your colors and typography.
74
+ 3. Run `/design-shell` — Design your navigation and layout.
75
+
76
+ The Impeccable command system will guide you toward distinctive, AI-slop-free designs."
@@ -1,4 +1,4 @@
1
- # @builderos/agent-os-ui
1
+ # @theproductguy/agent-os-ui
2
2
 
3
3
  The official UI capability for the **Agent OS** workflow.
4
4
  Use this library to build the control interface that guides you through the Antigravity development process (Product -> Design -> Build -> Verify).
@@ -6,19 +6,19 @@ Use this library to build the control interface that guides you through the Anti
6
6
  ## Installation
7
7
 
8
8
  ```bash
9
- npm install @builderos/agent-os-ui
9
+ npm install @theproductguy/agent-os-ui
10
10
  ```
11
11
 
12
12
  ## Setup
13
13
 
14
14
  1. Import the styles:
15
15
  ```ts
16
- import '@builderos/agent-os-ui/style.css';
16
+ import '@theproductguy/agent-os-ui/style.css';
17
17
  ```
18
18
 
19
19
  2. Build your Control Dashboard:
20
20
  ```tsx
21
- import { AgentShell, GuidanceCard } from '@builderos/agent-os-ui';
21
+ import { AgentShell, GuidanceCard } from '@theproductguy/agent-os-ui';
22
22
 
23
23
  export function ControlCenter() {
24
24
  return (
@@ -48,7 +48,7 @@ export function ControlCenter() {
48
48
  ## Example Layout
49
49
 
50
50
  ```tsx
51
- import { AgentShell, AgentSidebar, ThemeToggle } from '@builderos/agent-os-ui';
51
+ import { AgentShell, AgentSidebar, ThemeToggle } from '@theproductguy/agent-os-ui';
52
52
  import { Home, Layers } from 'lucide-react';
53
53
 
54
54
  export default function App() {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@builderos/agent-os-ui",
2
+ "name": "@theproductguy/agent-os-ui",
3
3
  "version": "0.1.0",
4
4
  "type": "module",
5
5
  "main": "./dist/agent-os-ui.umd.cjs",
@@ -125,9 +125,11 @@ app.get('/api/status', async (req, res) => {
125
125
 
126
126
  // Check for Design OS export and steps
127
127
  const designDir = path.join(PROJECT_ROOT, 'design-system');
128
- // Note: In dev, these files are in design/public/product. In prod, injected elsewhere.
129
- // But for this local dev setup, we check where the initialize-design command puts them?
130
- // Actually, initialize-design puts them in `design/public/product`.
128
+
129
+ // QA Check
130
+ const qaDir = path.join(designDir, 'QA');
131
+ const auditReport = path.join(qaDir, 'audit-report.md');
132
+ const polishReport = path.join(qaDir, 'polish-report.md');
131
133
 
132
134
  const hasDesignExport = fs.existsSync(path.join(PROJECT_ROOT, 'product-plan'));
133
135
  const hasDesignInit = fs.existsSync(path.join(designDir, 'product/product-overview.md'));
@@ -146,6 +148,10 @@ app.get('/api/status', async (req, res) => {
146
148
  exportPrompts: {
147
149
  oneShot: fs.existsSync(path.join(PROJECT_ROOT, 'product-plan/prompts/one-shot-prompt.md')),
148
150
  section: fs.existsSync(path.join(PROJECT_ROOT, 'product-plan/prompts/section-prompt.md'))
151
+ },
152
+ qa: {
153
+ audit: fs.existsSync(auditReport),
154
+ polish: fs.existsSync(polishReport)
149
155
  }
150
156
  },
151
157
  implementation: {
@@ -10,7 +10,7 @@
10
10
  "preview": "vite preview"
11
11
  },
12
12
  "dependencies": {
13
- "@builderos/agent-os-ui": "*",
13
+ "@theproductguy/agent-os-ui": "*",
14
14
  "@tailwindcss/typography": "^0.5.19",
15
15
  "axios": "^1.13.2",
16
16
  "clsx": "^2.1.1",
@@ -1,9 +1,9 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import axios from 'axios';
3
- import { Layout, Monitor, Layers, FileText, Code, CheckSquare, RefreshCw, ArrowRight, X, Plus, Trash2, WalletCards, LayoutDashboard, Copy, Package } from 'lucide-react';
3
+ import { Layout, Layers, FileText, Code, CheckSquare, RefreshCw, ArrowRight, X, Plus, Trash2, WalletCards, LayoutDashboard, Copy, Package } from 'lucide-react';
4
4
  import { useToast } from './components/ui/ToastContext';
5
- import { ThemeToggle } from '@builderos/agent-os-ui';
6
- import '@builderos/agent-os-ui/style.css';
5
+ import { ThemeToggle } from '@theproductguy/agent-os-ui';
6
+ import '@theproductguy/agent-os-ui/style.css';
7
7
  import ReactMarkdown from 'react-markdown';
8
8
  import remarkGfm from 'remark-gfm';
9
9
  import remarkBreaks from 'remark-breaks';
@@ -39,6 +39,10 @@ interface ProjectState {
39
39
  oneShot: boolean;
40
40
  section: boolean;
41
41
  };
42
+ qa?: {
43
+ audit: boolean;
44
+ polish: boolean;
45
+ };
42
46
  };
43
47
  implementation: {
44
48
  scaffolded: boolean;
@@ -265,7 +269,7 @@ function App() {
265
269
  fetch('/runtime-config.json')
266
270
  .then(res => res.json())
267
271
  .then(config => { setRuntimeConfig(config); })
268
- .catch(err => {
272
+ .catch(() => {
269
273
  setRuntimeConfig({
270
274
  api: 'http://localhost:5403',
271
275
  app: 'http://localhost:5402',
@@ -416,7 +420,7 @@ function App() {
416
420
  <textarea
417
421
  value={editContent}
418
422
  onChange={(e) => setEditContent(e.target.value)}
419
- className="w-full h-full min-h-[500px] p-4 font-mono text-sm bg-secondary/10 border border-border rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-primary/20"
423
+ className="w-full h-full min-h-[500px] p-4 font-mono text-sm bg-secondary text-secondary-foreground border border-border rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-primary/20"
420
424
  />
421
425
  ) : (
422
426
  <article className="prose dark:prose-invert max-w-none prose-headings:font-serif prose-headings:font-semibold prose-a:text-primary prose-code:text-primary prose-pre:bg-secondary/50 prose-pre:border prose-pre:border-border prose-p:leading-relaxed prose-p:mb-4">
@@ -443,7 +447,7 @@ function App() {
443
447
  <input
444
448
  autoFocus
445
449
  type="text"
446
- className="w-full px-3 py-2 rounded-md border border-input bg-background text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
450
+ className="w-full px-3 py-2 rounded-md border border-input bg-secondary text-secondary-foreground text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
447
451
  placeholder="e.g. user-profile"
448
452
  value={newSpecName}
449
453
  onChange={(e) => setNewSpecName(e.target.value)}
@@ -646,6 +650,17 @@ function App() {
646
650
  </div>
647
651
  </div>
648
652
 
653
+ <div className="grid grid-cols-2 gap-2">
654
+ <div className={`p-2 rounded-lg border text-center ${state?.design?.qa?.audit ? 'bg-emerald-50/50 border-emerald-200 text-emerald-700 dark:bg-emerald-900/20 dark:border-emerald-800 dark:text-emerald-300' : 'bg-secondary/20 border-border/50 text-muted-foreground'}`}>
655
+ <span className="text-xs font-medium block mb-1">Audit</span>
656
+ {state?.design?.qa?.audit ? <CheckSquare size={14} className="mx-auto" /> : <span className="block w-2 h-2 rounded-full bg-stone-300 mx-auto mt-1" />}
657
+ </div>
658
+ <div className={`p-2 rounded-lg border text-center ${state?.design?.qa?.polish ? 'bg-emerald-50/50 border-emerald-200 text-emerald-700 dark:bg-emerald-900/20 dark:border-emerald-800 dark:text-emerald-300' : 'bg-secondary/20 border-border/50 text-muted-foreground'}`}>
659
+ <span className="text-xs font-medium block mb-1">Polish</span>
660
+ {state?.design?.qa?.polish ? <CheckSquare size={14} className="mx-auto" /> : <span className="block w-2 h-2 rounded-full bg-stone-300 mx-auto mt-1" />}
661
+ </div>
662
+ </div>
663
+
649
664
  <div className="flex items-center justify-between p-3 bg-secondary/30 rounded-lg border border-border/50">
650
665
  <span className="text-foreground font-medium text-sm flex items-center gap-2"><ArrowRight size={16} className="text-muted-foreground" /> Export</span>
651
666
  {state?.design?.exported ? (
@@ -658,7 +673,7 @@ function App() {
658
673
  </div>
659
674
  </div>
660
675
 
661
- <div className="mt-6 flex gap-2">
676
+ <div className="mt-6 flex flex-col gap-2">
662
677
  {!state?.design?.initialized && (
663
678
  <PromptButton
664
679
  label="Sync Data"
@@ -667,6 +682,22 @@ function App() {
667
682
  primary
668
683
  />
669
684
  )}
685
+ {state?.design?.initialized && !state?.design?.exported && (
686
+ <div className="flex gap-2">
687
+ <PromptButton
688
+ label="Run Audit"
689
+ prompt="Antigravity, run an audit on the design system. Read 'design-system/.gemini/commands/impeccable/audit.md'."
690
+ onClick={copyToClipboard}
691
+ small
692
+ />
693
+ <PromptButton
694
+ label="Run Polish"
695
+ prompt="Antigravity, run a polish pass. Read 'design-system/.gemini/commands/impeccable/polish.md'."
696
+ onClick={copyToClipboard}
697
+ small
698
+ />
699
+ </div>
700
+ )}
670
701
  </div>
671
702
  </section>
672
703
 
@@ -691,14 +722,20 @@ function App() {
691
722
  </div>
692
723
 
693
724
  <div className="mt-6">
694
- <PromptButton
695
- label="Scaffold App"
696
- prompt="Antigravity, scaffold the implementation. Read 'agent-os/commands/scaffold-implementation/scaffold-implementation.md'."
697
- onClick={copyToClipboard}
698
- />
725
+ {!state?.implementation?.scaffolded ? (
726
+ <PromptButton
727
+ label="Scaffold App"
728
+ prompt="Antigravity, scaffold the implementation. Read 'agent-os/commands/scaffold-implementation/scaffold-implementation.md'."
729
+ onClick={copyToClipboard}
730
+ />
731
+ ) : (
732
+ <div className="p-3 bg-secondary/30 rounded-lg border border-border/50 text-sm text-muted-foreground text-center italic mb-4">
733
+ App scaffolded. Ready for implementation.
734
+ </div>
735
+ )}
699
736
 
700
737
  {state?.implementation?.scaffolded && state?.design?.exportPrompts?.oneShot && (
701
- <div className="mt-3 pt-3 border-t border-border/50">
738
+ <div className="pt-3 border-t border-border/50">
702
739
  <p className="text-xs text-muted-foreground mb-2 font-medium">Implementation Options:</p>
703
740
  <div className="space-y-2">
704
741
  <PromptButton
@@ -709,12 +746,17 @@ function App() {
709
746
  primary
710
747
  />
711
748
  {state?.design?.exportPrompts?.section && (
712
- <PromptButton
713
- label="Option B: Incremental (Section)"
714
- prompt={`Antigravity, implement a section. Read 'product-plan/prompts/section-prompt.md'.`}
715
- onClick={copyToClipboard}
716
- small
717
- />
749
+ <div className="relative">
750
+ <PromptButton
751
+ label="Option B: Incremental (Section)"
752
+ prompt={`Antigravity, implement a section. Read 'product-plan/prompts/section-prompt.md'.`}
753
+ onClick={copyToClipboard}
754
+ small
755
+ />
756
+ <p className="text-[10px] text-muted-foreground mt-1.5 text-center leading-tight">
757
+ Build feature-by-feature using the <strong>Feature Specs</strong> list &rarr;
758
+ </p>
759
+ </div>
718
760
  )}
719
761
  </div>
720
762
  </div>
@@ -776,39 +818,56 @@ function App() {
776
818
  </div>
777
819
  ))}
778
820
 
821
+ {/* Pending Roadmap Items */}
779
822
  {/* Pending Roadmap Items */}
780
823
  {state?.product?.roadmap?.items?.filter(item =>
781
824
  !item.completed &&
782
825
  !state?.product?.roadmap?.isBoilerplate &&
783
- !state?.specs?.some(s => s.name.toLowerCase() === item.name.toLowerCase().trim().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, ''))
826
+ !state?.specs?.some(s => s.name.toLowerCase().includes(item.name.toLowerCase().trim().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '')))
784
827
  ).map(item => (
785
828
  <div key={item.name} className="border border-dashed border-border/60 p-4 rounded-lg bg-secondary/5 hover:bg-secondary/10 transition-colors">
786
- <h3 className="font-medium text-base mb-2 flex items-center gap-2 text-muted-foreground">
787
- <div className="w-2 h-2 rounded-full bg-stone-300" />
788
- {item.name}
789
- </h3>
790
- <p className="text-xs text-muted-foreground mb-4 pl-4">Pending in Roadmap</p>
829
+ <div className="flex justify-between items-start mb-2">
830
+ <h3 className="font-medium text-base flex items-center gap-2 text-muted-foreground w-full">
831
+ <div className="w-2 h-2 rounded-full bg-stone-300 shrink-0" />
832
+ <span className="truncate" title={item.name}>{item.name}</span>
833
+ </h3>
834
+ <span className="text-[10px] uppercase tracking-wider font-semibold text-muted-foreground bg-secondary px-1.5 py-0.5 rounded shrink-0 ml-2">Planned</span>
835
+ </div>
836
+ <p className="text-xs text-muted-foreground mb-4 pl-4 opacity-70">
837
+ Defined in Product Roadmap. Ready to spec.
838
+ </p>
791
839
  <div className="pl-4">
792
840
  <button
793
841
  onClick={() => {
794
- setNewSpecName(item.name.toLowerCase().replace(/\s+/g, '-'));
842
+ setNewSpecName(item.name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, ''));
795
843
  setCreatingSpec(true);
796
844
  }}
797
- className="text-xs bg-background hover:bg-secondary border border-border px-3 py-1.5 rounded-md flex items-center gap-1.5 font-medium transition cursor-pointer"
845
+ className="text-xs bg-background hover:bg-secondary border border-border px-3 py-1.5 rounded-md flex items-center gap-1.5 font-medium transition cursor-pointer w-full justify-center group"
798
846
  >
799
- <Plus size={12} /> Shape Spec
847
+ <Plus size={12} className="group-hover:text-primary transition-colors" /> Shape Spec
800
848
  </button>
801
849
  </div>
802
850
  </div>
803
851
  ))}
804
852
 
805
- {state?.specs?.length === 0 && (!state?.product?.roadmap?.items || state?.product?.roadmap?.items?.length === 0) && (
806
- <div className="text-muted-foreground italic p-8 text-center text-sm border border-dashed border-border rounded-lg bg-secondary/10">
807
- No specs found yet.<br />Create one to start coding.
853
+ {/* Empty State */}
854
+ {(!state?.specs?.length && (!state?.product?.roadmap?.items?.length || state?.product?.roadmap?.isBoilerplate)) && (
855
+ <div className="border border-dashed border-border/60 p-8 rounded-lg text-center h-40 flex flex-col items-center justify-center">
856
+ <p className="text-muted-foreground text-sm mb-3">No specs found yet.</p>
857
+ <button
858
+ onClick={() => setCreatingSpec(true)}
859
+ className="text-sm px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors"
860
+ >
861
+ Create your first spec
862
+ </button>
808
863
  </div>
809
864
  )}
865
+
866
+
810
867
  </div>
811
868
  </section>
869
+
870
+
812
871
  </main>
813
872
  </div>
814
873
  </div>