# Cómo encender la nube con tu PostgreSQL

Esta guía levanta la Fase 1 (cuentas + tus proyectos en tu base) usando **tu PostgreSQL**, **DBeaver** para administrarlo y un **servidor Node** que hace de puente. Todo corre en tu máquina.

## Lo que vas a tener

```
servidor (Node + Express)  ──►  tu PostgreSQL
        │
        └─ sirve también la herramienta web en el navegador
```

El navegador habla con el servidor por HTTP; el servidor habla con Postgres. DBeaver lo usás para crear la base, correr el esquema y mirar los datos cuando quieras.

## Requisitos

- **Node.js** 18 o superior (`node --version` para chequear).
- Tu **PostgreSQL** corriendo, y **DBeaver** conectado a él.

## Pasos

**1. Creá la base.** En DBeaver, sobre tu servidor PostgreSQL, creá una base nueva, por ejemplo `mesa`.

**2. Corré el esquema.** Abrí `db/schema.sql` en DBeaver (SQL Editor), apuntando a la base `mesa`, y ejecutalo. Crea las tablas `app_users` y `projects`. Refrescá y deberías verlas.

**3. Armá la carpeta del servidor** con esta estructura:

```
server/
  server.js
  package.json
  .env              ← lo creás vos (paso 4)
  public/
    index.html      ← acá va la herramienta (paso 5)
```

**4. Configurá el `.env`.** Copiá `server/.env.example` como `server/.env` y completá:

```
DATABASE_URL=postgres://USUARIO:CONTRASEÑA@localhost:5432/mesa
JWT_SECRET=una-cadena-larga-aleatoria-y-secreta
PORT=3000
```

`DATABASE_URL` es la misma conexión que usás en DBeaver (usuario, contraseña, host, puerto y nombre de base). Para `JWT_SECRET` poné cualquier cadena larga al azar.

**5. Colocá la herramienta.** Copiá `mesa-de-inversiones.html` dentro de `server/public/` y renombralo a **`index.html`**. Así la web y la API quedan en el mismo origen y no hay que configurar nada en el navegador.

**6. Instalá y arrancá.** En una terminal, dentro de `server/`:

```
npm install
npm start
```

Si todo está bien, vas a ver: `Mesa de Inversiones — API y web en http://localhost:3000`.

**7. Usala.** Abrí **http://localhost:3000** en el navegador. Tocá el botón **Nube**, creá tu cuenta y listo: tus proyectos empiezan a guardarse en tu Postgres. Para comprobarlo, en DBeaver hacé `select email from app_users;` y `select local_id, name from projects;`.

## Comprobaciones rápidas

- `http://localhost:3000/api/health` debe responder `{"ok":true}`. Si dice error de base, revisá `DATABASE_URL`.
- En DBeaver, después de crear la cuenta y un proyecto, las filas tienen que aparecer en `app_users` y `projects`.

## Si abrís la herramienta como archivo suelto

Si en vez de usar `http://localhost:3000` abrís el `.html` con doble clic (origen `file://`), el botón Nube te va a pedir la **dirección del servidor**: poné `http://localhost:3000`. Funciona igual (el servidor ya permite ese acceso en modo desarrollo), pero lo recomendado es usar la dirección del servidor.

## Notas de seguridad y operación

- **Contraseñas:** se guardan siempre *hasheadas* (bcrypt), nunca en texto plano.
- **Aislamiento:** cada consulta filtra por el usuario del token; un usuario no puede ver ni tocar proyectos de otro. (Probado.)
- **CORS abierto:** el servidor acepta pedidos de cualquier origen para que el desarrollo sea cómodo. Si algún día lo publicás en internet, conviene restringirlo y servirlo por **HTTPS**.
- **Backups:** como los datos viven en tu Postgres, respaldás con tus herramientas de siempre (o exportando desde DBeaver).
- **Salir de localhost:** para que otras personas accedan desde afuera (lo que habilita de verdad el multiusuario), el servidor tiene que correr en una máquina accesible por internet, con dominio y HTTPS. Es el paso de "servicio" del que hablamos: ya no es solo tu máquina.

## Qué reemplaza esto

Esta instalación auto-alojada reemplaza a Supabase. El archivo `supabase-setup.sql` de la etapa anterior **ya no se usa**; en su lugar va `db/schema.sql`. Los conceptos del documento `arquitectura-multiusuario.md` (modelo de datos, seguridad por usuario, fases) siguen valiendo: lo que allí hacía Supabase, acá lo hace tu servidor Node.
