# PROMPT FASE 0 — Setup del proyecto Innovium

> Pega este prompt completo (desde la siguiente línea hasta el final) en Claude Code, en la raíz del proyecto vacío `innovium-v2/` que ya tiene `design-kit/` adentro.

---

Hola Claude. Vamos a hacer la **Fase 0 del proyecto Innovium**. Soy Ricci de Crono Systems, Santiago, Chile.

## Contexto

El proyecto está empezando desde cero. Antes de tocar nada, lee en este orden:

1. `CLAUDE.md` (raíz) — contexto permanente del proyecto. Si no existe todavía, te lo paso al final de este mensaje, créalo primero.
2. `docs/ARQUITECTURA.md` (si no existe, ídem).
3. `design-kit/DESIGN_SYSTEM.md` — fuente de verdad visual.
4. `design-kit/tailwind.config.js` y `design-kit/theme.css` — tokens listos.
5. Los SVG de mockups en `design-kit/mockups/` — al menos abre `v2_login.svg` y `v2_dashboard.svg` para ver la estética.

**No empieces a crear archivos hasta haber leído todo lo anterior.**

## Objetivo de Fase 0

Dejar el esqueleto del proyecto listo para empezar a construir features en Fase 1. **Nada de lógica de negocio todavía** — solo plomería.

## Tareas (en orden)

### 1. Estructura de carpetas

Crear toda la estructura definida en `CLAUDE.md` sección "Estructura del proyecto". Cada carpeta vacía con un `.gitkeep` vacío.

### 2. Composer y package.json

```bash
# composer.json
- PHP 8.2+
- Autoload PSR-4: App\\ → app/
- Dependencias mínimas:
  - aws/aws-sdk-php (para R2)
  - mpdf/mpdf (para PDFs)
  - phpmailer/phpmailer (mailer)
  - vlucas/phpdotenv (para .env)
  - ramsey/uuid
  - phpunit/phpunit (require-dev)
  - phpstan/phpstan (require-dev, level 6)
- Scripts útiles: test, stan, serve

# package.json
- tailwindcss + autoprefixer + postcss
- alpinejs
- lucide (iconos como SVG)
- apexcharts
- Scripts:
  - "dev": tailwindcss watch
  - "build": tailwindcss minify
```

Después de crearlos: ejecutar `composer install` y `npm install`. Verificar que ambos terminan sin errores.

### 3. Tailwind y CSS

- `tailwind.config.js` en la raíz que **extiende** `design-kit/tailwind.config.js` (require + spread). Especificar `content` apuntando a `app/Views/**/*.php`, `resources/views/**/*.php`, `resources/js/**/*.js`.
- `postcss.config.js` con tailwindcss + autoprefixer.
- `resources/css/input.css` que importa `design-kit/theme.css` y declara `@tailwind base; @tailwind components; @tailwind utilities;`.
- Asegurarse que `npm run build` genera `public/assets/css/app.css` correctamente.

### 4. Config y .env

- Copiar `design-kit/.env.example` a la raíz como `.env.example` (si no existe ya).
- Crear `.env` local con valores de desarrollo.
- `.gitignore` ya existe en la raíz (lo creé previamente).
- `app/Core/Config.php` — clase singleton que carga `.env` con phpdotenv y expone `Config::get('clave', 'default')`.
- `bootstrap.php` en raíz que: carga autoload, carga .env, instancia Container, instancia Router. Lo importa `public/index.php`.

### 5. Front controller mínimo

`public/index.php`:

```php
<?php
declare(strict_types=1);

require __DIR__ . '/../bootstrap.php';

use App\Core\Container;
use App\Core\Router;
use App\Core\Request;

$request = Request::fromGlobals();
$container = Container::instance();

$router = $container->get(Router::class);
$response = $router->dispatch($request);
$response->send();
```

### 6. Componentes Core esqueleto

Crear las clases en `app/Core/` con métodos firmados pero implementación mínima (solo lo necesario para que un "Hello World" funcione):

