# Guía de desarrollo de Oasis

Esta carpeta documenta cómo está construido Oasis por dentro, para que puedas
entenderlo y extenderlo (por ejemplo, creando un **módulo de juegos** nuevo).

Está pensada para leerse en orden, pero cada archivo es autónomo.

## Índice

1. **[01-red-ssb.md](01-red-ssb.md)** — Cómo funciona Oasis **a nivel de red**:
   Secure Scuttlebutt (SSB), secret-stack, multiserver, muxrpc, EBT, blobs,
   federación P2P, puertos y cifrado.

2. **[02-arquitectura-software.md](02-arquitectura-software.md)** — La
   **arquitectura de software** del backend: el patrón MVC casero
   (models / views / backend.js), el stack de dependencias, el "cooler", el
   flujo de una petición y cómo se interrelacionan los archivos.

3. **[03-modulos-y-juegos.md](03-modulos-y-juegos.md)** — Cómo está construido
   el **módulo de juegos** actual y la anatomía de un módulo en general.

4. **[04-tutorial-modulo-desde-cero.md](04-tutorial-modulo-desde-cero.md)** —
   **Tutorial paso a paso** para crear un módulo nuevo desde cero (caso práctico:
   un módulo de juegos propio), con todos los puntos de integración.

5. **[05-mapa-funciones.txt](05-mapa-funciones.txt)** — **Gran mapa ASCII** de
   cómo se relacionan las funciones lógicas entre archivos, la persistencia
   (SSB) y la media (blobs).

## Conceptos en 30 segundos

Oasis es un **cliente web de Secure Scuttlebutt (SSB)**. SSB es un protocolo
social **P2P, distribuido y federado**: no hay servidor central; cada nodo tiene
una copia local de un *log append-only* firmado criptográficamente, y los nodos
se replican entre sí por *gossip*.

Oasis se compone de **dos procesos**:

```
  ┌─────────────────────────┐         ┌──────────────────────────┐
  │  SBOT (nodo de red SSB)  │ <─────> │  FRONTEND WEB (Koa/HTML)  │
  │  src/server/SSB_server   │  unix   │  src/backend/backend.js   │
  │  habla con otros peers   │  socket │  habla con tu navegador   │
  └─────────────────────────┘         └──────────────────────────┘
        puerto 8008 (SSB)                  puerto 3000 (HTTP)
```

- El **sbot** (`src/server/SSB_server.js`) es el nodo SSB: se conecta a otros
  peers, replica feeds, sirve y descarga blobs. → [01-red-ssb.md](01-red-ssb.md)
- El **frontend** (`src/backend/backend.js`) es un servidor HTTP en Koa que
  renderiza HTML puro (sin JS de navegador) y se conecta al sbot como **cliente
  muxrpc** por un socket Unix local. → [02-arquitectura-software.md](02-arquitectura-software.md)

El patrón para **cada funcionalidad** ("módulo") es siempre el mismo:

```
  navegador → backend.js (ruta) → *_model.js (lee/escribe SSB) → *_view.js (HTML) → navegador
```

> Las rutas, líneas y nombres citados en estos documentos corresponden a la
> versión 0.8.1 del código. Si editas el código, vuelve a comprobar los números
> de línea con `grep`.
