millaguie 694c3b6a88
CI/CD Pipeline / test (pull_request) Successful in 21s
CI/CD Pipeline / build-and-push (pull_request) Has been skipped
build(deps): combined major bumps (web react19/vite8/router7, server fastify/drizzle)
Combina los bumps de Renovate abiertos en 1 PR (1 pasada de CI):
web: react 18→19, react-dom 18→19, react-router-dom 6→7, @dnd-kit/sortable 9→10,
  @vitejs/plugin-react 4→6, vite 6→8, @types/react 18→19
server: @fastify/cors 10→11, @fastify/static 8→9, drizzle-orm 0.36→0.45, drizzle-kit 0.28→0.31, vitest 2→4

EXCLUIDO typescript v6 (#6): salto 5→6 rompe tsc, queda como duda.
Verificado local (node:24): server 'tsc' OK; web 'tsc && vite build' OK. Sin cambios de código.
Sustituye PRs #1,#2,#3,#4,#7,#8,#9,#11,#12,#13.
2026-06-27 20:24:40 +02:00

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

# 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.

S
Description
Sternboard - free retro board, no signup (retrotool-style clone)
Readme
285 KiB
Languages
TypeScript 88.3%
CSS 11.1%
Dockerfile 0.4%
HTML 0.2%