Skip to content

Commit 44dd317

Browse files
semsem
authored andcommitted
feat: Add comprehensive Nuxt 4 support
- Added Nuxt 4 as frontend framework option in techStack prompts - Created nuxt4.md template with Vue 3 and new app/ directory structure - Added Nuxt 4 validation commands (typecheck, build, dev, lint) - Updated README with Nuxt 4 features and examples - Enhanced project structure generator for Nuxt 4 - Version bump to v3.2.9 Fixes #7
1 parent 8186a2b commit 44dd317

File tree

8 files changed

+671
-20
lines changed

8 files changed

+671
-20
lines changed

.context-forge/progress.json

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,71 @@
44
"command": "init",
55
"operation": "Project initialization",
66
"status": "in_progress",
7+
"projectPath": "/Users/sem/code/context-forge",
78
"startTime": "2025-07-27T21:15:20.324Z",
9+
"metadata": {
10+
"aiEnabled": false,
11+
"targetIDEs": [
12+
"claude"
13+
]
14+
},
15+
"steps": []
16+
},
17+
{
18+
"id": "mek1gp9v2iwar373v",
19+
"command": "init",
20+
"operation": "Project initialization",
21+
"status": "in_progress",
822
"projectPath": "/Users/sem/code/context-forge",
23+
"startTime": "2025-08-20T13:59:05.203Z",
924
"metadata": {
1025
"aiEnabled": false,
1126
"targetIDEs": [
1227
"claude"
1328
]
1429
},
1530
"steps": []
31+
},
32+
{
33+
"id": "mek21bfbzfk371y83",
34+
"command": "init",
35+
"operation": "Project initialization",
36+
"status": "failed",
37+
"startTime": "2025-08-20T14:15:07.031Z",
38+
"projectPath": "/Users/sem/code/context-forge",
39+
"metadata": {
40+
"aiEnabled": false,
41+
"targetIDEs": [
42+
"claude"
43+
],
44+
"errors": [
45+
"Cannot read properties of undefined (reading 'length')"
46+
]
47+
},
48+
"steps": [
49+
{
50+
"id": "mek21bfesc0swil5w",
51+
"name": "Load configuration file",
52+
"status": "completed",
53+
"startTime": "2025-08-20T14:15:07.034Z",
54+
"endTime": "2025-08-20T14:15:07.034Z"
55+
},
56+
{
57+
"id": "mek21bfeos1d7wbmn",
58+
"name": "Save configuration",
59+
"status": "completed",
60+
"startTime": "2025-08-20T14:15:07.034Z",
61+
"endTime": "2025-08-20T14:15:07.035Z"
62+
},
63+
{
64+
"id": "mek21bffttfrlypp9",
65+
"name": "Generate documentation",
66+
"status": "completed",
67+
"startTime": "2025-08-20T14:15:07.035Z",
68+
"endTime": "2025-08-20T14:15:07.062Z"
69+
}
70+
],
71+
"endTime": "2025-08-20T14:15:07.063Z",
72+
"duration": 32
1673
}
1774
]

PRPs/ai_docs/README.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# AI Documentation Curation
2+
3+
This directory contains curated documentation for AI-assisted development. These docs are referenced in PRPs to provide comprehensive context.
4+
5+
## Purpose
6+
7+
When creating PRPs, you may need to include specific documentation that isn't easily accessible via URLs or is critical for implementation success. This directory serves as a repository for such documentation.
8+
9+
## Usage in PRPs
10+
11+
Reference documents in your PRPs using:
12+
13+
```yaml
14+
- docfile: PRPs/ai_docs/library-guide.md
15+
why: Specific implementation patterns and gotchas
16+
```
17+
18+
## What to Include
19+
20+
1. **Library Documentation** - Key sections from official docs
21+
2. **Implementation Patterns** - Common patterns and best practices
22+
3. **API References** - Detailed API documentation for complex integrations
23+
4. **Migration Guides** - When upgrading versions or switching libraries
24+
5. **Internal Standards** - Team-specific coding standards and practices
25+
26+
## File Naming Convention
27+
28+
- Use descriptive names: `react-hooks-guide.md`, `fastapi-async-patterns.md`
29+
- Include version if relevant: `nextjs-15-app-router.md`
30+
- Use lowercase with hyphens
31+
32+
## Example Structure
33+
34+
```
35+
PRPs/ai_docs/
36+
├── README.md (this file)
37+
├── react-hooks-guide.md
38+
├── fastapi-async-patterns.md
39+
├── postgres-optimization.md
40+
└── aws-lambda-best-practices.md
41+
```
42+
43+
Remember: The goal is to provide AI with all necessary context for one-pass implementation success.

