@hexidecibel/companion 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/__tests__/task-parser.test.js +29 -29
  2. package/dist/__tests__/task-parser.test.js.map +1 -1
  3. package/dist/anthropic-usage.d.ts.map +1 -1
  4. package/dist/anthropic-usage.js +1 -1
  5. package/dist/anthropic-usage.js.map +1 -1
  6. package/dist/cert-generator.d.ts.map +1 -1
  7. package/dist/cert-generator.js +4 -21
  8. package/dist/cert-generator.js.map +1 -1
  9. package/dist/cli.d.ts +9 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +413 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +1 -7
  15. package/dist/config.js.map +1 -1
  16. package/dist/escalation.d.ts +51 -0
  17. package/dist/escalation.d.ts.map +1 -0
  18. package/dist/escalation.js +198 -0
  19. package/dist/escalation.js.map +1 -0
  20. package/dist/index.js +67 -30
  21. package/dist/index.js.map +1 -1
  22. package/dist/input-injector.d.ts.map +1 -1
  23. package/dist/input-injector.js +9 -5
  24. package/dist/input-injector.js.map +1 -1
  25. package/dist/notification-store.d.ts +35 -0
  26. package/dist/notification-store.d.ts.map +1 -0
  27. package/dist/notification-store.js +272 -0
  28. package/dist/notification-store.js.map +1 -0
  29. package/dist/parser.d.ts +15 -1
  30. package/dist/parser.d.ts.map +1 -1
  31. package/dist/parser.js +106 -61
  32. package/dist/parser.js.map +1 -1
  33. package/dist/push.d.ts +18 -26
  34. package/dist/push.d.ts.map +1 -1
  35. package/dist/push.js +90 -184
  36. package/dist/push.js.map +1 -1
  37. package/dist/qr-server.d.ts.map +1 -1
  38. package/dist/qr-server.js +159 -139
  39. package/dist/qr-server.js.map +1 -1
  40. package/dist/rules-engine.d.ts +20 -0
  41. package/dist/rules-engine.d.ts.map +1 -0
  42. package/dist/rules-engine.js +71 -0
  43. package/dist/rules-engine.js.map +1 -0
  44. package/dist/scaffold/claude-commands.d.ts +18 -0
  45. package/dist/scaffold/claude-commands.d.ts.map +1 -0
  46. package/dist/scaffold/claude-commands.js +352 -0
  47. package/dist/scaffold/claude-commands.js.map +1 -0
  48. package/dist/scaffold/generator.d.ts.map +1 -1
  49. package/dist/scaffold/generator.js +26 -1
  50. package/dist/scaffold/generator.js.map +1 -1
  51. package/dist/scaffold/scorer.d.ts +19 -0
  52. package/dist/scaffold/scorer.d.ts.map +1 -0
  53. package/dist/scaffold/scorer.js +92 -0
  54. package/dist/scaffold/scorer.js.map +1 -0
  55. package/dist/scaffold/templates/go-cli.d.ts +3 -0
  56. package/dist/scaffold/templates/go-cli.d.ts.map +1 -0
  57. package/dist/scaffold/templates/go-cli.js +249 -0
  58. package/dist/scaffold/templates/go-cli.js.map +1 -0
  59. package/dist/scaffold/templates/index.d.ts.map +1 -1
  60. package/dist/scaffold/templates/index.js +8 -2
  61. package/dist/scaffold/templates/index.js.map +1 -1
  62. package/dist/scaffold/templates/nextjs.d.ts +3 -0
  63. package/dist/scaffold/templates/nextjs.d.ts.map +1 -0
  64. package/dist/scaffold/templates/nextjs.js +336 -0
  65. package/dist/scaffold/templates/nextjs.js.map +1 -0
  66. package/dist/scaffold/templates/node-express.d.ts.map +1 -1
  67. package/dist/scaffold/templates/node-express.js +170 -157
  68. package/dist/scaffold/templates/node-express.js.map +1 -1
  69. package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -1
  70. package/dist/scaffold/templates/python-fastapi.js +234 -221
  71. package/dist/scaffold/templates/python-fastapi.js.map +1 -1
  72. package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -1
  73. package/dist/scaffold/templates/react-mui-website.js +337 -324
  74. package/dist/scaffold/templates/react-mui-website.js.map +1 -1
  75. package/dist/scaffold/templates/react-typescript.d.ts.map +1 -1
  76. package/dist/scaffold/templates/react-typescript.js +219 -206
  77. package/dist/scaffold/templates/react-typescript.js.map +1 -1
  78. package/dist/scaffold/templates/typescript-library.d.ts +3 -0
  79. package/dist/scaffold/templates/typescript-library.d.ts.map +1 -0
  80. package/dist/scaffold/templates/typescript-library.js +241 -0
  81. package/dist/scaffold/templates/typescript-library.js.map +1 -0
  82. package/dist/scaffold/types.d.ts +7 -0
  83. package/dist/scaffold/types.d.ts.map +1 -1
  84. package/dist/subagent-watcher.d.ts.map +1 -1
  85. package/dist/subagent-watcher.js +3 -3
  86. package/dist/subagent-watcher.js.map +1 -1
  87. package/dist/tmux-manager.d.ts +37 -0
  88. package/dist/tmux-manager.d.ts.map +1 -1
  89. package/dist/tmux-manager.js +165 -5
  90. package/dist/tmux-manager.js.map +1 -1
  91. package/dist/tool-config.d.ts.map +1 -1
  92. package/dist/tool-config.js +2 -2
  93. package/dist/tool-config.js.map +1 -1
  94. package/dist/types.d.ts +85 -0
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +18 -0
  97. package/dist/types.js.map +1 -1
  98. package/dist/watcher.d.ts +7 -0
  99. package/dist/watcher.d.ts.map +1 -1
  100. package/dist/watcher.js +118 -9
  101. package/dist/watcher.js.map +1 -1
  102. package/dist/websocket.d.ts +16 -2
  103. package/dist/websocket.d.ts.map +1 -1
  104. package/dist/websocket.js +758 -117
  105. package/dist/websocket.js.map +1 -1
  106. package/dist/work-group-manager.d.ts +69 -0
  107. package/dist/work-group-manager.d.ts.map +1 -0
  108. package/dist/work-group-manager.js +610 -0
  109. package/dist/work-group-manager.js.map +1 -0
  110. package/package.json +1 -1
