Game · Three.js · Side Project · 2026

Driftway

Una nave, cinco sectores, una regla: no pares. Arcade 3D jugable directamente en el navegador — teclado, mouse, touch, gamepad o remoto de Smart TV. Un solo archivo HTML, sin build pipeline.

Jugar Driftway ↗ Privacidad Código ↗
Rol
Director creativo · Developer
Stack
Three.js r128 · Vanilla JS · Supabase
Año
2026
Estado
Shipped · buenhombre.design/driftway
Driftway — arcade 3D en el navegador
Contexto

Un juego en el portafolio de un Lead Designer.

Driftway no es un trabajo cliente ni un demo técnico. Es un ejercicio para probar lo contrario de lo que normalmente diseño: un producto sin usuario target, sin brief, sin KPI de negocio. La restricción fue construir algo que se cargue instantáneo, se juegue sin tutorial y funcione en cualquier pantalla — desde el celular en el bus hasta un Smart TV con el remoto. Three.js sobre un solo HTML, Supabase para ranking, sin dependencias que instalar.

Más contexto · por qué un side project de juego

Un juego obliga a resolver game feel, un problema que no aparece en productos B2B: cómo se siente mover la nave, qué tanto responde el input, cuándo acelera, cuándo frena. Trabajar esto directamente — sin PM, sin research, sin discovery — es gimnasia pura de criterio de producto. Si no se siente bien, no hay excusa que valga: el jugador cierra la pestaña.

Decisión · 01

Un solo archivo, cero build pipeline.

Rechazo deliberado del stack moderno: no hay React, no hay Vite, no hay bundler. Solo index.html, three.min.js y una carpeta audio/. El juego se carga de un deploy a GitHub Pages y arranca sin tocar nada más. La restricción fuerza a escribir código legible, no herramientas sobre herramientas.

Más detalle · estructura del archivo
  • index.html — todo el juego: estilos, lógica de nave, sectores, interfaz y ranking.
  • three.min.js — Three.js r128 pineado localmente, sin CDN que caiga.
  • audio/ — música y SFX en MP3.
  • privacidad.html — aviso Ley 1581 de 2012 + RGPD.
  • supabase/schema.sql — tablas, vistas y funciones del backend. Pegar en Supabase y correr.
Decisión · 02

Cinco sectores con mecánica distinta.

La estructura no es un túnel infinito. Son cinco sectores con lógica propia y escalamiento de dificultad. Entre sectores hay transición visual, no cortes abruptos. En el sector 5 se desbloquea disparo. El cambio de mecánica mantiene la atención sin agregar botones nuevos: la misma tecla hace cosas distintas según el sector.

01
Entrada
Giro + turbo. Aprender la nave.
02
Densidad
Más obstáculos. Pide reflejos.
03
Ritmo
Patrones. Pide lectura.
04
Caos
Mezcla. Pide decisión rápida.
05
Final
Se desbloquea disparo.
Decisión · 03

Multi-input: lo mismo con teclado, touch, mando o remoto de TV.

El juego detecta el entorno y adapta controles. En Smart TV se dibuja a 1280 px con 3% de margen para evitar overscan. El gamepad soporta Xbox, PlayStation y genéricos Bluetooth. En touch, dos y tres dedos escalan el turbo. El mismo diseño sirve en todos lados.

⌨
Teclado + mouse
WASD / flechas · click
◉
Touch
Drag · 2 y 3 dedos turbo
▣
Gamepad
Xbox · PS · Bluetooth
⌧
Smart TV
Remoto · OK hold = turbo
Más detalle · atajos y debug

URLs mágicas para iterar sin jugar: #nivel2…#nivel5 arrancan en un sector específico, #victoria va directo al final, #menu salta la pantalla de arranque, #bn conmuta a blanco y negro para ver sombras. ?lang=en o ?lang=es fuerzan idioma; por defecto detecta el navegador.

Decisión · 04

Backend mínimo: Supabase hace lo justo.

Tres tablas: visitas, pilotos, partidas. El contador suma por navegador (localStorage), no por sesión — el número se acerca a personas. El ranking agrupa por piloto y muestra la mejor partida. Los emails son opcionales y nunca se exponen al cliente: la clave publishable solo puede insertar y leer el ranking, no leer correos.

Más detalle · seguridad y privacidad

La clave service_role jamás vive en el repo. Las RLS policies de Supabase se escriben para que la clave pública pueda: contar visitas, insertar pilotos, insertar partidas, leer el ranking. Nada más. El aviso de privacidad en driftway/privacidad.html cumple Ley 1581 de 2012 (Colombia) + RGPD; el contacto es hola@buenhombre.design.

Specs

Tech stack · un vistazo.

RenderThree.js r128
LenguajeVanilla JS · ES6+
BackendSupabase · SQL + RLS
HostingGitHub Pages
Peso~2.5 MB total con audio
BuildNinguno · git push
AudioWeb Audio API · MP3
i18nES / EN · auto-detect
Aprendizajes transferibles
Live · buenhombre.design/driftway

Carga en 2 segundos.
Jugá un sector.

No requiere registro ni instalar nada. Funciona desde el celular, el notebook, un Smart TV o un control de PlayStation. Si te enganchás, guardá tu puntaje en el ranking.

Jugar Driftway ↗
Siguiente proyecto
Traceline Time trial blueprint · Three.js · En desarrollo · 2026