Sternboard: free retro board, no signup (initial)
Servidor Fastify + Socket.IO + Drizzle/Postgres; front Vite+React (EN/ES, tema claro/oscuro). Tableros por columnas con plantillas, notas privadas/públicas, agrupación, votos configurables (multivoto), timer compartido con alarma, fases, action items, export Markdown/JSON e import, autodestrucción, gestión de columnas. Imagen única (front servido por el servidor) y CI que la construye y publica.
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Sternboard
|
||||
|
||||
> En náutica, un barco *makes a sternboard* cuando avanza hacia **atrás**, popa
|
||||
> primero. Eso es una retro: mirar atrás para seguir adelante. _stern_ (atrás) +
|
||||
> _board_ (tablero).
|
||||
|
||||
Clon libre de retro board, sin registro. Tableros por columnas con plantillas,
|
||||
revelación de notas a demanda, timer compartido, votos configurables, action
|
||||
items y export a Markdown. Cada board puede tener un **temporizador de
|
||||
autodestrucción** elegido al crearlo.
|
||||
|
||||
## Arquitectura
|
||||
|
||||
- **Servidor autoritativo** (Fastify + Socket.IO). Una room de Socket.IO por
|
||||
board. El estado vive en Postgres (fuente de verdad) y se hidrata en memoria
|
||||
por room; cada acción escribe en DB y hace broadcast del estado al resto.
|
||||
- **Identidad sin login**: el board es un slug no adivinable en la URL. Al entrar
|
||||
se pide nombre (obligatorio) y se genera un `participantId` (UUID) guardado en
|
||||
`localStorage`. El creador recibe un `moderatorToken`.
|
||||
- **Autodestrucción**: `boards.expires_at` se fija al crear; un job borra los
|
||||
expirados y el front muestra la cuenta atrás.
|
||||
|
||||
```
|
||||
web/ Vite + React + TS (UI del board)
|
||||
server/ Fastify + Socket.IO + Drizzle (Postgres)
|
||||
```
|
||||
|
||||
## Arrancar en local
|
||||
|
||||
```bash
|
||||
# 1. Levanta Postgres
|
||||
docker compose up -d db
|
||||
|
||||
# 2. Servidor
|
||||
cd server
|
||||
cp .env.example .env
|
||||
npm install
|
||||
npm run db:push # crea las tablas
|
||||
npm run dev # http://localhost:3001
|
||||
|
||||
# 3. Front (otra terminal)
|
||||
cd web
|
||||
npm install
|
||||
npm run dev # http://localhost:5173
|
||||
```
|
||||
|
||||
O todo en contenedores: `docker compose up --build`.
|
||||
|
||||
## Protocolo Socket.IO
|
||||
|
||||
Cliente → servidor: `board:join`, `note:add`, `note:update`, `note:delete`,
|
||||
`note:move`, `vote:toggle`, `board:reveal`, `board:phase`, `timer:start`,
|
||||
`timer:stop`, `actionitem:add`, `actionitem:update`, `actionitem:delete`.
|
||||
|
||||
Servidor → cliente: `board:state` (estado completo), `error`.
|
||||
Reference in New Issue
Block a user