@@ -8,300 +8,313 @@ exports.reactMuiWebsiteTemplate = {
8
8
  type: 'frontend',
9
9
  icon: '🎨',
10
10
  tags: ['react', 'typescript', 'mui', 'material-ui', 'website', 'frontend'],
11
+ scoring: {
12
+ primaryKeywords: ['mui', 'material', 'website', 'landing', 'portfolio'],
13
+ secondaryKeywords: ['react', 'pages', 'routing', 'navigation', 'design', 'theme', 'multi-page'],
14
+ useCases: [
15
+ 'marketing website',
16
+ 'landing page',
17
+ 'portfolio site',
18
+ 'multi-page website',
19
+ 'material ui website',
20
+ 'company website',
21
+ ],
22
+ typeSignals: { website: 3, landing: 3, portfolio: 3, brochure: 2, marketing: 2 },
23
+ },
11
24
  files: [
12
25
  {
13
26
  path: 'package.json',
14
- template: `{
15
- "name": "{{projectName}}",
16
- "version": "0.1.0",
17
- "private": true,
18
- "dependencies": {
19
- "@emotion/react": "^11.13.0",
20
- "@emotion/styled": "^11.13.0",
21
- "@mui/icons-material": "^6.1.0",
22
- "@mui/material": "^6.1.0",
23
- "react": "^18.3.1",
24
- "react-dom": "^18.3.1",
25
- "react-router-dom": "^6.28.0"
26
- },
27
- "devDependencies": {
28
- "@types/react": "^18.3.12",
29
- "@types/react-dom": "^18.3.1",
30
- "@vitejs/plugin-react": "^4.3.3",
31
- "typescript": "~5.6.2",
32
- "vite": "^5.4.10"
33
- },
34
- "scripts": {
35
- "dev": "vite",
36
- "build": "tsc -b && vite build",
37
- "preview": "vite preview"
38
- }
27
+ template: `{
28
+ "name": "{{projectName}}",
29
+ "version": "0.1.0",
30
+ "private": true,
31
+ "dependencies": {
32
+ "@emotion/react": "^11.13.0",
33
+ "@emotion/styled": "^11.13.0",
34
+ "@mui/icons-material": "^6.1.0",
35
+ "@mui/material": "^6.1.0",
36
+ "react": "^18.3.1",
37
+ "react-dom": "^18.3.1",
38
+ "react-router-dom": "^6.28.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/react": "^18.3.12",
42
+ "@types/react-dom": "^18.3.1",
43
+ "@vitejs/plugin-react": "^4.3.3",
44
+ "typescript": "~5.6.2",
45
+ "vite": "^5.4.10"
46
+ },
47
+ "scripts": {
48
+ "dev": "vite",
49
+ "build": "tsc -b && vite build",
50
+ "preview": "vite preview"
51
+ }
39
52
  }`,
40
53
  },
41
54
  {
42
55
  path: 'tsconfig.json',
43
- template: `{
44
- "compilerOptions": {
45
- "target": "ES2020",
46
- "useDefineForClassFields": true,
47
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
48
- "module": "ESNext",
49
- "skipLibCheck": true,
50
- "moduleResolution": "bundler",
51
- "allowImportingTsExtensions": true,
52
- "isolatedModules": true,
53
- "moduleDetection": "force",
54
- "noEmit": true,
55
- "jsx": "react-jsx",
56
- "strict": true,
57
- "noUnusedLocals": true,
58
- "noUnusedParameters": true,
59
- "noFallthroughCasesInSwitch": true
60
- },
61
- "include": ["src"]
56
+ template: `{
57
+ "compilerOptions": {
58
+ "target": "ES2020",
59
+ "useDefineForClassFields": true,
60
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
61
+ "module": "ESNext",
62
+ "skipLibCheck": true,
63
+ "moduleResolution": "bundler",
64
+ "allowImportingTsExtensions": true,
65
+ "isolatedModules": true,
66
+ "moduleDetection": "force",
67
+ "noEmit": true,
68
+ "jsx": "react-jsx",
69
+ "strict": true,
70
+ "noUnusedLocals": true,
71
+ "noUnusedParameters": true,
72
+ "noFallthroughCasesInSwitch": true
73
+ },
74
+ "include": ["src"]
62
75
  }`,
63
76
  },
64
77
  {
65
78
  path: 'vite.config.ts',
66
- template: `import { defineConfig } from 'vite'
67
- import react from '@vitejs/plugin-react'
68
-
69
- export default defineConfig({
70
- plugins: [react()],
79
+ template: `import { defineConfig } from 'vite'
80
+ import react from '@vitejs/plugin-react'
81
+
82
+ export default defineConfig({
83
+ plugins: [react()],
71
84
  })`,
72
85
  },
73
86
  {
74
87
  path: 'index.html',
75
- template: `<!doctype html>
76
- <html lang="en">
77
- <head>
78
- <meta charset="UTF-8" />
79
- <link rel="icon" href="/favicon.ico" />
80
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
81
- <title>{{projectName}}</title>
82
- </head>
83
- <body>
84
- <div id="root"></div>
85
- <script type="module" src="/src/main.tsx"></script>
86
- </body>
88
+ template: `<!doctype html>
89
+ <html lang="en">
90
+ <head>
91
+ <meta charset="UTF-8" />
92
+ <link rel="icon" href="/favicon.ico" />
93
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
94
+ <title>{{projectName}}</title>
95
+ </head>
96
+ <body>
97
+ <div id="root"></div>
98
+ <script type="module" src="/src/main.tsx"></script>
99
+ </body>
87
100
  </html>`,
88
101
  },
89
102
  {
90
103
  path: 'src/main.tsx',
91
- template: `import { StrictMode } from 'react'
92
- import { createRoot } from 'react-dom/client'
93
- import { BrowserRouter } from 'react-router-dom'
94
- import { ThemeProvider, CssBaseline } from '@mui/material'
95
- import { theme } from './theme'
96
- import App from './App'
97
-
98
- createRoot(document.getElementById('root')!).render(
99
- <StrictMode>
100
- <BrowserRouter>
101
- <ThemeProvider theme={theme}>
102
- <CssBaseline />
103
- <App />
104
- </ThemeProvider>
105
- </BrowserRouter>
106
- </StrictMode>,
104
+ template: `import { StrictMode } from 'react'
105
+ import { createRoot } from 'react-dom/client'
106
+ import { BrowserRouter } from 'react-router-dom'
107
+ import { ThemeProvider, CssBaseline } from '@mui/material'
108
+ import { theme } from './theme'
109
+ import App from './App'
110
+
111
+ createRoot(document.getElementById('root')!).render(
112
+ <StrictMode>
113
+ <BrowserRouter>
114
+ <ThemeProvider theme={theme}>
115
+ <CssBaseline />
116
+ <App />
117
+ </ThemeProvider>
118
+ </BrowserRouter>
119
+ </StrictMode>,
107
120
  )`,
108
121
  },
109
122
  {
110
123
  path: 'src/theme.ts',
111
- template: `import { createTheme } from '@mui/material/styles'
112
-
113
- export const theme = createTheme({
114
- palette: {
115
- mode: 'dark',
116
- primary: {
117
- main: '#90caf9',
118
- },
119
- secondary: {
120
- main: '#f48fb1',
121
- },
122
- background: {
123
- default: '#121212',
124
- paper: '#1e1e1e',
125
- },
126
- },
127
- typography: {
128
- fontFamily: '"Inter", "Roboto", "Helvetica", "Arial", sans-serif',
129
- h1: {
130
- fontSize: '2.5rem',
131
- fontWeight: 700,
132
- },
133
- h2: {
134
- fontSize: '2rem',
135
- fontWeight: 600,
136
- },
137
- },
124
+ template: `import { createTheme } from '@mui/material/styles'
125
+
126
+ export const theme = createTheme({
127
+ palette: {
128
+ mode: 'dark',
129
+ primary: {
130
+ main: '#90caf9',
131
+ },
132
+ secondary: {
133
+ main: '#f48fb1',
134
+ },
135
+ background: {
136
+ default: '#121212',
137
+ paper: '#1e1e1e',
138
+ },
139
+ },
140
+ typography: {
141
+ fontFamily: '"Inter", "Roboto", "Helvetica", "Arial", sans-serif',
142
+ h1: {
143
+ fontSize: '2.5rem',
144
+ fontWeight: 700,
145
+ },
146
+ h2: {
147
+ fontSize: '2rem',
148
+ fontWeight: 600,
149
+ },
150
+ },
138
151
  })`,
139
152
  },
140
153
  {
141
154
  path: 'src/App.tsx',
142
- template: `import { Routes, Route } from 'react-router-dom'
143
- import { Box } from '@mui/material'
144
- import { Navbar } from './components/Navbar'
145
- import { Home } from './pages/Home'
146
- import { About } from './pages/About'
147
- import { Contact } from './pages/Contact'
148
-
149
- function App() {
150
- return (
151
- <Box sx={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
152
- <Navbar />
153
- <Box component="main" sx={{ flex: 1, py: 4 }}>
154
- <Routes>
155
- <Route path="/" element={<Home />} />
156
- <Route path="/about" element={<About />} />
157
- <Route path="/contact" element={<Contact />} />
158
- </Routes>
159
- </Box>
160
- </Box>
161
- )
162
- }
163
-
155
+ template: `import { Routes, Route } from 'react-router-dom'
156
+ import { Box } from '@mui/material'
157
+ import { Navbar } from './components/Navbar'
158
+ import { Home } from './pages/Home'
159
+ import { About } from './pages/About'
160
+ import { Contact } from './pages/Contact'
161
+
162
+ function App() {
163
+ return (
164
+ <Box sx={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
165
+ <Navbar />
166
+ <Box component="main" sx={{ flex: 1, py: 4 }}>
167
+ <Routes>
168
+ <Route path="/" element={<Home />} />
169
+ <Route path="/about" element={<About />} />
170
+ <Route path="/contact" element={<Contact />} />
171
+ </Routes>
172
+ </Box>
173
+ </Box>
174
+ )
175
+ }
176
+
164
177
  export default App`,
165
178
  },
166
179
  {
167
180
  path: 'src/components/Navbar.tsx',
168
- template: `import { AppBar, Toolbar, Typography, Button, Container, Box } from '@mui/material'
169
- import { Link as RouterLink } from 'react-router-dom'
170
-
171
- export function Navbar() {
172
- return (
173
- <AppBar position="static" color="transparent" elevation={0}>
174
- <Container maxWidth="lg">
175
- <Toolbar disableGutters>
176
- <Typography
177
- variant="h6"
178
- component={RouterLink}
179
- to="/"
180
- sx={{ textDecoration: 'none', color: 'inherit', flexGrow: 1 }}
181
- >
182
- {{projectName}}
183
- </Typography>
184
- <Box sx={{ display: 'flex', gap: 2 }}>
185
- <Button component={RouterLink} to="/" color="inherit">
186
- Home
187
- </Button>
188
- <Button component={RouterLink} to="/about" color="inherit">
189
- About
190
- </Button>
191
- <Button component={RouterLink} to="/contact" color="inherit">
192
- Contact
193
- </Button>
194
- </Box>
195
- </Toolbar>
196
- </Container>
197
- </AppBar>
198
- )
181
+ template: `import { AppBar, Toolbar, Typography, Button, Container, Box } from '@mui/material'
182
+ import { Link as RouterLink } from 'react-router-dom'
183
+
184
+ export function Navbar() {
185
+ return (
186
+ <AppBar position="static" color="transparent" elevation={0}>
187
+ <Container maxWidth="lg">
188
+ <Toolbar disableGutters>
189
+ <Typography
190
+ variant="h6"
191
+ component={RouterLink}
192
+ to="/"
193
+ sx={{ textDecoration: 'none', color: 'inherit', flexGrow: 1 }}
194
+ >
195
+ {{projectName}}
196
+ </Typography>
197
+ <Box sx={{ display: 'flex', gap: 2 }}>
198
+ <Button component={RouterLink} to="/" color="inherit">
199
+ Home
200
+ </Button>
201
+ <Button component={RouterLink} to="/about" color="inherit">
202
+ About
203
+ </Button>
204
+ <Button component={RouterLink} to="/contact" color="inherit">
205
+ Contact
206
+ </Button>
207
+ </Box>
208
+ </Toolbar>
209
+ </Container>
210
+ </AppBar>
211
+ )
199
212
  }`,
200
213
  },
201
214
  {
202
215
  path: 'src/pages/Home.tsx',
203
- template: `import { Container, Typography, Box, Button } from '@mui/material'
204
- import { Link as RouterLink } from 'react-router-dom'
205
-
206
- export function Home() {
207
- return (
208
- <Container maxWidth="lg">
209
- <Box sx={{ textAlign: 'center', py: 8 }}>
210
- <Typography variant="h1" gutterBottom>
211
- Welcome to {{projectName}}
212
- </Typography>
213
- <Typography variant="h5" color="text.secondary" paragraph>
214
- {{projectDescription}}
215
- </Typography>
216
- <Box sx={{ mt: 4 }}>
217
- <Button
218
- variant="contained"
219
- size="large"
220
- component={RouterLink}
221
- to="/about"
222
- >
223
- Learn More
224
- </Button>
225
- </Box>
226
- </Box>
227
- </Container>
228
- )
216
+ template: `import { Container, Typography, Box, Button } from '@mui/material'
217
+ import { Link as RouterLink } from 'react-router-dom'
218
+
219
+ export function Home() {
220
+ return (
221
+ <Container maxWidth="lg">
222
+ <Box sx={{ textAlign: 'center', py: 8 }}>
223
+ <Typography variant="h1" gutterBottom>
224
+ Welcome to {{projectName}}
225
+ </Typography>
226
+ <Typography variant="h5" color="text.secondary" paragraph>
227
+ {{projectDescription}}
228
+ </Typography>
229
+ <Box sx={{ mt: 4 }}>
230
+ <Button
231
+ variant="contained"
232
+ size="large"
233
+ component={RouterLink}
234
+ to="/about"
235
+ >
236
+ Learn More
237
+ </Button>
238
+ </Box>
239
+ </Box>
240
+ </Container>
241
+ )
229
242
  }`,
230
243
  },
231
244
  {
232
245
  path: 'src/pages/About.tsx',
233
- template: `import { Container, Typography, Box, Paper } from '@mui/material'
234
-
235
- export function About() {
236
- return (
237
- <Container maxWidth="md">
238
- <Paper sx={{ p: 4 }}>
239
- <Typography variant="h2" gutterBottom>
240
- About
241
- </Typography>
242
- <Typography variant="body1" paragraph>
243
- This is the about page for {{projectName}}.
244
- </Typography>
245
- <Typography variant="body1" paragraph>
246
- {{projectDescription}}
247
- </Typography>
248
- </Paper>
249
- </Container>
250
- )
246
+ template: `import { Container, Typography, Box, Paper } from '@mui/material'
247
+
248
+ export function About() {
249
+ return (
250
+ <Container maxWidth="md">
251
+ <Paper sx={{ p: 4 }}>
252
+ <Typography variant="h2" gutterBottom>
253
+ About
254
+ </Typography>
255
+ <Typography variant="body1" paragraph>
256
+ This is the about page for {{projectName}}.
257
+ </Typography>
258
+ <Typography variant="body1" paragraph>
259
+ {{projectDescription}}
260
+ </Typography>
261
+ </Paper>
262
+ </Container>
263
+ )
251
264
  }`,
252
265
  },
253
266
  {
254
267
  path: 'src/pages/Contact.tsx',
255
- template: `import { Container, Typography, Box, Paper, TextField, Button } from '@mui/material'
256
- import { useState } from 'react'
257
-
258
- export function Contact() {
259
- const [formData, setFormData] = useState({ name: '', email: '', message: '' })
260
-
261
- const handleSubmit = (e: React.FormEvent) => {
262
- e.preventDefault()
263
- console.log('Form submitted:', formData)
264
- // Add your form submission logic here
265
- }
266
-
267
- return (
268
- <Container maxWidth="sm">
269
- <Paper sx={{ p: 4 }}>
270
- <Typography variant="h2" gutterBottom>
271
- Contact Us
272
- </Typography>
273
- <Box component="form" onSubmit={handleSubmit} sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
274
- <TextField
275
- label="Name"
276
- value={formData.name}
277
- onChange={(e) => setFormData({ ...formData, name: e.target.value })}
278
- required
279
- fullWidth
280
- />
281
- <TextField
282
- label="Email"
283
- type="email"
284
- value={formData.email}
285
- onChange={(e) => setFormData({ ...formData, email: e.target.value })}
286
- required
287
- fullWidth
288
- />
289
- <TextField
290
- label="Message"
291
- multiline
292
- rows={4}
293
- value={formData.message}
294
- onChange={(e) => setFormData({ ...formData, message: e.target.value })}
295
- required
296
- fullWidth
297
- />
298
- <Button type="submit" variant="contained" size="large">
299
- Send Message
300
- </Button>
301
- </Box>
302
- </Paper>
303
- </Container>
304
- )
268
+ template: `import { Container, Typography, Box, Paper, TextField, Button } from '@mui/material'
269
+ import { useState } from 'react'
270
+
271
+ export function Contact() {
272
+ const [formData, setFormData] = useState({ name: '', email: '', message: '' })
273
+
274
+ const handleSubmit = (e: React.FormEvent) => {
275
+ e.preventDefault()
276
+ console.log('Form submitted:', formData)
277
+ // Add your form submission logic here
278
+ }
279
+
280
+ return (
281
+ <Container maxWidth="sm">
282
+ <Paper sx={{ p: 4 }}>
283
+ <Typography variant="h2" gutterBottom>
284
+ Contact Us
285
+ </Typography>
286
+ <Box component="form" onSubmit={handleSubmit} sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
287
+ <TextField
288
+ label="Name"
289
+ value={formData.name}
290
+ onChange={(e) => setFormData({ ...formData, name: e.target.value })}
291
+ required
292
+ fullWidth
293
+ />
294
+ <TextField
295
+ label="Email"
296
+ type="email"
297
+ value={formData.email}
298
+ onChange={(e) => setFormData({ ...formData, email: e.target.value })}
299
+ required
300
+ fullWidth
301
+ />
302
+ <TextField
303
+ label="Message"
304
+ multiline
305
+ rows={4}
306
+ value={formData.message}
307
+ onChange={(e) => setFormData({ ...formData, message: e.target.value })}
308
+ required
309
+ fullWidth
310
+ />
311
+ <Button type="submit" variant="contained" size="large">
312
+ Send Message
313
+ </Button>
314
+ </Box>
315
+ </Paper>
316
+ </Container>
317
+ )
305
318
  }`,
306
319
  },
307
320
  {
@@ -310,87 +323,87 @@ export function Contact() {
310
323
  },
311
324
  {
312
325
  path: '.gitignore',
313
- template: `# Dependencies
314
- node_modules
315
-
316
- # Build
317
- dist
318
- dist-ssr
319
- *.local
320
-
321
- # Editor
322
- .vscode/*
323
- !.vscode/extensions.json
324
- .idea
325
-
326
- # Logs
327
- *.log
328
- npm-debug.log*
329
-
330
- # OS
326
+ template: `# Dependencies
327
+ node_modules
328
+
329
+ # Build
330
+ dist
331
+ dist-ssr
332
+ *.local
333
+
334
+ # Editor
335
+ .vscode/*
336
+ !.vscode/extensions.json
337
+ .idea
338
+
339
+ # Logs
340
+ *.log
341
+ npm-debug.log*
342
+
343
+ # OS
331
344
  .DS_Store`,
332
345
  },
333
346
  {
334
347
  path: 'CLAUDE.md',
335
- template: `# {{projectName}}
336
-
337
- {{projectDescription}}
338
-
339
- ## Tech Stack
340
- - React 18 with TypeScript
341
- - Material UI (MUI) v6 for components
342
- - React Router v6 for navigation
343
- - Vite for build tooling
344
-
345
- ## Project Structure
346
- \`\`\`
347
- src/
348
- ├── main.tsx # Entry point
349
- ├── App.tsx # Root component with routing
350
- ├── theme.ts # MUI theme customization
351
- ├── components/ # Reusable components
352
- │ └── Navbar.tsx
353
- └── pages/ # Page components
354
- ├── Home.tsx
355
- ├── About.tsx
356
- └── Contact.tsx
357
- \`\`\`
358
-
359
- ## Commands
360
- - \`npm run dev\` - Start dev server
361
- - \`npm run build\` - Build for production
362
- - \`npm run preview\` - Preview production build
363
-
364
- ## Development Notes
365
- - Add new pages in \`src/pages/\`
366
- - Add reusable components in \`src/components/\`
367
- - Customize theme in \`src/theme.ts\`
348
+ template: `# {{projectName}}
349
+
350
+ {{projectDescription}}
351
+
352
+ ## Tech Stack
353
+ - React 18 with TypeScript
354
+ - Material UI (MUI) v6 for components
355
+ - React Router v6 for navigation
356
+ - Vite for build tooling
357
+
358
+ ## Project Structure
359
+ \`\`\`
360
+ src/
361
+ ├── main.tsx # Entry point
362
+ ├── App.tsx # Root component with routing
363
+ ├── theme.ts # MUI theme customization
364
+ ├── components/ # Reusable components
365
+ │ └── Navbar.tsx
366
+ └── pages/ # Page components
367
+ ├── Home.tsx
368
+ ├── About.tsx
369
+ └── Contact.tsx
370
+ \`\`\`
371
+
372
+ ## Commands
373
+ - \`npm run dev\` - Start dev server
374
+ - \`npm run build\` - Build for production
375
+ - \`npm run preview\` - Preview production build
376
+
377
+ ## Development Notes
378
+ - Add new pages in \`src/pages/\`
379
+ - Add reusable components in \`src/components/\`
380
+ - Customize theme in \`src/theme.ts\`
368
381
  - Add routes in \`App.tsx\``,
369
382
  },
370
383
  {
371
384
  path: 'README.md',
372
- template: `# {{projectName}}
373
-
374
- {{projectDescription}}
375
-
376
- ## Getting Started
377
-
378
- \`\`\`bash
379
- npm install
380
- npm run dev
381
- \`\`\`
382
-
383
- ## Pages
384
-
385
- - **Home** - Landing page
386
- - **About** - About page
387
- - **Contact** - Contact form
388
-
389
- ## Tech Stack
390
-
391
- - React + TypeScript
392
- - Material UI
393
- - React Router
385
+ template: `# {{projectName}}
386
+
387
+ {{projectDescription}}
388
+
389
+ ## Getting Started
390
+
391
+ \`\`\`bash
392
+ npm install
393
+ npm run dev
394
+ \`\`\`
395
+
396
+ ## Pages
397
+
398
+ - **Home** - Landing page
399
+ - **About** - About page
400
+ - **Contact** - Contact form
401
+
402
+ ## Tech Stack
403
+
404
+ - React + TypeScript
405
+ - Material UI
406
+ - React Router
394
407
  - Vite`,
395
408
  },
396
409
  ],