🇪🇸 Español — Este repositorio no es open source. Si su trabajo toma elementos notoriamente derivados de este proyecto, se requiere atribución expresa y visible a Crafter Station. El incumplimiento podrá dar lugar a la suspensión del acceso y a un señalamiento público por parte de la organización. Consulte la LICENCIA antes de copiar, forkear o desplegar cualquier parte de este código.
🇬🇧 English — This repository is not open source. If your work takes elements notoriously derived from this project, express and visible attribution to Crafter Station is required. Failure to comply may result in revoked access and a public statement from the organization. Review the LICENSE before copying, forking or deploying any part of this code.
Crafter Station — @crafter-station · crafterstation.com
Rompehielos de 5 minutos para el arranque de la hackathon. Cada participante abre su tarjeta 5×5, camina por la sala y firma casillas con el nombre de la gente que cumple cada condición. Está pensado sobre todo para quien llega solo y todavía no tiene equipo.
Mismo lenguaje visual que the-next-craft: monitor monocromo B&N, tipografía pixel PETSCII (Silkscreen) para titulares y labels, IBM Plex Mono para todo lo demás, script Borel para el wordmark, keycaps de marfil como CTAs y scanlines dentro de las "pantallas".
- Escribes tu nombre y presionas
RUN BINGO. El reloj arranca en ese momento. - Tocas una casilla: se abre el enunciado completo y una repregunta para que la conversación no se muera en el checkbox.
- Escribes el nombre de quien la cumple — ese nombre es la firma.
- A los 5 minutos la tarjeta se cierra sola. Gana quien tenga más casillas.
Reglas que están implementadas tal cual:
- Una persona puede cubrir varias casillas. No se bloquea, pero el marcador lleva la cuenta aparte de personas distintas, que es la métrica que de verdad mide el networking (y la que se muestra en el resumen final).
- Meta = cantidad de casillas en 5 minutos. Las líneas de 5 se detectan y se celebran (12 líneas posibles: 5 filas, 5 columnas, 2 diagonales), pero son un hito, no el criterio de victoria.
- 25 prompts distintos por tarjeta, elegidos de un pool de 48 con un RNG sembrado: dos personas paradas juntas casi nunca reciben la misma cuadrícula.
Todo suena a Commodore: ondas cuadradas cortas generadas con Web Audio en
src/lib/sfx.ts, sin un solo archivo de audio. Un listener
delegado hace que cualquier botón suene a tecla al pulsarse (pointerdown,
para que el sonido llegue con el dedo y no después), y encima van las voces con
significado: firmar una casilla sube dos notas, borrarla las baja, una línea de
5 dispara un arpegio y el 00:00 cierra con cuatro notas descendentes. El
AudioContext nace en el primer click, que es lo único que aceptan los
navegadores.
La música de fondo (public/BGM.mp3, loop de ~46s) acompaña solo la ronda:
entra con el mismo click de RUN BINGO — los navegadores no dejan sonar audio
sin un gesto previo — y se va en fade a los 5 minutos para dejarle la sala al
jingle de cierre y a los resultados. Se precarga desde la pantalla de inicio y
se pausa sola si el teléfono se guarda en el bolsillo (visibilitychange).
Todo, música y efectos, se apaga desde el SONIDO ON/OFF de la barra superior;
la preferencia queda guardada en el dispositivo.
Se juega caminando, con una mano y sin mirar mucho la pantalla, así que la versión móvil no es el desktop encogido:
- La tarjeta va de borde a borde y cada casilla es un poco más alta que ancha: más espacio para la etiqueta donde sobra alto y falta ancho.
- Debajo de 640px la casilla muestra solo la etiqueta PETSCII; el enunciado completo y la repregunta viven en el diálogo que se abre al tocarla.
- Ese diálogo es una hoja anclada abajo, al alcance del pulgar, con los botones a todo el ancho y respetando la barra de gestos. Desde 640px vuelve a ser un modal centrado.
- HUD en dos filas compactas (reloj + terminar, marcador a lo ancho) para no robarle pantalla a la tarjeta.
- Inputs a 16px (iOS no hace zoom al enfocar),
interactiveWidget: resizes-contentpara que el teclado no tape el campo, targets de 44px, vibración corta al marcar y sin rebote elástico al scrollear.
bun install
bun run dev # http://localhost:3000
bun run lint # biome
bun run buildSin base de datos ni backend: la partida vive en localStorage y el reloj se
calcula contra un timestamp absoluto (endsAt), así que bloquear el teléfono o
recargar en medio de la ronda no pierde la tarjeta ni regala segundos.
Vive en https://bingo.thenextcraft.crafter.run — VPS de Crafter Station
(Dokploy), desplegado como stack docker-compose desde main.
docker compose up --build # local, en http://localhost:3000La imagen es multi-stage: bun install + bun run build con
output: "standalone", y el runtime es un node:22-alpine que solo lleva
server.js y los estáticos. HOSTNAME=0.0.0.0 no es opcional: sin eso el
server escucha en 127.0.0.1 dentro del contenedor y Traefik responde 404.
Cada push a main se redespliega con vps compose redeploy <composeId>.
Todo está en src/lib/prompts.ts. Cada entrada tiene:
| Campo | Para qué sirve |
|---|---|
short |
Etiqueta PETSCII de la casilla (2–3 palabras). Es lo único legible en móvil. |
text |
El enunciado, se lee después de "encuentra a alguien que…". |
spark |
La repregunta que aparece al marcar, para estirar la conversación. |
La regla al agregar prompts: tienen que abrir conversación. "Que use TypeScript" se resuelve con un sí o un no; "que haya roto producción" obliga a contar la historia.
src/app/globals.css paleta y utilidades C64 (keycap, scanlines, grid)
src/lib/prompts.ts el pool de 48 prompts
src/lib/game.ts tarjeta, líneas, estadísticas, reloj
src/lib/use-bingo-game.ts estado + persistencia + cierre por tiempo
src/components/bingo/ start screen, HUD, tarjeta, diálogo, resultados
Proprietary — All Rights Reserved. See LICENSE.
This repo is not open source. Copying, forking, modifying, redistributing, deploying, or using it for commercial or non-commercial purposes is not allowed without prior written permission from Crafter Station (hello@crafterstation.com). Third-party material keeps its own license.
Este repo no es open source. Copiar, forkear, modificar, redistribuir, desplegar o usarlo con fines comerciales o no comerciales no está permitido sin permiso previo y por escrito de Crafter Station (hello@crafterstation.com). El material de terceros conserva su propia licencia.