Work packages completed: - WP1: packages/forge — pipeline runner, stage adapter, board tasks, brief classifier, persona loader with project-level overrides. 89 tests, 95.62% coverage. - WP2: packages/macp — credential resolver, gate runner, event emitter, protocol types. 65 tests, 96.24% coverage. Full Python-to-TS port preserving all behavior. - WP3: plugins/mosaic-framework — OC rails injection plugin (before_agent_start + subagent_spawning hooks for Mosaic contract enforcement). - WP4: profiles/ (domains, tech-stacks, workflows), guides/ (17 docs), skills/ (5 universal skills), forge pipeline assets (48 markdown files). Board deliberation: docs/reviews/consolidation-board-memo.md Brief: briefs/monorepo-consolidation.md Consolidates mosaic/stack (forge, MACP, bootstrap framework) into mosaic/mosaic-stack. 154 new tests total. Zero Python — all TypeScript/ESM.
169 lines
6.1 KiB
JSON
169 lines
6.1 KiB
JSON
{
|
|
"name": "Next.js Fullstack",
|
|
"description": "Next.js 14+ with App Router, TypeScript, Tailwind CSS, and modern fullstack development",
|
|
"filePatterns": ["*.tsx", "*.ts", "*.jsx", "*.js"],
|
|
"excludePatterns": ["*.test.tsx", "*.test.ts", "*.spec.tsx", "*.spec.ts", "*.d.ts"],
|
|
"techStack": {
|
|
"framework": "Next.js 14+ with App Router",
|
|
"language": "TypeScript",
|
|
"styling": "Tailwind CSS",
|
|
"database": "Prisma + PostgreSQL",
|
|
"authentication": "NextAuth.js",
|
|
"stateManagement": "Zustand + React Query",
|
|
"testing": "Jest + React Testing Library",
|
|
"deployment": "Vercel",
|
|
"api": "Next.js API Routes / Server Actions"
|
|
},
|
|
"conventions": {
|
|
"naming": {
|
|
"components": "PascalCase (UserProfile.tsx)",
|
|
"pages": "lowercase with hyphens (user-profile/page.tsx)",
|
|
"apiRoutes": "lowercase with hyphens (api/user-profile/route.ts)",
|
|
"hooks": "camelCase with use prefix (useAuth.ts)",
|
|
"utilities": "camelCase (formatDate.ts)",
|
|
"constants": "UPPER_SNAKE_CASE",
|
|
"types": "PascalCase with T prefix"
|
|
},
|
|
"fileStructure": {
|
|
"appRouter": "app/{route}/page.tsx, layout.tsx",
|
|
"apiRoutes": "app/api/{endpoint}/route.ts",
|
|
"components": "components/{feature}/{ComponentName}.tsx",
|
|
"hooks": "hooks/use{HookName}.ts",
|
|
"libs": "lib/{utility}.ts",
|
|
"types": "types/{feature}.types.ts",
|
|
"prisma": "prisma/schema.prisma, prisma/migrations/",
|
|
"tests": "__tests__/{ComponentName}.test.tsx"
|
|
},
|
|
"imports": {
|
|
"style": "Absolute imports with @ prefix",
|
|
"grouping": "React/Next, third-party, internal, relative",
|
|
"sorting": "Alphabetical within groups"
|
|
}
|
|
},
|
|
"qualityChecks": {
|
|
"lint": {
|
|
"command": "npx eslint --fix",
|
|
"config": "Next.js ESLint + TypeScript",
|
|
"autoFix": true
|
|
},
|
|
"format": {
|
|
"command": "npx prettier --write",
|
|
"config": "80 character line limit",
|
|
"autoFix": true
|
|
},
|
|
"build": {
|
|
"command": "npm run build",
|
|
"checkTypes": true,
|
|
"failOnError": true
|
|
},
|
|
"test": {
|
|
"unit": "npm test",
|
|
"coverage": "npm run test:coverage",
|
|
"minimumCoverage": 75
|
|
}
|
|
},
|
|
"codePatterns": {
|
|
"page": {
|
|
"structure": "Default export function with metadata",
|
|
"metadata": "Use generateMetadata for dynamic SEO",
|
|
"loading": "Create loading.tsx for loading states",
|
|
"error": "Create error.tsx for error boundaries",
|
|
"notFound": "Create not-found.tsx for 404 handling"
|
|
},
|
|
"layout": {
|
|
"structure": "Root layout with html and body tags",
|
|
"metadata": "Define default metadata and viewport",
|
|
"providers": "Wrap children with necessary providers",
|
|
"fonts": "Use next/font for font optimization"
|
|
},
|
|
"component": {
|
|
"client": "Use 'use client' directive for client components",
|
|
"server": "Default to server components when possible",
|
|
"props": "Define TypeScript interfaces for props",
|
|
"memo": "Use React.memo for performance when needed"
|
|
},
|
|
"apiRoute": {
|
|
"structure": "Export named functions (GET, POST, etc.)",
|
|
"params": "Use typed params and searchParams",
|
|
"responses": "Return NextResponse with proper status codes",
|
|
"middleware": "Use middleware for auth and validation"
|
|
},
|
|
"serverActions": {
|
|
"directive": "Use 'use server' directive",
|
|
"validation": "Validate input data with zod",
|
|
"revalidation": "Use revalidatePath/revalidateTag",
|
|
"errors": "Handle errors gracefully"
|
|
},
|
|
"database": {
|
|
"prisma": "Use Prisma Client for database operations",
|
|
"transactions": "Use Prisma transactions for complex operations",
|
|
"migrations": "Use Prisma migrate for schema changes",
|
|
"seeding": "Create seed scripts for development data"
|
|
}
|
|
},
|
|
"context7Libraries": [
|
|
"next",
|
|
"react",
|
|
"@next/font",
|
|
"next-auth",
|
|
"@prisma/client",
|
|
"prisma",
|
|
"tailwindcss",
|
|
"zustand",
|
|
"@tanstack/react-query",
|
|
"zod"
|
|
],
|
|
"commonImports": {
|
|
"page": ["import { Metadata } from 'next';", "import { notFound } from 'next/navigation';"],
|
|
"component": [
|
|
"import React from 'react';",
|
|
"import Link from 'next/link';",
|
|
"import Image from 'next/image';"
|
|
],
|
|
"apiRoute": [
|
|
"import { NextRequest, NextResponse } from 'next/server';",
|
|
"import { getServerSession } from 'next-auth';"
|
|
],
|
|
"serverAction": [
|
|
"import { revalidatePath } from 'next/cache';",
|
|
"import { redirect } from 'next/navigation';"
|
|
]
|
|
},
|
|
"bestPractices": [
|
|
"Use App Router instead of Pages Router for new projects",
|
|
"Default to Server Components, use Client Components only when needed",
|
|
"Use Next.js Image component for optimized images",
|
|
"Implement proper SEO with metadata API",
|
|
"Use Server Actions for form handling and mutations",
|
|
"Implement proper error handling with error boundaries",
|
|
"Use Prisma for type-safe database operations",
|
|
"Implement proper authentication with NextAuth.js",
|
|
"Use Tailwind CSS for styling with design system approach",
|
|
"Implement proper loading states and skeleton screens"
|
|
],
|
|
"seoOptimization": [
|
|
"Use generateMetadata for dynamic meta tags",
|
|
"Implement proper Open Graph and Twitter Card tags",
|
|
"Use structured data (JSON-LD) where appropriate",
|
|
"Implement proper canonical URLs",
|
|
"Use Next.js Image component with alt text",
|
|
"Implement proper heading hierarchy",
|
|
"Use semantic HTML elements",
|
|
"Generate sitemap.xml and robots.txt",
|
|
"Implement proper internal linking",
|
|
"Optimize Core Web Vitals"
|
|
],
|
|
"performanceOptimizations": [
|
|
"Use Next.js Image component with proper sizing",
|
|
"Implement code splitting with dynamic imports",
|
|
"Use React.lazy and Suspense for component lazy loading",
|
|
"Optimize fonts with next/font",
|
|
"Use streaming with loading.tsx files",
|
|
"Implement proper caching strategies",
|
|
"Use ISR (Incremental Static Regeneration) when appropriate",
|
|
"Optimize bundle size with proper imports",
|
|
"Use web workers for heavy computations",
|
|
"Implement proper database query optimization"
|
|
]
|
|
}
|