CtrlK
BlogDocsLog inGet started
Tessl Logo

project-bootstrap

Entrevista profunda greenfield + decide stack (priorizando Luana: FastAPI + Next.js + Clerk + Postgres + Qdrant) + scaffold inicial + PROJECT-MAP. Para proyectos VACÍOS o casi vacíos. NO ejecutar en proyectos con código existente — usar /project-audit en su lugar. Activa cuando Chris dice: '/project-bootstrap', 'arrancamos proyecto nuevo', 'greenfield', 'desde cero', 'bootstrap proyecto', 'crear scaffold', 'iniciá proyecto'.

66

Quality

81%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

/project-bootstrap — Greenfield interview + stack decision + scaffold

Cuándo se usa: Chris arranca un proyecto completamente nuevo. Sin código, sin docs, solo idea. Cuándo NO se usa: proyecto con código existente — usar /project-audit.

Filosofía

  1. Entrevista profunda batched — no decisions sin contexto. Defaults sensibles pero todo cuestionable.
  2. Stack default = Luana completo — FastAPI + Next.js + Clerk + Postgres + Qdrant. Razón: know-how transfer (Chris ya lo opera fluido). Divergir SOLO con razón explícita.
  3. Razonamiento exhibido — cada decisión técnica viene con "alternativa considerada + por qué descartada".
  4. Scaffold completo, no MVP — el método Luana se mete en el proyecto desde día 1.

Step 0 — Verify state

ROOT=$(pwd)
TRACKED=$(git ls-files 2>/dev/null | wc -l)
[ "$TRACKED" -gt 5 ] && {
  echo "⚠️ Proyecto NO está vacío ($TRACKED archivos tracked). Considera /project-audit en su lugar."
  echo "¿Continuar bootstrap igual (overwrite risk) o switch a /project-audit?"
  exit 1
}

# Verify cwd target
[ -d ".luana-method-cache" ] && KIT_PATH=".luana-method-cache/luana" || KIT_PATH="${LUANA_METHOD_PATH:-../luana-method/luana}"
[ -d "$KIT_PATH" ] && echo "Method kit found at $KIT_PATH" || echo "❌ Method kit not found. Set LUANA_METHOD_PATH env var or clone luana-method first."

Phase 1 — Discovery (batched questions)

Style: complete sentences, batched, wait response between batches.

Batch 1 — Producto y dominio (4 preguntas)

  1. ¿Qué problema resuelve el producto? (1-3 frases)
  2. ¿Quién es el user primario? (rol + contexto)
  3. ¿Dominio del negocio? (ecommerce / salud / fintech / edtech / B2B SaaS / agencia / interno / otro)
  4. ¿Bounded contexts identificables al toque? (módulos top-level que ves naturalmente — ej. "auth + catalog + cart + checkout + admin")

Batch 2 — Compliance y escala (4 preguntas)

  1. ¿Compliance constraints? (HIPAA / PCI-DSS / GDPR / SOX / ninguno / otro)
  2. ¿Escala esperada? (proof-of-concept / 10 tenants / 100-1k / 10k+ / hyperscale)
  3. ¿Multi-region desde día 1? (sí / no / maybe-later)
  4. ¿Latency-critical? (real-time SLA / batch OK / async OK)

Batch 3 — Stack preferences (4 preguntas)

  1. ¿Tenés know-how Luana stack (FastAPI+Next.js+Clerk+Postgres+Qdrant)? (sí default Luana / no necesito otro / mix)
  2. ¿Razones para divergir del stack Luana? (cliente exige Java / mobile nativo / específico — texto libre)
  3. ¿Realtime layer? (websockets / SSE / polling / ninguno)
  4. ¿LLM/agentic? (sí desde día 1 / maybe-later / no)

Batch 4 — UI complexity (4 preguntas)

  1. ¿UI es shell + dashboards (Luana-pattern) o algo disruptivo?
  2. ¿Design system específico cliente o Shadcn baseline funciona?
  3. ¿Mobile-first o desktop-first?
  4. ¿Marca/branding ya definido o lo iteramos? (logos, colores, tipografía)

Batch 5 — Team y workflow (4 preguntas)

  1. ¿Vas a trabajar solo o equipo? (solo / 2-3 / 4+)
  2. ¿Worktrees paralelos como Luana o single-tree default? (paralelos / single / no decidido aún)
  3. ¿CI/CD target? (GitHub Actions / GitLab CI / Bitbucket Pipelines / Drone / Jenkins / otro)
  4. ¿Deploy target? (Vercel / AWS / GCP / Cloudflare / Hetzner / self-hosted / otro)

