create-agentic-app 1.1.56 → 1.1.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/template/.agents/skills/security-scanner/SKILL.md +157 -0
- package/template/.agents/skills/security-scanner/references/A01-broken-access-control.md +136 -0
- package/template/.agents/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
- package/template/.agents/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
- package/template/.agents/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
- package/template/.agents/skills/security-scanner/references/A05-injection.md +155 -0
- package/template/.agents/skills/security-scanner/references/A06-insecure-design.md +145 -0
- package/template/.agents/skills/security-scanner/references/A07-authentication-failures.md +150 -0
- package/template/.agents/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
- package/template/.agents/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
- package/template/.agents/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
- package/template/.agents/skills/security-scanner/references/report-template.md +148 -0
- package/template/.claude/agents/security-scanner.md +214 -0
- package/template/.claude/skills/security-scanner/SKILL.md +157 -0
- package/template/.claude/skills/security-scanner/references/A01-broken-access-control.md +136 -0
- package/template/.claude/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
- package/template/.claude/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
- package/template/.claude/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
- package/template/.claude/skills/security-scanner/references/A05-injection.md +155 -0
- package/template/.claude/skills/security-scanner/references/A06-insecure-design.md +145 -0
- package/template/.claude/skills/security-scanner/references/A07-authentication-failures.md +150 -0
- package/template/.claude/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
- package/template/.claude/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
- package/template/.claude/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
- package/template/.claude/skills/security-scanner/references/report-template.md +148 -0
- package/template/AGENTS.md +21 -77
- package/template/DESIGN.md +451 -0
- package/template/next-env.d.ts +1 -1
- package/template/specs/ui-polish-responsive/README.md +59 -0
- package/template/specs/ui-polish-responsive/action-required.md +3 -0
- package/template/specs/ui-polish-responsive/requirements.md +53 -0
- package/template/specs/ui-polish-responsive/tasks/task-01-globals-css.md +144 -0
- package/template/specs/ui-polish-responsive/tasks/task-02-layout.md +66 -0
- package/template/specs/ui-polish-responsive/tasks/task-03-site-header.md +79 -0
- package/template/specs/ui-polish-responsive/tasks/task-04-site-footer.md +63 -0
- package/template/specs/ui-polish-responsive/tasks/task-05-home-page.md +215 -0
- package/template/specs/ui-polish-responsive/tasks/task-06-dashboard.md +222 -0
- package/template/specs/ui-polish-responsive/tasks/task-07-chat-page.md +225 -0
- package/template/specs/ui-polish-responsive/tasks/task-08-profile-page.md +192 -0
- package/template/specs/ui-polish-responsive/tasks/task-09-auth-pages.md +97 -0
- package/template/specs/ui-polish-responsive/tasks/task-10-setup-checklist.md +120 -0
- package/template/specs/ui-polish-responsive/tasks/task-11-starter-prompt-modal.md +87 -0
- package/template/src/app/globals.css +65 -7
- package/template/src/app/layout.tsx +2 -2
- package/template/src/app/page.tsx +174 -174
- package/template/src/components/setup-checklist.tsx +162 -162
- package/template/src/components/site-footer.tsx +2 -2
- package/template/src/components/site-header.tsx +3 -3
- package/template/src/components/starter-prompt-modal.tsx +202 -202
|
@@ -1,202 +1,202 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { Copy, Check } from "lucide-react";
|
|
5
|
-
import { Button } from "@/components/ui/button";
|
|
6
|
-
import {
|
|
7
|
-
Dialog,
|
|
8
|
-
DialogContent,
|
|
9
|
-
DialogDescription,
|
|
10
|
-
DialogHeader,
|
|
11
|
-
DialogTitle,
|
|
12
|
-
DialogTrigger,
|
|
13
|
-
} from "@/components/ui/dialog";
|
|
14
|
-
|
|
15
|
-
const STARTER_PROMPT = `I'm working with an agentic coding boilerplate project that includes authentication, database integration, and AI capabilities. Here's what's already set up:
|
|
16
|
-
|
|
17
|
-
## Current Agentic Coding Boilerplate Structure
|
|
18
|
-
- **Authentication**: Better Auth with Google OAuth integration
|
|
19
|
-
- **Database**: Drizzle ORM with PostgreSQL setup
|
|
20
|
-
- **AI Integration**: Vercel AI SDK with OpenAI integration
|
|
21
|
-
- **UI**: shadcn/ui components with Tailwind CSS
|
|
22
|
-
- **Current Routes**:
|
|
23
|
-
- \`/\` - Home page with setup instructions and feature overview
|
|
24
|
-
- \`/dashboard\` - Protected dashboard page (requires authentication)
|
|
25
|
-
- \`/chat\` - AI chat interface (requires OpenAI API key)
|
|
26
|
-
|
|
27
|
-
## Important Context
|
|
28
|
-
This is an **agentic coding boilerplate/starter template** - all existing pages and components are meant to be examples and should be **completely replaced** to build the actual AI-powered application.
|
|
29
|
-
|
|
30
|
-
### CRITICAL: You MUST Override All Boilerplate Content
|
|
31
|
-
**DO NOT keep any boilerplate components, text, or UI elements unless explicitly requested.** This includes:
|
|
32
|
-
|
|
33
|
-
- **Remove all placeholder/demo content** (setup checklists, welcome messages, boilerplate text)
|
|
34
|
-
- **Replace the entire navigation structure** - don't keep the existing site header or nav items
|
|
35
|
-
- **Override all page content completely** - don't append to existing pages, replace them entirely
|
|
36
|
-
- **Remove or replace all example components** (setup-checklist, starter-prompt-modal, etc.)
|
|
37
|
-
- **Replace placeholder routes and pages** with the actual application functionality
|
|
38
|
-
|
|
39
|
-
### Required Actions:
|
|
40
|
-
1. **Start Fresh**: Treat existing components as temporary scaffolding to be removed
|
|
41
|
-
2. **Complete Replacement**: Build the new application from scratch using the existing tech stack
|
|
42
|
-
3. **No Hybrid Approach**: Don't try to integrate new features alongside existing boilerplate content
|
|
43
|
-
4. **Clean Slate**: The final application should have NO trace of the original boilerplate UI or content
|
|
44
|
-
|
|
45
|
-
The only things to preserve are:
|
|
46
|
-
- **All installed libraries and dependencies** (DO NOT uninstall or remove any packages from package.json)
|
|
47
|
-
- **Authentication system** (but customize the UI/flow as needed)
|
|
48
|
-
- **Database setup and schema** (but modify schema as needed for your use case)
|
|
49
|
-
- **Core configuration files** (next.config.ts, tsconfig.json, tailwind.config.ts, etc.)
|
|
50
|
-
- **Build and development scripts** (keep all npm/pnpm scripts in package.json)
|
|
51
|
-
|
|
52
|
-
## Tech Stack
|
|
53
|
-
- Next.js 16 with App Router
|
|
54
|
-
- TypeScript
|
|
55
|
-
- Tailwind CSS
|
|
56
|
-
- Better Auth for authentication
|
|
57
|
-
- Drizzle ORM + PostgreSQL
|
|
58
|
-
- Vercel AI SDK
|
|
59
|
-
- shadcn/ui components
|
|
60
|
-
- Lucide React icons
|
|
61
|
-
|
|
62
|
-
## AI Model Configuration
|
|
63
|
-
**IMPORTANT**: When implementing any AI functionality, always use the \`OPENAI_MODEL\` environment variable for the model name instead of hardcoding it:
|
|
64
|
-
|
|
65
|
-
\`\`\`typescript
|
|
66
|
-
// ✓ Correct - Use environment variable
|
|
67
|
-
const model = process.env.OPENAI_MODEL || "gpt-5-mini";
|
|
68
|
-
model: openai(model)
|
|
69
|
-
|
|
70
|
-
// ✗ Incorrect - Don't hardcode model names
|
|
71
|
-
model: openai("gpt-5-mini")
|
|
72
|
-
\`\`\`
|
|
73
|
-
|
|
74
|
-
This allows for easy model switching without code changes and ensures consistency across the application.
|
|
75
|
-
|
|
76
|
-
## Component Development Guidelines
|
|
77
|
-
**Always prioritize shadcn/ui components** when building the application:
|
|
78
|
-
|
|
79
|
-
1. **First Choice**: Use existing shadcn/ui components from the project
|
|
80
|
-
2. **Second Choice**: Install additional shadcn/ui components using \`pnpm dlx shadcn@latest add <component-name>\`
|
|
81
|
-
3. **Last Resort**: Only create custom components or use other libraries if shadcn/ui doesn't provide a suitable option
|
|
82
|
-
|
|
83
|
-
The project already includes several shadcn/ui components (button, dialog, avatar, etc.) and follows their design system. Always check the [shadcn/ui documentation](https://ui.shadcn.com/docs/components) for available components before implementing alternatives.
|
|
84
|
-
|
|
85
|
-
## What I Want to Build
|
|
86
|
-
[PROJECT_DESCRIPTION]
|
|
87
|
-
|
|
88
|
-
## Request
|
|
89
|
-
Please help me transform this boilerplate into my actual application. **You MUST completely replace all existing boilerplate code** to match my project requirements. The current implementation is just temporary scaffolding that should be entirely removed and replaced.
|
|
90
|
-
|
|
91
|
-
## Final Reminder: COMPLETE REPLACEMENT REQUIRED
|
|
92
|
-
**⚠️ IMPORTANT**: Do not preserve any of the existing boilerplate UI, components, or content. The user expects a completely fresh application that implements their requirements from scratch. Any remnants of the original boilerplate (like setup checklists, welcome screens, demo content, or placeholder navigation) indicate incomplete implementation.
|
|
93
|
-
|
|
94
|
-
**Success Criteria**: The final application should look and function as if it was built from scratch for the specific use case, with no evidence of the original boilerplate template.
|
|
95
|
-
|
|
96
|
-
## Post-Implementation Documentation
|
|
97
|
-
After completing the implementation, you MUST document any new features or significant changes in the \`/docs/features/\` directory:
|
|
98
|
-
|
|
99
|
-
1. **Create Feature Documentation**: For each major feature implemented, create a markdown file in \`/docs/features/\` that explains:
|
|
100
|
-
- What the feature does
|
|
101
|
-
- How it works
|
|
102
|
-
- Key components and files involved
|
|
103
|
-
- Usage examples
|
|
104
|
-
- Any configuration or setup required
|
|
105
|
-
|
|
106
|
-
2. **Update Existing Documentation**: If you modify existing functionality, update the relevant documentation files to reflect the changes.
|
|
107
|
-
|
|
108
|
-
3. **Document Design Decisions**: Include any important architectural or design decisions made during implementation.
|
|
109
|
-
|
|
110
|
-
This documentation helps maintain the project and assists future developers working with the codebase.
|
|
111
|
-
|
|
112
|
-
Think hard about the solution and implementing the user's requirements.`;
|
|
113
|
-
|
|
114
|
-
export function StarterPromptModal() {
|
|
115
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
116
|
-
const [projectDescription, setProjectDescription] = useState("");
|
|
117
|
-
const [copied, setCopied] = useState(false);
|
|
118
|
-
|
|
119
|
-
const handleCopy = async () => {
|
|
120
|
-
const finalPrompt = projectDescription.trim()
|
|
121
|
-
? STARTER_PROMPT.replace(
|
|
122
|
-
"[PROJECT_DESCRIPTION]",
|
|
123
|
-
projectDescription.trim()
|
|
124
|
-
)
|
|
125
|
-
: STARTER_PROMPT.replace("\n[PROJECT_DESCRIPTION]\n", "");
|
|
126
|
-
|
|
127
|
-
try {
|
|
128
|
-
await navigator.clipboard.writeText(finalPrompt);
|
|
129
|
-
setCopied(true);
|
|
130
|
-
setTimeout(() => setCopied(false), 2000);
|
|
131
|
-
} catch (err) {
|
|
132
|
-
console.error("Failed to copy text: ", err);
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
return (
|
|
137
|
-
<Dialog open={isOpen} onOpenChange={setIsOpen}>
|
|
138
|
-
<DialogTrigger asChild>
|
|
139
|
-
<Button size="sm" className="w-full">
|
|
140
|
-
<Copy className="w-4 h-4 mr-2" />
|
|
141
|
-
Get AI Starter Prompt
|
|
142
|
-
</Button>
|
|
143
|
-
</DialogTrigger>
|
|
144
|
-
<DialogContent className="max-w-2xl">
|
|
145
|
-
<DialogHeader>
|
|
146
|
-
<DialogTitle>Generate AI Starter Prompt</DialogTitle>
|
|
147
|
-
<DialogDescription>
|
|
148
|
-
Create a comprehensive prompt to help AI agents create your project
|
|
149
|
-
for you.
|
|
150
|
-
</DialogDescription>
|
|
151
|
-
</DialogHeader>
|
|
152
|
-
|
|
153
|
-
<div className="space-y-4">
|
|
154
|
-
<div>
|
|
155
|
-
<label
|
|
156
|
-
htmlFor="project-description"
|
|
157
|
-
className="text-sm font-medium mb-2 block"
|
|
158
|
-
>
|
|
159
|
-
Describe your project (optional)
|
|
160
|
-
</label>
|
|
161
|
-
<textarea
|
|
162
|
-
id="project-description"
|
|
163
|
-
placeholder="e.g., A task management app for teams with real-time collaboration, project timelines, and AI-powered task prioritization..."
|
|
164
|
-
value={projectDescription}
|
|
165
|
-
onChange={(e) => setProjectDescription(e.target.value)}
|
|
166
|
-
className="w-full h-24 px-3 py-2 border rounded-md resize-none text-sm"
|
|
167
|
-
/>
|
|
168
|
-
<p className="text-xs text-muted-foreground mt-1">
|
|
169
|
-
Optional: Add details about your project to get a more tailored
|
|
170
|
-
prompt
|
|
171
|
-
</p>
|
|
172
|
-
</div>
|
|
173
|
-
|
|
174
|
-
<div className="flex gap-2">
|
|
175
|
-
<Button onClick={handleCopy} className="flex-1">
|
|
176
|
-
{copied ? (
|
|
177
|
-
<>
|
|
178
|
-
<Check className="w-4 h-4 mr-2" />
|
|
179
|
-
Copied!
|
|
180
|
-
</>
|
|
181
|
-
) : (
|
|
182
|
-
<>
|
|
183
|
-
<Copy className="w-4 h-4 mr-2" />
|
|
184
|
-
Copy Starter Prompt
|
|
185
|
-
</>
|
|
186
|
-
)}
|
|
187
|
-
</Button>
|
|
188
|
-
<Button variant="outline" onClick={() => setIsOpen(false)}>
|
|
189
|
-
Cancel
|
|
190
|
-
</Button>
|
|
191
|
-
</div>
|
|
192
|
-
|
|
193
|
-
<div className="text-xs text-muted-foreground border-t pt-3">
|
|
194
|
-
<strong>How to use:</strong> Copy this prompt and paste it into
|
|
195
|
-
Claude Code, Cursor, or any AI coding assistant to get started with
|
|
196
|
-
your project.
|
|
197
|
-
</div>
|
|
198
|
-
</div>
|
|
199
|
-
</DialogContent>
|
|
200
|
-
</Dialog>
|
|
201
|
-
);
|
|
202
|
-
}
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Copy, Check } from "lucide-react";
|
|
5
|
+
import { Button } from "@/components/ui/button";
|
|
6
|
+
import {
|
|
7
|
+
Dialog,
|
|
8
|
+
DialogContent,
|
|
9
|
+
DialogDescription,
|
|
10
|
+
DialogHeader,
|
|
11
|
+
DialogTitle,
|
|
12
|
+
DialogTrigger,
|
|
13
|
+
} from "@/components/ui/dialog";
|
|
14
|
+
|
|
15
|
+
const STARTER_PROMPT = `I'm working with an agentic coding boilerplate project that includes authentication, database integration, and AI capabilities. Here's what's already set up:
|
|
16
|
+
|
|
17
|
+
## Current Agentic Coding Boilerplate Structure
|
|
18
|
+
- **Authentication**: Better Auth with Google OAuth integration
|
|
19
|
+
- **Database**: Drizzle ORM with PostgreSQL setup
|
|
20
|
+
- **AI Integration**: Vercel AI SDK with OpenAI integration
|
|
21
|
+
- **UI**: shadcn/ui components with Tailwind CSS
|
|
22
|
+
- **Current Routes**:
|
|
23
|
+
- \`/\` - Home page with setup instructions and feature overview
|
|
24
|
+
- \`/dashboard\` - Protected dashboard page (requires authentication)
|
|
25
|
+
- \`/chat\` - AI chat interface (requires OpenAI API key)
|
|
26
|
+
|
|
27
|
+
## Important Context
|
|
28
|
+
This is an **agentic coding boilerplate/starter template** - all existing pages and components are meant to be examples and should be **completely replaced** to build the actual AI-powered application.
|
|
29
|
+
|
|
30
|
+
### CRITICAL: You MUST Override All Boilerplate Content
|
|
31
|
+
**DO NOT keep any boilerplate components, text, or UI elements unless explicitly requested.** This includes:
|
|
32
|
+
|
|
33
|
+
- **Remove all placeholder/demo content** (setup checklists, welcome messages, boilerplate text)
|
|
34
|
+
- **Replace the entire navigation structure** - don't keep the existing site header or nav items
|
|
35
|
+
- **Override all page content completely** - don't append to existing pages, replace them entirely
|
|
36
|
+
- **Remove or replace all example components** (setup-checklist, starter-prompt-modal, etc.)
|
|
37
|
+
- **Replace placeholder routes and pages** with the actual application functionality
|
|
38
|
+
|
|
39
|
+
### Required Actions:
|
|
40
|
+
1. **Start Fresh**: Treat existing components as temporary scaffolding to be removed
|
|
41
|
+
2. **Complete Replacement**: Build the new application from scratch using the existing tech stack
|
|
42
|
+
3. **No Hybrid Approach**: Don't try to integrate new features alongside existing boilerplate content
|
|
43
|
+
4. **Clean Slate**: The final application should have NO trace of the original boilerplate UI or content
|
|
44
|
+
|
|
45
|
+
The only things to preserve are:
|
|
46
|
+
- **All installed libraries and dependencies** (DO NOT uninstall or remove any packages from package.json)
|
|
47
|
+
- **Authentication system** (but customize the UI/flow as needed)
|
|
48
|
+
- **Database setup and schema** (but modify schema as needed for your use case)
|
|
49
|
+
- **Core configuration files** (next.config.ts, tsconfig.json, tailwind.config.ts, etc.)
|
|
50
|
+
- **Build and development scripts** (keep all npm/pnpm scripts in package.json)
|
|
51
|
+
|
|
52
|
+
## Tech Stack
|
|
53
|
+
- Next.js 16 with App Router
|
|
54
|
+
- TypeScript
|
|
55
|
+
- Tailwind CSS
|
|
56
|
+
- Better Auth for authentication
|
|
57
|
+
- Drizzle ORM + PostgreSQL
|
|
58
|
+
- Vercel AI SDK
|
|
59
|
+
- shadcn/ui components
|
|
60
|
+
- Lucide React icons
|
|
61
|
+
|
|
62
|
+
## AI Model Configuration
|
|
63
|
+
**IMPORTANT**: When implementing any AI functionality, always use the \`OPENAI_MODEL\` environment variable for the model name instead of hardcoding it:
|
|
64
|
+
|
|
65
|
+
\`\`\`typescript
|
|
66
|
+
// ✓ Correct - Use environment variable
|
|
67
|
+
const model = process.env.OPENAI_MODEL || "gpt-5-mini";
|
|
68
|
+
model: openai(model)
|
|
69
|
+
|
|
70
|
+
// ✗ Incorrect - Don't hardcode model names
|
|
71
|
+
model: openai("gpt-5-mini")
|
|
72
|
+
\`\`\`
|
|
73
|
+
|
|
74
|
+
This allows for easy model switching without code changes and ensures consistency across the application.
|
|
75
|
+
|
|
76
|
+
## Component Development Guidelines
|
|
77
|
+
**Always prioritize shadcn/ui components** when building the application:
|
|
78
|
+
|
|
79
|
+
1. **First Choice**: Use existing shadcn/ui components from the project
|
|
80
|
+
2. **Second Choice**: Install additional shadcn/ui components using \`pnpm dlx shadcn@latest add <component-name>\`
|
|
81
|
+
3. **Last Resort**: Only create custom components or use other libraries if shadcn/ui doesn't provide a suitable option
|
|
82
|
+
|
|
83
|
+
The project already includes several shadcn/ui components (button, dialog, avatar, etc.) and follows their design system. Always check the [shadcn/ui documentation](https://ui.shadcn.com/docs/components) for available components before implementing alternatives.
|
|
84
|
+
|
|
85
|
+
## What I Want to Build
|
|
86
|
+
[PROJECT_DESCRIPTION]
|
|
87
|
+
|
|
88
|
+
## Request
|
|
89
|
+
Please help me transform this boilerplate into my actual application. **You MUST completely replace all existing boilerplate code** to match my project requirements. The current implementation is just temporary scaffolding that should be entirely removed and replaced.
|
|
90
|
+
|
|
91
|
+
## Final Reminder: COMPLETE REPLACEMENT REQUIRED
|
|
92
|
+
**⚠️ IMPORTANT**: Do not preserve any of the existing boilerplate UI, components, or content. The user expects a completely fresh application that implements their requirements from scratch. Any remnants of the original boilerplate (like setup checklists, welcome screens, demo content, or placeholder navigation) indicate incomplete implementation.
|
|
93
|
+
|
|
94
|
+
**Success Criteria**: The final application should look and function as if it was built from scratch for the specific use case, with no evidence of the original boilerplate template.
|
|
95
|
+
|
|
96
|
+
## Post-Implementation Documentation
|
|
97
|
+
After completing the implementation, you MUST document any new features or significant changes in the \`/docs/features/\` directory:
|
|
98
|
+
|
|
99
|
+
1. **Create Feature Documentation**: For each major feature implemented, create a markdown file in \`/docs/features/\` that explains:
|
|
100
|
+
- What the feature does
|
|
101
|
+
- How it works
|
|
102
|
+
- Key components and files involved
|
|
103
|
+
- Usage examples
|
|
104
|
+
- Any configuration or setup required
|
|
105
|
+
|
|
106
|
+
2. **Update Existing Documentation**: If you modify existing functionality, update the relevant documentation files to reflect the changes.
|
|
107
|
+
|
|
108
|
+
3. **Document Design Decisions**: Include any important architectural or design decisions made during implementation.
|
|
109
|
+
|
|
110
|
+
This documentation helps maintain the project and assists future developers working with the codebase.
|
|
111
|
+
|
|
112
|
+
Think hard about the solution and implementing the user's requirements.`;
|
|
113
|
+
|
|
114
|
+
export function StarterPromptModal() {
|
|
115
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
116
|
+
const [projectDescription, setProjectDescription] = useState("");
|
|
117
|
+
const [copied, setCopied] = useState(false);
|
|
118
|
+
|
|
119
|
+
const handleCopy = async () => {
|
|
120
|
+
const finalPrompt = projectDescription.trim()
|
|
121
|
+
? STARTER_PROMPT.replace(
|
|
122
|
+
"[PROJECT_DESCRIPTION]",
|
|
123
|
+
projectDescription.trim()
|
|
124
|
+
)
|
|
125
|
+
: STARTER_PROMPT.replace("\n[PROJECT_DESCRIPTION]\n", "");
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
await navigator.clipboard.writeText(finalPrompt);
|
|
129
|
+
setCopied(true);
|
|
130
|
+
setTimeout(() => setCopied(false), 2000);
|
|
131
|
+
} catch (err) {
|
|
132
|
+
console.error("Failed to copy text: ", err);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
return (
|
|
137
|
+
<Dialog open={isOpen} onOpenChange={setIsOpen}>
|
|
138
|
+
<DialogTrigger asChild>
|
|
139
|
+
<Button size="sm" className="w-full">
|
|
140
|
+
<Copy className="w-4 h-4 mr-2" />
|
|
141
|
+
Get AI Starter Prompt
|
|
142
|
+
</Button>
|
|
143
|
+
</DialogTrigger>
|
|
144
|
+
<DialogContent className="max-w-2xl">
|
|
145
|
+
<DialogHeader>
|
|
146
|
+
<DialogTitle>Generate AI Starter Prompt</DialogTitle>
|
|
147
|
+
<DialogDescription>
|
|
148
|
+
Create a comprehensive prompt to help AI agents create your project
|
|
149
|
+
for you.
|
|
150
|
+
</DialogDescription>
|
|
151
|
+
</DialogHeader>
|
|
152
|
+
|
|
153
|
+
<div className="space-y-4">
|
|
154
|
+
<div>
|
|
155
|
+
<label
|
|
156
|
+
htmlFor="project-description"
|
|
157
|
+
className="text-sm font-medium mb-2 block"
|
|
158
|
+
>
|
|
159
|
+
Describe your project (optional)
|
|
160
|
+
</label>
|
|
161
|
+
<textarea
|
|
162
|
+
id="project-description"
|
|
163
|
+
placeholder="e.g., A task management app for teams with real-time collaboration, project timelines, and AI-powered task prioritization..."
|
|
164
|
+
value={projectDescription}
|
|
165
|
+
onChange={(e) => setProjectDescription(e.target.value)}
|
|
166
|
+
className="w-full h-24 px-3 py-2 border rounded-md resize-none text-sm"
|
|
167
|
+
/>
|
|
168
|
+
<p className="text-xs text-muted-foreground mt-1">
|
|
169
|
+
Optional: Add details about your project to get a more tailored
|
|
170
|
+
prompt
|
|
171
|
+
</p>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
<div className="flex gap-2">
|
|
175
|
+
<Button onClick={handleCopy} className="flex-1">
|
|
176
|
+
{copied ? (
|
|
177
|
+
<>
|
|
178
|
+
<Check className="w-4 h-4 mr-2" />
|
|
179
|
+
Copied!
|
|
180
|
+
</>
|
|
181
|
+
) : (
|
|
182
|
+
<>
|
|
183
|
+
<Copy className="w-4 h-4 mr-2" />
|
|
184
|
+
Copy Starter Prompt
|
|
185
|
+
</>
|
|
186
|
+
)}
|
|
187
|
+
</Button>
|
|
188
|
+
<Button variant="outline" onClick={() => setIsOpen(false)}>
|
|
189
|
+
Cancel
|
|
190
|
+
</Button>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<div className="text-xs text-muted-foreground border-t pt-3">
|
|
194
|
+
<strong>How to use:</strong> Copy this prompt and paste it into
|
|
195
|
+
Claude Code, Cursor, or any AI coding assistant to get started with
|
|
196
|
+
your project.
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</DialogContent>
|
|
200
|
+
</Dialog>
|
|
201
|
+
);
|
|
202
|
+
}
|