---
id: 0006
title: Sistema de proyectos dentro de la app — subcarpetas + switcher
status: completed
priority: high
created: 2026-04-30
completed: 2026-04-30
---

## Objetivo

Cada "proyecto" es una subcarpeta junto al exe que contiene su propio
`operations.db`, `types.yaml` y `graph_explorer.db` (layouts). El usuario
crea proyectos, los nombra, y conmuta entre ellos sin reiniciar la app.
Esto es lo que va a permitir guardar muchos datos separados por caso/tema
sin acumularlos en un solo grafo.

Independiente del concepto de "project" del registry (`projects/` raiz
del repo) — aqui es organizativo, dentro de la app desplegada.

## Layout en disco (junto al exe)

```
graph_explorer.exe
graph_explorer.ini             # estado global: ultimo proyecto abierto, recientes
projects/
  default/
    operations.db
    types.yaml                 # copia editable; semilla = examples/types.yaml
    graph_explorer.db          # layouts de este proyecto
    notes/                     # opcional, .md sueltos
  caso_aurgi/
    operations.db
    types.yaml
    graph_explorer.db
  osint_demo/
    ...
```

## UI

- Menu "Project" en la menubar:
  - `New...` (input de nombre, valida slug, crea carpeta + semilla types.yaml + operations.db vacio con schema migrado).
  - `Open...` (combo con los proyectos detectados en `./projects/`).
  - `Recent` (lista los ultimos 5 desde `graph_explorer.ini`).
  - `Reveal in explorer` (abre la carpeta del proyecto activo).
- Title bar muestra `graph_explorer — <proyecto activo>`.
- Switch de proyecto: cierra BDs, limpia grafo + viewport, abre nuevas BDs, hace reload.

## Cambios en codigo

- `main.cpp`:
  - Resolver paths a traves de `g_active_project` en vez de `./operations.db` y `./graph_explorer.db` directos.
  - Modo legacy: si arranca con `--input <path>` o positional, no usa proyecto (compatibilidad con flujo actual).
- `app_state` nuevo campo `string active_project_dir`.
- Nueva fn `project_create(name)` que escribe schema base de operations.db (entities/relations/...) — extraerlo de lo que ya hace el registry o copiar el DDL.
- `graph_explorer.ini` lee/escribe via `app_settings_*` ya existente.

## Migracion del flujo actual

- Al primer arranque sin `--input`, si no existe `./projects/`, crear `./projects/default/` y mover `./operations.db` + `./graph_explorer.db` ahi (si existen).
- Issues 0005/0007/0008 ya asumen este layout.

## Definicion de hecho

- Crear, abrir y conmutar proyectos sin reiniciar.
- Cada proyecto tiene su `operations.db`, `types.yaml`, `graph_explorer.db` aislados.
- "Recent" persiste entre sesiones via `graph_explorer.ini`.
- El layout (posiciones de nodos) es por-proyecto: cambiar de proyecto recupera las posiciones del nuevo, no las del anterior.
