{"id":50358702,"url":"https://github.com/fedeegmz/open-retro","last_synced_at":"2026-05-30T00:01:44.680Z","repository":{"id":343846505,"uuid":"1179230847","full_name":"fedeegmz/open-retro","owner":"fedeegmz","description":"Tablero de retrospectivas colaborativo en tiempo real. Crea una sala, comparte el ID y trabajen juntos desde cualquier lugar.","archived":false,"fork":false,"pushed_at":"2026-04-22T23:32:10.000Z","size":940,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-23T01:25:44.834Z","etag":null,"topics":["bun","elysiajs","monorepo","open-source","retrospectives","typescript","vue"],"latest_commit_sha":null,"homepage":"https://openretro.app/","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fedeegmz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-11T20:27:56.000Z","updated_at":"2026-04-22T23:32:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fedeegmz/open-retro","commit_stats":null,"previous_names":["fedeegmz/open-retro"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fedeegmz/open-retro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeegmz%2Fopen-retro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeegmz%2Fopen-retro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeegmz%2Fopen-retro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeegmz%2Fopen-retro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fedeegmz","download_url":"https://codeload.github.com/fedeegmz/open-retro/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeegmz%2Fopen-retro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33675019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","elysiajs","monorepo","open-source","retrospectives","typescript","vue"],"created_at":"2026-05-30T00:01:43.767Z","updated_at":"2026-05-30T00:01:44.675Z","avatar_url":"https://github.com/fedeegmz.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# open-retro\n\nHerramienta de retrospectiva colaborativa en tiempo real. Permite a equipos crear tableros compartidos donde agregar notas y agruparlas durante sesiones de retrospectiva.\n\n## Caracteristicas\n\n- Tableros en tiempo real sincronizados via WebSocket\n- Creacion y union a tableros con contrasena\n- Agregar, editar y eliminar notas\n- Agrupar notas en categorias\n- Reconexion automatica ante desconexiones\n\n## Estructura del proyecto\n\n```\nopen-retro/\n├── server/        # Servidor WebSocket (Bun + Elysia)\n├── shared/        # Tipos compartidos\n└── web-client/    # Frontend (Vue 3 + Vite)\n```\n\n## Docker\n\n### Levantar con Docker Compose\n\n```bash\ndocker compose up --build\n```\n\n- Servidor: `http://localhost:3001`\n- Cliente: `http://localhost:5173`\n\nLos cambios en `server/src/`, `web-client/src/` y `shared/` se reflejan automáticamente en los contenedores (hot reload).\n\n### Variable de entorno `ENVIRONMENT`\n\nCada servicio acepta la variable `ENVIRONMENT` para controlar el modo de ejecución:\n\n| Valor | Servidor | Cliente |\n|---|---|---|\n| `develop` (default) | `bun --watch src/server.ts` | `vite` dev server |\n| `production` | `bun src/server.ts` | `vite build` + `vite preview` |\n\nPara cambiar el modo, editar `docker-compose.yml`:\n\n```yaml\nenvironment:\n  ENVIRONMENT: \"production\"\n```\n\n### Configuración del Servidor\n\nEl servidor acepta las siguientes variables de entorno para su configuración:\n\n| Variable | Descripción | Valor por defecto |\n|---|---|---|\n| `PORT` | Puerto en el que corre el servidor | `3001` |\n| `CORS_ORIGINS` | Orígenes permitidos (separados por `;`) | `*` |\n| `SESSION_TIME_LIMIT` | Tiempo máximo en segundos para una sesión (vencimiento) | Sin límite |\n| `ADMIN_GRACE_SECONDS` | Tiempo de gracia en segundos tras el vencimiento antes de borrar datos | `60` |\n| `MAX_USERS_PER_SESSION` | Límite de usuarios conectados por tablero | Sin límite |\n\nEsto se puede configurar en el archivo `docker-compose.yml` bajo la sección `environment` del servicio `server`.\n\n### Limpiar contenedores y volúmenes\n\n```bash\ndocker compose down -v\n```\n\n---\n\n## Desarrollo\n\n### Configuracion inicial\n\nDesde la raiz del proyecto, instalar dependencias e instalar los git hooks:\n\n```bash\nnpm install\n```\n\nEl script `prepare` se ejecuta automaticamente e instala el pre-commit hook via `simple-git-hooks`.\n\n### Servidor\n\n```bash\ncd server\nbun run dev    # con hot reload\nbun run start  # sin watch\n```\n\n### Cliente web\n\n```bash\ncd web-client\nnpm run dev      # servidor de desarrollo\nnpm run build    # build de produccion\nnpm run lint     # linter (oxlint + eslint)\n```\n\n### Calidad de codigo\n\nLos scripts de formato y linting se ejecutan desde la raiz y cubren todos los packages:\n\n```bash\nnpm run format       # formatea server/, shared/ y web-client/src/\nnpm run lint         # oxlint sobre todos los packages\nnpm run lint:eslint  # eslint (Vue/TS) sobre web-client/\n```\n\nEl pre-commit hook corre automaticamente sobre los archivos staged en cada commit:\n\n1. `oxfmt` — formatea el archivo\n2. `oxlint --fix` — corrige errores de linting\n3. `eslint --fix` — corrige reglas Vue/TS (solo archivos en `web-client/src/`)\n\n## Como funciona\n\n1. El cliente se conecta al servidor ingresando la URL del servidor WebSocket.\n2. Crea o se une a un tablero con una contrasena.\n3. Todas las acciones (agregar/editar/eliminar notas y grupos) se sincronizan en tiempo real con todos los participantes del tablero.\n4. Al conectarse, el servidor envia el estado completo del tablero. Los tableros se eliminan de memoria cuando el ultimo cliente se desconecta.\n\n## Tecnologias\n\n- **Servidor**: [Bun](https://bun.sh), [Elysia](https://elysiajs.com)\n- **Cliente**: [Vue 3](https://vuejs.org), [Vite](https://vitejs.dev), TypeScript\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedeegmz%2Fopen-retro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffedeegmz%2Fopen-retro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedeegmz%2Fopen-retro/lists"}