README.md

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,28 @@
2525
</p>
2626

2727
<div align="center">
28-
<h2>🎉 What's New in v3.2.8</h2>
28+
<h2>🎉 What's New in v3.2.9</h2>
2929

3030
<table>
3131
<tr>
32+
<td align="center" width="50%">
33+
<h3>🦄 Nuxt 4 Support</h3>
34+
<p><strong>NEW: Full Nuxt 4 Integration</strong></p>
35+
<p>Complete support for Nuxt 4 with Vue 3 and modern development!</p>
36+
<ul align="left">
37+
<li>🏗️ New app/ directory structure support</li>
38+
<li>⚡ Enhanced TypeScript integration</li>
39+
<li>🎯 Vue 3 Composition API guidelines</li>
40+
<li>🔄 Auto-imports and server-side rendering</li>
41+
<li>📊 Nuxt-specific validation commands</li>
42+
</ul>
43+
<code>context-forge init</code><br/>
44+
<em>Select "Nuxt 4" as frontend framework</em>
45+
</td>
3246
<td align="center" width="50%">
3347
<h3>🤖 AI-Powered PRP Generation</h3>
34-
<p><strong>NEW: <code>context-forge init --ai-prp</code></strong></p>
35-
<p>Generate intelligent, feature-specific PRPs with AI!</p>
48+
<p><strong>Continued: <code>context-forge init --ai-prp</code></strong></p>
49+
<p>Intelligent, feature-specific PRPs with AI enhancement!</p>
3650
<ul align="left">
3751
<li>🧠 OpenAI & Anthropic Claude integration</li>
3852
<li>🔐 Secure API key management with encryption</li>
@@ -42,19 +56,6 @@
4256
</ul>
4357
<code>context-forge ai-keys --provider openai</code>
4458
</td>
45-
<td align="center" width="50%">
46-
<h3>🔧 Enhanced Core Features</h3>
47-
<p><strong>Bug Fixes & Improvements</strong></p>
48-
<p>Major improvements to PRP generation and project initialization!</p>
49-
<ul align="left">
50-
<li>✅ Fixed identical PRP content bug</li>
51-
<li>📝 Added config.json file generation</li>
52-
<li>🎯 Feature-specific PRP content</li>
53-
<li>🔒 Encrypted key storage</li>
54-
<li>📊 Progress tracking during generation</li>
55-
</ul>
56-
<code>context-forge init --ai-prp</code>
57-
</td>
5859
</tr>
5960
</table>
6061

@@ -596,7 +597,40 @@ user-service/
596597
└── .github/workflows/
597598
```
598599

599-
### Example 3: Using Configuration File
600+
### Example 3: Nuxt 4 Vue Application
601+
602+
```bash
603+
$ context-forge init --output nuxt-dashboard
604+
605+
? Project name: Analytics Dashboard
606+
? Project type: fullstack
607+
? Project description: Modern analytics dashboard with real-time data
608+
? Frontend framework: nuxt4 # NEW: Nuxt 4 option
609+
? Styling framework: tailwind
610+
? State management: pinia
611+
? Backend framework: fastapi
612+
? Database: postgresql
613+
? Authentication method: jwt
614+
? Enable AI-powered PRP generation? Yes
615+
616+
Generated structure:
617+
nuxt-dashboard/
618+
├── CLAUDE.md # Nuxt 4 + Vue 3 specific rules
619+
├── Docs/
620+
├── PRPs/
621+
│ ├── nuxt-dashboard-prp.md
622+
│ └── feature-auth-prp.md # AI-enhanced for Nuxt 4
623+
└── .claude/commands/ # 25+ slash commands
624+
625+
✨ Nuxt 4 Features Included:
626+
- New app/ directory structure documented
627+
- Vue 3 Composition API guidelines
628+
- TypeScript integration with auto-imports
629+
- SSR and data fetching best practices
630+
- Pinia state management setup
631+
```
632+
633+
### Example 4: Using Configuration File
600634

601635
```bash
602636
# context-forge.json
@@ -991,6 +1025,7 @@ When you run `context-forge init`, you'll be guided through:
9911025
#### Frontend Frameworks
9921026