- `Container.php` — DI minimalista: bind/get/singleton.
- `Router.php` — `get($path, $handler)`, `post(...)`, `dispatch($request)`.
- `Request.php` — wrapper de `$_SERVER`/`$_GET`/`$_POST`/`$_FILES`. Métodos: `method()`, `path()`, `host()`, `input($key)`, `all()`.
- `Response.php` — `status()`, `header()`, `body()`, `send()`. Helpers: `Response::view()`, `Response::json()`, `Response::redirect()`.
- `Config.php` — ya descrito.
- `Database.php` — esqueleto, solo método `master()` que devuelve PDO a BD maestra. `tenant()` se implementa en Fase 1.
- `View.php` — `View::render($template, $data = [])` con templates PHP planos. Layout system simple con `@extends` y `@section` (puedes inventar tu sintaxis o usar buffers nativos PHP).

**No implementar TenantResolver, Auth, Csrf, Storage en Fase 0. Esos son Fase 1.**

### 7. Ruta de prueba

Crear una ruta `GET /` que renderice una vista `welcome.php` mostrando:

- Wordmark "Innovium" en Georgia gigante con gradient (replicar estilo de la portada).
- Mensaje "Fase 0 completada · listo para construir."
- Versión PHP, versión de la app, environment.
- Estilo dark mode con mesh gradient (usar `bg-mesh-hero` del theme.css).

Esta vista valida visualmente que Tailwind compila bien y que los tokens del design system están funcionando.

### 8. Script CLI

`scripts/innovium` (sin extensión, ejecutable con shebang `#!/usr/bin/env php`):

Comandos iniciales:
- `innovium serve` — levanta `php -S localhost:8000 -t public`.
- `innovium key:generate` — genera APP_KEY aleatoria y la escribe a `.env`.
- `innovium make:migration <name> <type=master|tenant>` — crea archivo `database/migrations/{type}/NNNN_<name>.sql` con timestamp.

Otros comandos (`tenant:create`, `migrate`, etc.) son Fase 1.

### 9. Git inicial

- `git init` si no está iniciado.
- Verificar que `.env`, `vendor/`, `node_modules/`, `public/assets/css/*.css` están en `.gitignore`.
- Primer commit: `chore: setup inicial del proyecto Innovium`.

### 10. README.md

Un README en la raíz con:
- Descripción del proyecto en 2 líneas.
- Requisitos (PHP 8.2+, MySQL 8, Node 20+, Composer 2).
- Pasos para levantar localmente (clone, copy .env, composer install, npm install, npm run build, scripts/innovium serve).
- Link a `docs/ARQUITECTURA.md`, `design-kit/DESIGN_SYSTEM.md`, `CLAUDE.md`.

## Validación final de Fase 0

Cuando termines, debe pasar esta checklist:

- [ ] `composer install` corre sin errores.
- [ ] `npm install` corre sin errores.
- [ ] `npm run build` genera `public/assets/css/app.css` con los tokens del design system.
- [ ] `scripts/innovium serve` levanta el server.
- [ ] `http://localhost:8000` muestra la pantalla welcome con el wordmark Innovium en gradient sobre fondo mesh dark, sin errores PHP.
- [ ] No hay errores en consola del navegador.
- [ ] `git log` muestra commit inicial limpio.
- [ ] Estructura de carpetas matches con `CLAUDE.md`.

## Cómo trabajar conmigo

- Trabaja en pasos. Después de cada paso grande, muéstrame qué hiciste y pídeme confirmar antes de seguir.
- Si dudas sobre arquitectura, seguridad o estética: **pregunta**.
- Commits atómicos en español con prefijo: `chore:`, `feat:`, `style:`, `docs:`.
- No instales librerías que no estén en la lista de arriba sin preguntar primero.
- Cuando termines y la welcome page se vea bien, hacé un commit final `chore: fase 0 completa` y avisame.

Empezá leyendo los archivos del design-kit. Cuando termines de leer, confirmame estos 4 puntos antes de tocar nada:

1. ¿Confirmas que vas a usar **Georgia** (no Inter) para titulares display?
2. ¿Confirmas paleta exacta (purple `#7C3AED` primario, sin azules tipo `#3B82F6` ni grises Bootstrap)?
3. ¿Confirmas vanilla JS + Alpine, sin React/Vue ni component libraries?
4. ¿Tienes claro que en Fase 0 NO implementamos TenantResolver, Auth ni Storage — solo plomería?

Después de tu confirmación, arrancamos con la tarea 1.

¡Vamos! 🚀
