From jaan-to
Assembles backend and frontend scaffold outputs into a runnable project with proper directory tree, configs, and entry points. Use when combining scaffolded code into a working project.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jaan-to:dev-project-assembleThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Wire backend + frontend scaffold outputs into a runnable project with proper directory tree, configs, and entry points.
Wire backend + frontend scaffold outputs into a runnable project with proper directory tree, configs, and entry points.
$JAAN_CONTEXT_DIR/tech.md - Tech stack context (CRITICAL -- determines framework, monorepo tool, package manager)
#current-stack, #frameworks, #constraints, #patterns$JAAN_CONTEXT_DIR/config.md - Project configuration$JAAN_TEMPLATES_DIR/jaan-to-dev-project-assemble.template.md - Output template (assembly log)$JAAN_LEARN_DIR/jaan-to-dev-project-assemble.learn.md - Past lessons (loaded in Pre-Execution)${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md - Language resolution protocol${CLAUDE_PLUGIN_ROOT}/docs/research/69-dev-scaffold-project-assembly-automation.md - Research: monorepo patterns, entry points, provider wiring, config inheritance, .env validationUpstream Artifacts: $ARGUMENTS
Accepts 2-3 file paths or descriptions plus optional target directory:
/jaan-to:backend-scaffold output: $JAAN_OUTPUTS_DIR/backend/scaffold/{id}-{slug}/)/jaan-to:frontend-scaffold output: $JAAN_OUTPUTS_DIR/frontend/scaffold/{id}-{slug}/)/jaan-to:frontend-design output, optional)MANDATORY — Read and execute ALL steps in: ${CLAUDE_PLUGIN_ROOT}/docs/extending/pre-execution-protocol.md
Skill name: dev-project-assemble
Execute: Step 0 (Init Guard) → A (Load Lessons) → B (Resolve Template) → C (Offer Template Seeding)
Also read context files if available:
$JAAN_CONTEXT_DIR/tech.md -- Know the tech stack for framework-specific assembly$JAAN_CONTEXT_DIR/config.md -- Project configuration${CLAUDE_PLUGIN_ROOT}/docs/research/69-dev-scaffold-project-assembly-automation.md -- Research reference for assembly patternsRead and apply language protocol: ${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md
Override field for this skill: language_dev-project-assemble
Language exception: Generated code output (variable names, code blocks, schemas, SQL, API specs) is NOT affected by this setting and remains in the project's programming language.
ultrathink
Use extended reasoning for:
For each provided path:
backend-scaffold: Read all files in the scaffold folder:
{id}-{slug}.md -- Main doc (setup guide, architecture){id}-{slug}-routes.ts -- Route handlers{id}-{slug}-services.ts -- Service layer{id}-{slug}-schemas.ts -- Validation schemas{id}-{slug}-middleware.ts -- Auth + error handling{id}-{slug}-prisma.prisma -- ORM data model{id}-{slug}-config.ts -- Package.json + tsconfig content{id}-{slug}-readme.md -- Setup instructionsfrontend-scaffold: Read all files in the scaffold folder:
{id}-{slug}.md -- Main doc (architecture, component map){id}-{slug}-components.tsx -- React components{id}-{slug}-hooks.ts -- Typed API client hooks{id}-{slug}-types.ts -- TypeScript interfaces{id}-{slug}-pages.tsx -- Page layouts / routes{id}-{slug}-config.ts -- Package.json + tsconfig + tailwind config{id}-{slug}-readme.md -- Setup instructionsfrontend-design (optional): Read HTML preview files for visual reference.
Report which inputs found vs missing:
INPUT SUMMARY
-------------
Sources Found: {list}
Sources Missing: {list with fallback suggestions}
Backend Files: {count}
Frontend Files: {count}
Design Files: {count or "none"}
Entities: {extracted entity names from backend}
Components: {extracted component names from frontend}
Read $JAAN_CONTEXT_DIR/tech.md:
#current-stack (default: Fastify v5 + Node.js)#current-stack (default: React v19 + Next.js v15)#current-stack (default: PostgreSQL + Prisma)#current-stack (default: TailwindCSS v4)#patterns (auth, error handling, state management)Determine primary stack from tech.md:
| tech.md value | Backend | Frontend | Package Manager |
|---|---|---|---|
| Node.js / TypeScript | Fastify v5+ | Next.js v15+ | pnpm |
| PHP | Laravel 12 / Symfony 7 | Next.js v15+ (or Blade/Inertia) | composer + pnpm |
| Go | Chi / stdlib | Next.js v15+ | go mod + pnpm |
AskUserQuestion:
Based on selection, determine directory layout:
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-project-assemble-reference.mdsection "Directory Layout Templates" for monorepo and separate project directory trees.
Map bundled scaffold files to individual project files:
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-project-assemble-reference.mdsection "File Splitting Maps" for scaffold-to-project file mapping tables.
Present file tree:
FILE SPLIT PLAN
===============
BACKEND ({count} files)
-----------------------
{numbered list with source -> target mapping}
FRONTEND ({count} files)
------------------------
{numbered list with source -> target mapping}
GENERATED ENTRY POINTS ({count} files)
---------------------------------------
{numbered list}
CONFIG FILES ({count} files)
----------------------------
{numbered list}
TOTAL: {count} files to write
Detect required providers from scaffold dependencies:
Frontend providers (ordered by dependency):
next-auth or auth hooks detectednext-themes detectedQueryClientProvider + optional tRPCBackend plugins (ordered by registration):
Present wiring plan:
PROVIDER WIRING
===============
Frontend (providers.tsx):
1. {Provider} -- {reason}
2. {Provider} -- {reason}
...
Backend (app.ts plugin registration):
1. {Plugin} -- {reason}
2. {Plugin} -- {reason}
...
Use AskUserQuestion:
Present full summary:
ASSEMBLY PLAN SUMMARY
=====================
Project Structure: {monorepo / separate / single}
Target Directory: {path}
Package Manager: {pnpm / npm / yarn}
Backend Stack: {framework + DB + ORM}
Frontend Stack: {framework + styling + state}
FILES TO WRITE
--------------
Backend: {count} files
Frontend: {count} files
Entry Points: {count} files (generated)
Configs: {count} files (generated)
Total: {count} files
PROVIDERS
---------
Frontend: {list}
Backend: {list}
ENVIRONMENT VARIABLES
---------------------
{list of all .env variables with descriptions}
Do NOT proceed to Phase 2 without explicit approval.
Read each bundled backend scaffold file and split into individual project files:
Parse {id}-{slug}-routes.ts and split per resource:
{target}/src/routes/{resource}/index.ts -- Route handlerParse {id}-{slug}-schemas.ts and split per resource:
{target}/src/routes/{resource}/{resource}.schema.ts -- Zod schemas + inferred typesParse {id}-{slug}-services.ts and split per resource:
{target}/src/routes/{resource}/{resource}.service.ts -- Business logic with PrismaParse {id}-{slug}-middleware.ts and create:
{target}/src/plugins/auth.ts -- Auth plugin (fastify-plugin wrapped){target}/src/plugins/error-handler.ts -- Error handler (RFC 9457){target}/src/plugins/cors.ts -- CORS configuration (if not inline)Copy {id}-{slug}-prisma.prisma to:
{target}/prisma/schema.prisma{target}/prisma/seed.ts with placeholder seed dataCreate entry points that wire everything together:
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-project-assemble-reference.mdsection "Backend Entry Point Templates" for app.ts, server.ts, and env.ts code templates.
Read each bundled frontend scaffold file and split into individual project files:
Parse {id}-{slug}-components.tsx and split per component:
{target}/src/components/{level}/{ComponentName}.tsx'use client' directive only where neededParse {id}-{slug}-hooks.ts and create:
{target}/src/lib/api/hooks.ts -- TanStack Query hooks{target}/src/lib/api/query-client.ts -- Query client configurationParse {id}-{slug}-types.ts and create:
{target}/src/types/api.ts -- API response/request typespackages/types/src/index.tsParse {id}-{slug}-pages.tsx and split per route:
{target}/src/app/{route}/page.tsx{target}/src/app/{route}/layout.tsx (where needed){target}/src/app/{route}/loading.tsx (skeleton states)Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-project-assemble-reference.mdsection "Frontend Entry Point Templates" for layout, providers, page, global.css, and env.ts code templates.
package.jsontsconfig.jsontooling/typescript/, extended per appnext.config.tsbabel-plugin-react-compiler is in devDependencies when reactCompiler: true#current-stack — PHP/Go projects may have equivalent config-implied dependencies (see reference)Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-project-assemble-reference.mdsection "Build Plugin Detection" for multi-stack config-implied dependency detection.
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-project-assemble-reference.mdsection "Config File Content Patterns" for .env.example, .gitignore, and monorepo-specific config content.
Condition: Only when backend-api-contract is in inputs AND $JAAN_CONTEXT_DIR/tech.md indicates Node.js/TypeScript stack.
src/app/reference/route.ts — Scalar API reference route:
import { ApiReference } from '@scalar/nextjs-api-reference';
const config = { url: '/api/openapi.json', theme: 'moon' };
export const GET = ApiReference(config);
src/app/api/openapi/route.ts — spec serving route:
import { NextResponse } from 'next/server';
import yaml from 'js-yaml';
import fs from 'fs';
import path from 'path';
export async function GET() {
const filePath = path.join(process.cwd(), 'specs/openapi.yaml');
const fileContent = fs.readFileSync(filePath, 'utf8');
const spec = yaml.load(fileContent);
return NextResponse.json(spec);
}
@scalar/nextjs-api-reference and js-yaml to package.json dependenciesReference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/openapi-integration-reference.mdsection "Scalar API Documentation".
Before preview, verify:
If any check fails, fix before preview.
Present complete file list with sizes and key content:
ASSEMBLY PREVIEW
================
{target}/
{full directory tree with file sizes}
Key Generated Files:
- src/app.ts: {brief description}
- src/app/layout.tsx: {brief description}
- src/app/providers.tsx: {providers listed}
- package.json: {dependency count}
- .env.example: {variable count}
Use AskUserQuestion:
If approved:
Confirm each batch:
Backend files written: {count} files Frontend files written: {count} files Config files written: {count} files
Write assembly log to $JAAN_OUTPUTS_DIR/dev/project-assemble/:
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/id-generator.sh"
SUBDOMAIN_DIR="$JAAN_OUTPUTS_DIR/dev/project-assemble"
mkdir -p "$SUBDOMAIN_DIR"
NEXT_ID=$(generate_next_id "$SUBDOMAIN_DIR")
slug="{project-name-slug}"
OUTPUT_FOLDER="${SUBDOMAIN_DIR}/${NEXT_ID}-${slug}"
Write {NEXT_ID}-{slug}.md with:
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/index-updater.sh"
add_to_index \
"$SUBDOMAIN_DIR/README.md" \
"$NEXT_ID" \
"${NEXT_ID}-${slug}" \
"{Project Title}" \
"{Executive summary -- 1-2 sentences}"
Confirm:
Assembly log written to:
$JAAN_OUTPUTS_DIR/dev/project-assemble/{NEXT_ID}-{slug}/{NEXT_ID}-{slug}.mdIndex updated:$JAAN_OUTPUTS_DIR/dev/project-assemble/README.md
Project assembled successfully!
Immediate Steps:
- Run
pnpm install(ornpm install) to install dependencies- Copy
.env.exampleto.env.localand fill in values- Run
pnpm db:generate && pnpm db:pushto set up database- Run
pnpm devto start developmentNext Skills in Pipeline:
- Run
/jaan-to:backend-service-implementto fill in service layer business logic- Run
/jaan-to:qa-test-generateto generate test suites- Run
/jaan-to:devops-infra-scaffoldto generate deployment configs
Use AskUserQuestion:
If "Learn from this": Run /jaan-to:learn-add dev-project-assemble "{feedback}"
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/dev-project-assemble-reference.mdsection "Multi-Stack Assembly Rules" for Node.js/TypeScript, PHP/Laravel, and Go stack-specific assembly patterns.
.js extensions in ESMany types, loose module resolutiontech.md detection$JAAN_OUTPUTS_DIR pathnpx claudepluginhub parhumm/jaan-to --plugin jaan-toAutonomously generates complete production-ready projects from descriptions: structure, code, tests, docs, config, git. Orchestrates pipeline with verification to ensure builds and tests pass.
Generates production-ready backend code with routes, data models, service layers, and validation from API contracts, task breakdowns, and data models. Adapts to any tech stack.
Generates boilerplate for common project types (API, web app, CLI, library, monorepo) with best-practice defaults. Includes decision trees and stack selection matrices.