Phase 2 — Tech decisions con razonamiento

Una vez recibidas todas las respuestas, presentar las decisiones agrupadas con racional explícito. Formato:

# Tech decisions — propuesta

## Decisión 1 — Runtime + framework backend
**Propuesta:** Python 3.12 + FastAPI async (Pydantic v2 + SQLAlchemy 2.0 async)
**Por qué:**
- Alineado con Luana know-how → transfer learning inmediato
- Async-first nativo (importante para LLM/agentic Phase 1 Batch 3)
- Type hints + Pydantic v2 maduros (rigor type-safe sin TS server-side)
- ORM SQLA 2.0 con async ergonómico
**Alternativa considerada:** NestJS (TS unificado FE+BE)
**Descartada porque:** {razón basada en Phase 1 respuestas — ej. "preferencia stack Luana confirmada en Batch 3.1"}

## Decisión 2 — Frontend
**Propuesta:** Next.js 16 App Router + React 19 + Shadcn UI + Tailwind CSS v4
**Por qué:**
- Server Components default = performance + SEO + bundle reduction
- Shadcn baseline cubre 90% UI sin reinventar (Phase 1 Batch 4.2)
- Tailwind v4 con tokens semantic (no hex hardcoded)
- App Router maduro 2026
**Alternativa considerada:** Vite SPA (más liviano, sin SSR)
**Descartada porque:** {razón}

## Decisión 3 — Auth
**Propuesta:** Clerk
**Por qué:**
- B2B SaaS-ready (Organizations cuando escale)
- Webhooks + JWT + middleware Next.js + FastAPI listos
- HIPAA-eligible (relevant si Phase 1 Batch 2.1 = HIPAA)
- Luana know-how (Phase 1 Batch 3.1)
**Alternativas consideradas:**
- Auth0 (caro a escala)
- Supabase Auth (acoplado a Supabase DB)
- Lucia / custom (esfuerzo + audit risk)
**Descartada(s) porque:** {razón}

## Decisión 4 — Database
**Propuesta:** PostgreSQL 16+ + Alembic migrations idempotentes
**Por qué:**
- JSONB rich (sirve para schema-flex en bounded contexts evolucionando)
- Async driver maduro (asyncpg)
- Luana know-how
**Alternativa:** PlanetScale (MySQL-compat) — descartada si needed pg features
**Vector DB (si LLM/agentic Phase 1 Batch 3.4):** Qdrant
**Cache layer:** Redis (sessions, rate-limit, queues)

## Decisión 5 — LLM provider (solo si agentic)
**Propuesta:** Anthropic Claude API con prompt caching (5min/1h TTL)
**Modelo routing:**
- Architect/auditor: Opus 4.7 (rigor + cost OK)
- Builder/synth: Sonnet 4.6 (balance)
- Reader/grep: Haiku 4.5 (cheap)
**Framework agentic:** LangGraph 2.0 + deepagents (SubAgentMiddleware isolation)
**Alternativa:** OpenAI GPT-4 + LangChain — descartada por prompt caching superior Anthropic + know-how Luana

## Decisión 6 — CI/CD
**Propuesta:** {match Phase 1 Batch 5.3}
**Workflows:** ci.yml (full gates) + ci-wip.yml (light) + cd-staging.yml + cd-prod.yml
**Triple-branch:** wip/{slug} → main (staging deploy) → release/vX.Y.Z (prod)
**Quality gates:** lint + arch fitness + tests + coverage + jscpd + interrogate + pip-audit

## Decisión 7 — Deploy target
**Propuesta:** {match Phase 1 Batch 5.4}
**Containerization:** Docker compose dev + Dockerfiles per service
**Production:** {depends — Vercel para FE + AWS/Fly.io para BE / Cloudflare para FE+workers / etc.}

## Decisión 8 — Worktrees + parallel sessions
**Propuesta:** {match Phase 1 Batch 5.2 — paralelos por default si Chris confirma}
**Topology:** PRINCIPAL (main) + CANÓNICO (wip/{slug} long-lived) + EFÍMERO (wip/{slug-story} por feature)
**Sync KISS:** scripts/git/sync-from-main.sh + scripts/git/check-sync.sh

