build: enable production build for Dokploy deploy

- build script usa --webpack (Next 16 default es Turbopack, incompatible con la config webpack de @remotion)
- tsconfig excluye remotion/ (subproyecto autocontenido con su propio tsconfig; rompía el type-check con un import faltante)
- Dockerfile de producción (build + next start) y .dockerignore que deja fuera projects/ y data/ (llegan por volúmenes)
- CLAUDE.md actualizado al estado real (SQLite, webpack, Ark, Remotion integrado)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Carlos Narro
2026-08-11 04:37:01 +02:00
parent 3aaffd7358
commit e93adc8d69
5 changed files with 77 additions and 2 deletions

16
.dockerignore Normal file
View File

@@ -0,0 +1,16 @@
.git
.next
node_modules
remotion/node_modules
# Datos persistentes: NO van en la imagen, llegan por volúmenes montados
projects
data
*.db
*.db-wal
*.db-shm
# Secretos y locales
.env*.local
CLAUDE.md
CONTEXT.md

35
CLAUDE.md Normal file
View File

@@ -0,0 +1,35 @@
# Story Studio
App **Next.js 16** (App Router) para crear series animadas infantiles asistidas por IA: wizard de 3 pasos (Idea Motriz → Personajes → Capítulos), y luego por capítulo: guión conductor → (pre)escaleta → prompts de imagen → fondos → imágenes de plano → vídeos → render final. Los metadatos se persisten en **SQLite** (`data/story-studio.db`); las imágenes y vídeos generados van en disco bajo `projects/{slug}/`.
> **`CONTEXT.md` tiene el detalle de arquitectura, pero está parcialmente desactualizado** (describe persistencia en markdown/JSON "sin BD" y Turbopack — ambas cosas ya no son ciertas). Para persistencia usa el modelo SQLite de `src/lib/db.ts` / `db-service.ts`; para el resto (Character Assets, convenciones, estructura) sigue siendo buena referencia. Si tocas algo estructural, corrige `CONTEXT.md` a la vez.
## Stack (resumen)
- Next.js 16.1.6 · React 19 · TailwindCSS 4 · Lucide React · react-markdown + remark-gfm
- LLM texto: OpenAI **GPT-4o** (`openai`) · LLM imágenes: Google **Gemini `gemini-3-pro-image-preview`** / Nano Banana Pro (`@google/genai`)
- Vídeo: **BytePlus Ark — Seedance 1.5 Pro** (`ARK_API_KEY`, `src/lib/video-service.ts`)
- Render final de vídeo: **Remotion integrado en este proyecto** (`@remotion/renderer` + `@remotion/bundler`, `src/lib/remotion-service.ts`, `POST /api/render`)
- Persistencia: **SQLite** (`better-sqlite3`, `data/story-studio.db`, WAL) — `src/lib/db.ts` (esquema) + `db-service.ts` (acceso). Imágenes/vídeos en disco bajo `projects/{slug}/`.
## Arranque
```
npm run dev # servidor de desarrollo (Next.js, webpack)
```
Requiere `.env.local` en **UTF-8 sin BOM** con `OPENAI_API_KEY`, `GEMINI_API_KEY` y `ARK_API_KEY` (si se guarda como UTF-16 LE, Next.js no lee las variables).
> **Nota para agentes:** si necesitas levantar el dev server (`npm run dev`), arráncalo en **segundo plano / detached**. En primer plano no termina nunca y **bloquea el turno**.
## Proyecto hermano
Existe también un proyecto Remotion independiente en `../vibecoding/`. El render principal de Story Studio ya vive **dentro** de este repo (ver `remotion-service.ts` / `/api/render`).
<!-- orquestrator:org:story-studio:start -->
## Tu rol en el equipo
> Sección gestionada por el proyecto `orquestrator` (workspace «Essia»). No editar a mano: se regenera al cambiar el organigrama.
Eres **experto** de este proyecto dentro del workspace «Essia».
<!-- orquestrator:org:story-studio:end -->

24
Dockerfile Normal file
View File

@@ -0,0 +1,24 @@
FROM node:22-slim
# Toolchain para módulos nativos (better-sqlite3) y clonado de deps
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 make g++ git \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm install --production=false
COPY . .
RUN npm run build
ENV PORT=3000
ENV NODE_ENV=production
EXPOSE 3000
# Los datos persistentes (SQLite + imágenes/vídeos) llegan por volúmenes
# montados en /app/data y /app/projects (ver mounts de Dokploy).
CMD ["npm", "start"]

View File

@@ -4,7 +4,7 @@
"private": true,
"scripts": {
"dev": "next dev --webpack",
"build": "next build",
"build": "next build --webpack",
"start": "next start",
"lint": "eslint"
},

View File

@@ -30,5 +30,5 @@
".next/dev/types/**/*.ts",
"**/*.mts"
],
"exclude": ["node_modules"]
"exclude": ["node_modules", "remotion"]
}