Living product document covering: - Current features (Sandbox, SynthQuest, Mobile PWA) - 6-phase roadmap (monorepo → auth → sync → workshop → admin → payments) - Tech stack decisions (Fastify, PostgreSQL, Drizzle, JWT) - Design principles (offline-first, opt-in, mobile-first) - Success metrics per phase Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
150 lines
5.2 KiB
Markdown
150 lines
5.2 KiB
Markdown
# Reaktor — Product Document
|
|
|
|
## Vision
|
|
|
|
Reaktor es una plataforma web de sintesis modular que combina un **sandbox creativo** con un **sistema de aprendizaje gamificado (SynthQuest)**. La plataforma permitira a los usuarios crear, aprender, compartir y descubrir sonidos sintetizados.
|
|
|
|
---
|
|
|
|
## Producto Actual (v1 — Live)
|
|
|
|
### Sandbox Mode
|
|
- Sintetizador modular completo en el navegador (Tone.js)
|
|
- 15+ tipos de modulos: Oscillator, Filter, Envelope, VCA, LFO, Mixer, Sequencer, Piano Roll, Keyboard, Drum Pad, CV→Gate, Delay, Reverb, Distortion, Scope, Output, Noise
|
|
- Conexion visual de modulos con cables de audio/control/trigger
|
|
- Canvas con zoom, pan, grid
|
|
- Guardado/carga de presets (localStorage)
|
|
- Export/import de patches como JSON
|
|
- Demo Chiptune incluido
|
|
|
|
### SynthQuest (Game Mode)
|
|
- 12 mundos tematicos, 96 niveles progresivos
|
|
- Sistema de 3 estrellas por nivel
|
|
- Hints con penalizacion (max 2 estrellas)
|
|
- Boss levels por mundo
|
|
- Progreso persistente (localStorage)
|
|
|
|
### Mobile
|
|
- UI responsiva completa (bottom sheet, tab bar, touch panning, pinch zoom)
|
|
- Keyboard y Drum Pad a pantalla completa
|
|
- PWA instalable
|
|
|
|
---
|
|
|
|
## Roadmap
|
|
|
|
### Phase 0 — Estructura (monorepo)
|
|
**Objetivo:** Preparar la base tecnica para el backend sin romper nada.
|
|
|
|
- [ ] Reestructurar a monorepo (`packages/client` + `packages/server`)
|
|
- [ ] Actualizar Dockerfile (multi-stage: client build + server)
|
|
- [ ] Docker Compose con PostgreSQL
|
|
- [ ] Verificar que deploy funciona igual que antes
|
|
|
|
### Phase 1 — Usuarios y Auth
|
|
**Objetivo:** Sistema de cuentas de usuario.
|
|
|
|
- [ ] Backend API (Fastify + PostgreSQL + Drizzle ORM)
|
|
- [ ] Registro por email + password (argon2)
|
|
- [ ] Login con JWT (access token 15min + refresh cookie 30d)
|
|
- [ ] Perfil de usuario (username, avatar, bio)
|
|
- [ ] Roles: `user`, `premium`, `admin`
|
|
- [ ] UI: modal de login/registro en el frontend
|
|
- [ ] Auth context en React (user, isLoggedIn, role)
|
|
- [ ] OAuth con Google/GitHub (opcional, puede ir en Phase 1.5)
|
|
|
|
### Phase 2 — Sincronizacion de Datos
|
|
**Objetivo:** Los datos del usuario viajan con su cuenta, no con el dispositivo.
|
|
|
|
- [ ] Sync de presets a la nube (offline-first, localStorage primary)
|
|
- [ ] Sync de progreso de SynthQuest
|
|
- [ ] Merge inteligente: last-write-wins por timestamp
|
|
- [ ] Cola de sincronizacion offline (flush al reconectar)
|
|
- [ ] Multi-dispositivo: login en otro dispositivo y tener todo
|
|
|
|
### Phase 3 — Workshop / Comunidad
|
|
**Objetivo:** Compartir creaciones y descubrir sonidos de otros usuarios.
|
|
|
|
- [ ] Publicar patches con titulo, descripcion, tags
|
|
- [ ] Preview de audio (generado client-side con Tone.js Recorder)
|
|
- [ ] Galeria publica: buscar, filtrar por tags, ordenar (popular/reciente)
|
|
- [ ] Sistema de likes/favoritos
|
|
- [ ] Cargar patch compartido directamente en el Sandbox
|
|
- [ ] Perfil publico de usuario con sus patches compartidos
|
|
- [ ] Comentarios en patches (v2, opcional)
|
|
|
|
### Phase 4 — Panel de Administracion
|
|
**Objetivo:** Control total sobre la plataforma.
|
|
|
|
- [ ] Dashboard con KPIs:
|
|
- Usuarios totales, DAU, MAU
|
|
- Patches compartidos (total, por dia)
|
|
- Usuarios premium vs free
|
|
- Niveles completados (metricas del juego)
|
|
- [ ] Gestion de usuarios:
|
|
- Lista, busqueda, filtros
|
|
- Ver detalle de usuario (patches, progreso, rol)
|
|
- Cambiar rol (user → premium → admin)
|
|
- Banear/desbanear
|
|
- [ ] Moderacion del Workshop:
|
|
- Ver patches reportados/flagged
|
|
- Eliminar contenido (soft delete)
|
|
- Editar titulo/descripcion
|
|
- Ver historial de moderacion
|
|
|
|
### Phase 5 — Monetizacion (futuro)
|
|
**Objetivo:** Cursos premium y sostenibilidad.
|
|
|
|
- [ ] Definir proveedor de pagos (Stripe, LemonSqueezy, Paddle)
|
|
- [ ] Plan Premium: acceso a cursos avanzados de sintesis
|
|
- [ ] Checkout flow
|
|
- [ ] Gestion de suscripciones (portal del usuario)
|
|
- [ ] Metricas de revenue en admin dashboard
|
|
- [ ] Sandbox permanece gratuito
|
|
|
|
### Phase 6 — Cursos (futuro)
|
|
**Objetivo:** Contenido educativo estructurado de pago.
|
|
|
|
- [ ] Sistema de cursos con lecciones
|
|
- [ ] Lecciones interactivas (como SynthQuest pero mas profundo)
|
|
- [ ] Certificados de completado
|
|
- [ ] Tracks tematicos: "Sound Design", "Beat Making", "Ambient Textures"
|
|
|
|
---
|
|
|
|
## Stack Tecnico
|
|
|
|
| Capa | Tecnologia |
|
|
|------|-----------|
|
|
| Frontend | React 18, Vite, Tone.js |
|
|
| Backend | Fastify v5 (Node.js) |
|
|
| Base de datos | PostgreSQL 16 + Drizzle ORM |
|
|
| Auth | JWT + httpOnly refresh cookies + argon2 |
|
|
| Storage | Filesystem (Docker volume) |
|
|
| Deploy | Docker + Docker Compose |
|
|
| Hosting | montlab.dev (self-hosted) |
|
|
| Git | Gitea (git.montlab.dev) |
|
|
|
|
---
|
|
|
|
## Principios de Diseno
|
|
|
|
1. **Offline-first** — La app funciona sin internet. El backend es un extra, no una dependencia.
|
|
2. **Opt-in** — Todo funciona sin cuenta. Login desbloquea sync + comunidad.
|
|
3. **Mobile-first** — Cada feature se disena primero para movil.
|
|
4. **Progresivo** — Cada phase se puede deployar independientemente.
|
|
5. **Simple** — Preferir soluciones simples sobre arquitecturas complejas.
|
|
|
|
---
|
|
|
|
## Metricas de Exito
|
|
|
|
- **Phase 1:** 100 usuarios registrados en el primer mes
|
|
- **Phase 3:** 50 patches compartidos en el Workshop
|
|
- **Phase 5:** 10 suscriptores premium
|
|
- **Long-term:** Reaktor como referencia en educacion de sintesis modular web
|
|
|
|
---
|
|
|
|
*Documento vivo — actualizar conforme avanza el desarrollo.*
|