## Decisión 9 — Testing strategy
**Propuesta:**
- BE: pytest + pytest-asyncio + coverage 43% threshold
- FE: Vitest (unit) + Playwright (E2E, Clerk testing token lifecycle)
- Arch fitness: tests/architecture/ ratchet (allowlists shrink-only)

## Decisión 10 — Observability + cost recording
**Propuesta:**
- structlog para BE logs (no print/logging)
- copilot_trace_event + copilot_llm_call tables (si agentic)
- pricing_snapshot_repository.py
- PII sanitization en payloads (sanitize_payload helper)
**Alternativa:** Sentry + Datadog APM — sumar en Phase 2 si scale lo amerita

---

Chris, ¿ratificás esta propuesta o ajustamos alguna decisión?

Loop hasta Chris ratifica todas las decisions. Captura overrides explícitos en notas.

Phase 3 — Scaffold filesystem

Una vez ratificado, ejecutar scaffold completo. Plantillas vienen del kit Luana en $KIT_PATH/init/.

KIT="$KIT_PATH"
PROJECT_NAME="${1:-$(basename $(pwd))}"

# 1. Backend scaffold (si stack incluye BE)
if [ "$BACKEND_LANG" = "python" ]; then
  mkdir -p backend/src/{modules,core,main.py}
  mkdir -p backend/{tests/{architecture,modules},alembic/versions}
  cp -r $KIT/init/backend-scaffold/python-fastapi/* backend/
fi

# 2. Frontend scaffold (si stack incluye FE)
if [ "$FRONTEND_FRAMEWORK" = "nextjs" ]; then
  mkdir -p frontend/src/{app,components/{ui,shared},features,lib,hooks}
  mkdir -p frontend/{e2e/{specs,fixtures,pages},public}
  cp -r $KIT/init/frontend-scaffold/nextjs/* frontend/
fi

# 3. Docs scaffold
mkdir -p docs/{product/{outcomes,stories,capabilities,modules},architecture/ADR,domains,learnings,process,specs/templates,rules-detail,archive}
cp -r $KIT/docs/specs/templates/* docs/specs/templates/
cp -r $KIT/docs/rules-detail/* docs/rules-detail/
cp -r $KIT/docs/process/* docs/process/
cp $KIT/docs/architecture/ADR/* docs/architecture/ADR/

# 4. Claude scaffold
cp -r $KIT/claude/. .claude/

# 5. Scripts
cp -r $KIT/scripts/. scripts/
chmod +x scripts/git/*.sh scripts/git-hooks/*

# 6. Root files (templates con placeholders interpolados)
sed "s/{PROJECT_NAME}/$PROJECT_NAME/g" $KIT/init/root-files/CLAUDE.md.template > CLAUDE.md
sed "s/{PROJECT_NAME}/$PROJECT_NAME/g" $KIT/init/root-files/AGENTS.md.template > AGENTS.md
sed "s/{PROJECT_NAME}/$PROJECT_NAME/g" $KIT/init/root-files/Makefile.template > Makefile
sed "s/{PROJECT_NAME}/$PROJECT_NAME/g" $KIT/init/root-files/docker-compose.dev.yml.template > docker-compose.dev.yml
sed "s/{PROJECT_NAME}/$PROJECT_NAME/g" $KIT/init/root-files/pyproject.toml.template > pyproject.toml
sed "s/{PROJECT_NAME}/$PROJECT_NAME/g" $KIT/init/root-files/.env.dev.template > .env.dev.template
cp $KIT/init/root-files/.gitignore.template .gitignore

# 7. GitHub workflows
mkdir -p .github/workflows
cp $KIT/init/github-workflows/*.yml .github/workflows/

# 8. Initial git commit
git init 2>/dev/null
git add .
git commit -m "chore: bootstrap proyecto via /project-bootstrap (Luana method v0.1)"

# 9. Install hooks
ln -sf $(pwd)/scripts/git-hooks/pre-commit .git/hooks/pre-commit
ln -sf $(pwd)/scripts/git-hooks/pre-push .git/hooks/pre-push 2>/dev/null

# 10. Bootstrap deps
[ -f pyproject.toml ] && uv sync
[ -f package.json ] && pnpm install

echo "✅ Scaffold complete. Próximo paso: /pm para crear primer outcome."

Phase 4 — PROJECT-MAP inicial

Genera docs/PROJECT-MAP.md con scaffold inicial:

# PROJECT-MAP.md

> Auto-gen via `python scripts/generate_project_map.py`. NO editar manual.
> Last regen: {date}

## Overview

- **Project:** {PROJECT_NAME}
- **Stack:** {detected from Phase 2 decisions}
- **Topology:** {DDD modular BE + FSD-Lite FE}
- **Phase:** bootstrap
- **Last touched:** {today}
- **Method version:** Luana method v0.1

## Architecture snapshot

{PROJECT_NAME}/ ├── backend/ ← FastAPI async + SQLA 2.0 + Pydantic v2 │ ├── src/ │ │ ├── main.py ← FastAPI app (redirect_slashes=False) │ │ ├── core/ ← config, db, deps, middleware │ │ └── modules/ ← DDD modules (vacío — primer outcome lo poblará) │ └── tests/ ├── frontend/ ← Next.js 16 + Shadcn + Tailwind v4 + FSD-Lite │ ├── src/ │ │ ├── app/ ← App Router │ │ ├── components/ ← ui + shared │ │ ├── features/ ← FSD-Lite (vacío) │ │ └── lib/ │ └── e2e/ ├── docs/ │ ├── product/ ← outcomes + stories + capabilities + modules │ ├── architecture/ ← ADRs │ ├── domains/ ← tools/workflows registry (agentic) │ ├── learnings/ │ └── PROJECT-MAP.md ├── scripts/ ├── .claude/ └── docker-compose.dev.yml

## Modules

(vacío — primer outcome lo poblará via /pm → /po-ux → /architect → /dev-team)

## Active stories

(ninguna — /pm te ayuda a crear la primera)

## Conventions (target, no checked yet)

- Tenant isolation: pattern definido en `.claude/rules/tenant-isolation.md`
- DDD layering: ratchet en `backend/tests/architecture/` (cuando primer módulo nazca)
- FSD boundaries: ratchet en `frontend/src/__tests__/architecture/`
- Tests coverage targets: BE 43%, FE 20%
- Spanish neutro UI: opt-in via pre-commit hook
- Conventional Commits: ✅

Phase 5 — Handoff a /pm

Spawn /pm skill via Skill tool inline:

{ skill: "pm", args: "" }

Con mensaje al user:

✅ Bootstrap complete.

Scaffold creado:
- backend/ (FastAPI + SQLA + DDD)
- frontend/ (Next.js + Shadcn + FSD-Lite)
- docs/ (story-folder schema + ADRs)
- .claude/ (skills + rules + agents + hooks)
- scripts/ (git + git-hooks + generators)
- .github/workflows/ (CI/CD)

Tech stack ratificado:
{stack summary}

Próximo paso: spawn /pm para crear primer outcome.
{Skill invocation inline}

Anti-patterns

  • ❌ Asumir stack sin entrevista (Phase 1 es OBLIGATORIO)
  • ❌ Stack override silent — TODA divergencia del default Luana requiere razón explícita en Phase 2 racional
  • ❌ Scaffold sin git init + initial commit (rompe worktree workflow después)
  • ❌ Skip Phase 4 (PROJECT-MAP inicial) — /pm necesita ese archivo en bootstrap
  • ❌ Auto-launch /pm sin handoff Phase 5 explícito
  • ❌ Scaffold un MVP — el método Luana completo se mete desde día 1 (Chris pidió: "completo, no MVP")

Cost guardrails

Phase 1 (entrevista): Opus 4.7 — judgment-heavy. Phase 2 (decisions): Opus 4.7 — razonamiento técnico. Phase 3 (scaffold): Haiku 4.5 — bash execution. Phase 4 (PROJECT-MAP): Haiku 4.5 — templating.

Total: ~40-60k tokens. Caro pero one-shot por proyecto.

Referencias

  • .claude/skills/project-audit/SKILL.md — el complemento (legacy adoption)
  • .claude/skills/pm/SKILL.md — destino post-bootstrap
  • init/backend-scaffold/, init/frontend-scaffold/, init/root-files/ — templates fuente
  • docs/process/paradigm-v4.md — método que el scaffold instala
  • docs/architecture/ADR/ — ADRs del método (worktree-policy, paradigm-v4.1, etc.)
Repository
alpacapurpura/luana-method
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.