9931027
- **Next.js 15** - App Router, Server Components, React 19
1028+
- **Nuxt 4** - NEW! Vue-based full-stack with enhanced TypeScript support
9941029
- **React** - SPA with TypeScript and modern patterns
9951030
- **Vue.js 3** - Composition API and TypeScript
9961031
- **Angular** - Standalone components, RxJS

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "context-forge",
3-
"version": "3.2.8",
3+
"version": "3.2.9",
44
"description": "AI orchestration platform with autonomous teams, enhancement planning, migration tools, 25+ slash commands, checkpoints & hooks. Multi-IDE: Claude, Cursor, Windsurf, Cline, Copilot",
55
"main": "dist/index.js",
66
"bin": {

src/cli/prompts/techStack.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export async function techStack(projectType: string): Promise<TechStackAnswers>
2727
message: 'Select your frontend framework:',
2828
choices: [
2929
{ name: '🚀 Next.js (React-based, full-stack)', value: 'nextjs' },
30+
{ name: '🦄 Nuxt 4 (Vue-based, full-stack)', value: 'nuxt4' },
3031
{ name: '⚙️ React (SPA)', value: 'react' },
3132
{ name: '💅 Vue.js', value: 'vuejs' },
3233
{ name: '🌶️ Angular', value: 'angular' },
@@ -58,8 +59,8 @@ export async function techStack(projectType: string): Promise<TechStackAnswers>
5859
]);
5960
answers.styling = stylingAnswer.styling;
6061

61-
// State management for React/Vue/Angular
62-
if (['react', 'nextjs', 'vuejs', 'angular'].includes(frontendAnswer.frontend)) {
62+
// State management for React/Vue/Angular/Nuxt
63+
if (['react', 'nextjs', 'vuejs', 'nuxt4', 'angular'].includes(frontendAnswer.frontend)) {
6364
console.log(chalk.cyan(`📊 ${stepCounter++}. State Management`));
6465
const stateAnswer = await inquirer.prompt([
6566
{
@@ -169,6 +170,14 @@ function getStateManagementChoices(framework: string) {
169170
{ name: 'Pinia', value: 'pinia' },
170171
{ name: 'None', value: 'none' },
171172
];
173+
case 'nuxt4':
174+
return [
175+
{ name: 'Pinia (Recommended)', value: 'pinia' },
176+
{ name: 'Vuex (Legacy)', value: 'vuex' },
177+
{ name: 'useState (Nuxt built-in)', value: 'nuxt-usestate' },
178+
{ name: 'useCookie (Nuxt built-in)', value: 'nuxt-usecookie' },
179+
{ name: 'None', value: 'none' },
180+
];
172181
case 'angular':
173182
return [
174183
{ name: 'NgRx', value: 'ngrx' },

src/data/validationCommands.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ export const techStackValidationCommands: Record<string, ValidationCommandSet> =
4848
coverage: 'vitest --coverage',
4949
},
5050

51+
nuxt4: {
52+
syntax: ['nuxt typecheck', 'npm run lint'],
53+
tests: ['npm run test', 'npm run test:coverage'],
54+
build: 'nuxt build',
55+
start: 'nuxt dev',
56+
typeCheck: 'nuxt typecheck',
57+
lint: 'eslint .',
58+
format: 'prettier --write "app/**/*.{vue,ts,js}"',
59+
coverage: 'vitest --coverage',
60+
security: ['npm audit', 'nuxt build --analyze'],
61+
},
62+
5163
angular: {
5264
syntax: ['ng lint', 'ng build --configuration development'],
5365
tests: ['ng test --no-watch --code-coverage'],

src/generators/claudeMd.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ async function selectTemplate(techStack: ProjectConfig['techStack']): Promise<st
3636
// Priority order for template selection
3737
if (techStack.frontend === 'nextjs') {
3838
return 'tech-stacks/nextjs-15.md';
39+
} else if (techStack.frontend === 'nuxt4') {
40+
return 'tech-stacks/nuxt4.md';
3941
} else if (techStack.frontend === 'react') {
4042
return 'tech-stacks/react.md';
4143
} else if (techStack.frontend === 'vue') {
@@ -73,6 +75,26 @@ function generateProjectStructure(techStack: ProjectConfig['techStack']): string
7375
└── types/ # TypeScript types`;
7476
}
7577

78+
if (techStack.frontend === 'nuxt4') {
79+
return `app/ # NEW: Nuxt 4 app directory
80+
├── assets/ # Static assets
81+
├── components/ # Vue components
82+
├── composables/ # Vue composables
83+
├── layouts/ # Layout components
84+
├── middleware/ # Route middleware
85+
├── pages/ # File-based routing
86+
├── plugins/ # Plugins
87+
├── utils/ # Utility functions
88+
├── app.vue # Root component
89+
├── app.config.ts # App configuration
90+
└── error.vue # Error page
91+
content/ # Nuxt Content (optional)
92+
public/ # Static files
93+
server/ # Server-side code
94+
shared/ # Shared utilities
95+
nuxt.config.ts # Nuxt configuration`;
96+
}
97+
7698
if (techStack.backend === 'fastapi') {
7799
return `app/
78100
├── api/ # API endpoints

0 commit comments

Comments
 (0)