✦ ✦ ✦

STREETPASS
MADRID 2026

// ÚLTIMA VEZ ACTUALIZADO: 25 DE MARZO DE 2026

✦ ✦ ✦
FASE 0
Base & Wii
~Hecho
FASE 1
Quedadas
~por edición
FASE 2
API & Auth
~3-4 semanas
FASE 3
Social
~3-4 semanas
FASE 4
Eventos & Foro
~4-6 semanas
Issues Web
18
8 resueltas / 10 pendientes
Issues API
20
0 resueltas / 20 pendientes
Total
38
8 resueltas / 30 pendientes
LÍDER & ÚNICO DEV 👑
Daniel Poza

DANIEL POZA

Fullstack Developer — Creador StreetPass Madrid Web

8
Issues Resueltas
30
Issues Pendientes

// ESTRUCTURA_DEL_PROYECTO (ACTUAL → OBJETIVO)

index.html
Menú principal estilo Wii ✓
script.js
Grid canales dinámico ✓
style.css
Wii aesthetic + animaciones ✓
quedada5/
Subpágina Quedada 5 ✓
✦ StreetPassAPI/
FastAPI backend (nuevo)
✦ quedada6–SP8/
Subpáginas restantes (nuevo)
✦ users/
MongoDB: users, amigos, logros
✦ eventos/
MongoDB: eventos, inscripciones
✦ foro/
MongoDB: hilos, mensajes
✦ noticias/
MongoDB: posts de noticias
// FASE_0 — ISSUES RESUELTAS (HISTORIAL WEB)
// WEB — BASE & MENÚ WII
#IssueRepoLabels
#1Estructura HTML base — grid 4x3 de canales estilo menú Wii generado dinámicamente en JSWEBarch ui
#2Fondo estático Wii — StreetpassWebBackGroun.jpg con background-attachment:fixed y overlay inferior StreetpassWebMenu.pngWEBui anim
#3Cursor personalizado Wii — reemplazar cursor del sistema por CursosWeb.png en toda la páginaWEBux
#4Efecto hover de canal — escala 1.06 con spring cubic-bezier, borde resaltado y z-index elevado, igual que la WiiWEBanim ui
#5Título flotante de ediciones — imagen TituloPaginaEdiciones.png centrada sobre la rejilla con drop-shadow 3DWEBui
#6Títulos de canal animados — channel-title opacado al 0.2 que aparece en hover con transición hacia posición normalWEBanim
#7Quedada 5 — canal clickable con foto portada, efecto fade-out-wii (scale 2.5 + blur) y redirección a quedada5/index.htmlWEBfeat content
#8Animación de retorno — fade-in-wii-return al volver desde una quedada: zoom desde 0.5 con blur inverso hasta escala normalWEBanim ux
// FASE_1 — CONTENIDO: QUEDADAS & POLISH WEB (PENDIENTE)
// WEB — QUEDADAS PENDIENTES
#IssueRepoLabels
#9SP8 — Subpágina completa con galería de fotos, asistentes, juegos jugados y resumen del eventoWEBcontent gallery
#10SP6 — Canal clickable + subpágina con portada y galería de fotosWEBcontent gallery
#11SP7 — Canal clickable + subpágina con portada y galería de fotosWEBcontent gallery
#12Sonido de selección y música de fondo — audio bip Wii al clickar + loop ambiental con control de volumen discretoWEBux anim
#13Reloj estilo Wii en la esquina — fecha y hora con tipografía Wii, igual que el menú real de la consolaWEBui feat
#14Canal "Próxima quedada" parpadeante — destacado con fecha y lugar de la siguiente edición + countdown en tiempo realWEBfeat anim
#15Galería lightbox Frutiger Aero — fotos a pantalla completa con transiciones fluidas y efecto cristal en las subpáginas de quedadaWEBgallery ux
#16SEO y meta tags — título, descripción y og:image para que el link de street-pass-web.vercel.app se comparta bien en redesWEBdevops docs
#17Responsive móvil — el grid 4x3 se rompe en pantallas pequeñas, adaptar a 2 columnas con media queriesWEBresponsive bug
#18Contadores de asistentes por edición visibles en el menú — badge numérico por cada canal con el conteo de asistentes registradosWEBfeat ui
// FASE_2 — API FASTAPI: AUTH & USUARIOS (PENDIENTE)
// API — INFRAESTRUCTURA BASE
#IssueRepoLabels
#19Crear la API en FastAPI — proyecto base con estructura de routers (auth.py, users.py, events.py, forum.py), conexión MongoDB Motor y variables .envAPIarch devops
#20Registro de usuario — POST /api/auth/register con nombre único, email, contraseña (bcrypt), foto de perfil y colección users en MongoDBAPIauth feat
#21Verificación de correo electrónico — envío de email con token al registrarse, endpoint GET /api/auth/verify-email?token= y campo email_verified en usersAPIauth security
#22Login con JWT — POST /api/auth/login retorna JWT de 7 días, campo role en el token (user / moderator / admin)APIauth security
#23Perfil de usuario con foto personalizada — GET/PATCH /api/users/{username}: editar nombre, bio, juegos favoritos (3DS, Switch), foto subida a CloudinaryAPIprofile feat
#24Historial de participación en quedadas — campo attended_events en users, visible en el perfil público: "Ha asistido a SP5, SP7, SP8…"APIprofile feat
// API — AMIGOS & CLUBES
#IssueRepoLabels
#25Sistema de amigos — POST /api/friends/request, aceptar/rechazar, listar amigos con estado online/offline en friendshipsAPI feat
#26Clubes de juego — crear/unirse a clubes por juego (Smash, Mario Kart, Pokémon…), CRUD en colección clubs con admin del clubAPI feat
// FASE_3 — ASISTENCIA, LOGROS & NOTICIAS (PENDIENTE)
// API — ASISTENCIA A EDICIONES
#IssueRepoLabels
#27Marcar asistencia a cada edición — POST /api/editions/{id}/attend, conteo total por edición en colección editions y visible en la subpágina de la quedadaAPIfeat
#28Conteo total de asistentes — GET /api/editions/{id}/attendees con lista de perfiles y contador total; visible en la subpágina de la quedada con avataresAPIfeat ui
// API — SISTEMA DE LOGROS
#IssueRepoLabels
#29Logros básicos de asistencia — "Primera quedada", "3 quedadas", "5 quedadas", "Veterano (10+)" — se conceden automáticamente al marcar asistenciaAPIachieve feat
#30Logros de torneo — "Ganador Smash (SP8)", "Campeón Mario Kart (SP6)"… concedibles solo por admins/mods desde el panel de administraciónAPIachieve admin
#31Logros sociales — "Primer amigo", "Club fundador", "Has ayudado a organizar un evento" — se asignan automáticamente al cumplir la condiciónAPIachieve
#32Galería de logros en el perfil — mostrar badges earned/locked con nombre, descripción y fecha de obtención en GET /api/users/{username}/achievementsAPIachieve profile
// API — NOTICIAS
#IssueRepoLabels
#33Sección de noticias — CRUD en colección news: GET /api/news lista pública, POST/PATCH/DELETE solo admins; campos: título, cuerpo, imagen, fecha, autorAPIcontent admin
#34Canal de noticias en menú Wii — nueva sección en el menú principal que muestra las últimas 3 noticias con un diseño tipo Mii ChannelWEBui content
// FASE_4 — EVENTOS, TORNEOS & FORO (PENDIENTE)
// API — EVENTOS DENTRO DE CADA STREETPASS
#IssueRepoLabels
#35Crear eventos dentro de una edición — POST /api/editions/{id}/events solo para admins/mods: nombre, descripción, tipo (torneo / taller / venta), aforo máximo y horarioAPIfeat admin
#36Inscripción de usuarios a eventos — POST /api/events/{id}/join: cualquier usuario registrado puede inscribirse, se actualiza el contador en tiempo realAPIfeat
#37Tipos de eventos predefinidos — Torneo Smash, Torneo Beyblade, Torneo Mario Kart, Venta de dibujos, Intercambio Pokémon — con icono y color por categoríaWEBui content
#38Vista de eventos en la subpágina de cada quedada — lista de eventos con inscriptos, aforo y botón para apuntarse directamente desde la páginaWEBui feat
#39Panel de administración — /admin solo accesible para admins/mods: gestión de usuarios, roles, noticias, eventos y validación manual de asistenciaWEBadmin security
// API — FORO & BUSCAR PARTIDA
#IssueRepoLabels
#40Foro general — colección threads: crear hilos por categoría (General, Buscar partida, Préstamos de juegos), con paginación y contador de respuestasAPI feat
#41Sección "Buscar partida" — hilos específicos con campo de código Nintendo (Pretendo / Switch) para buscar partida de juego online: MK8, Smash, Splatoon, etc.API feat
#42Buscador en el foro — GET /api/forum/search?q= para buscar hilos por título, juego o usuario, con filtros por categoríaAPIfeat perf

// NOTAS_TÉCNICAS — ARQUITECTURA OBJETIVO

Stack planificado para la API

StreetPassAPI/
├── app/
│   ├── main.py          # FastAPI app + CORS + lifespan
│   ├── routers/
│   │   ├── auth.py      # register, login, verify-email
│   │   ├── users.py     # perfil, amigos, clubes, logros
│   │   ├── editions.py  # asistencia, conteos, eventos
│   │   ├── news.py      # CRUD noticias (admin only)
│   │   └── forum.py     # hilos, respuestas, buscar partida
│   ├── models/          # Pydantic schemas
│   └── db.py            # Motor (MongoDB async)
└── .env                 # MONGODB_URI, JWT_SECRET, CLOUDINARY_*

Animación Wii — Grid dinámico (cómo añadir quedada)

// Para añadir SP6, añadir un bloque if(i === 2) en script.js:
if (i === 2) {
    const img = document.createElement("img");
    img.src = "resources/SP6/portada.jpg";
    img.classList.add("channel-image");
    box.appendChild(img);
    titleSrc = "resources/SP6/titulo.png";
    box.addEventListener("click", () => {
        document.getElementById("page-content")
            .classList.add("fade-out-wii");
        setTimeout(() => {
            window.location.href = "quedada6/index.html";
        }, 400);
    });
}

// REGISTRO_DE_AVANCE

Historial de progreso — actualmente al 13%. Solo dev.

SEMANA 1 Mar 2026 FASE 0 — Base & Quedadas

✅ Completado

  • Grid 4x3 generado dinámicamente en script.js
  • Fondo Wii + overlay inferior con StreetpassWebMenu.png
  • Cursor personalizado Wii, hover spring cubic-bezier
  • Títulos de canal animados en hover
  • Animación wiiStart al clickar — scale 2.5 + blur
  • Animación wiiReturnEnter al volver — zoom inverso
  • Canal Quedada 5 funcional con redirección completa
  • Canal SP8 visual con portada (sin click aún)

→ Objetivos actuales

  • Subpáginas SP6, SP7 y SP8 completas
  • Sonido + reloj Wii + responsive
  • Empezar API FastAPI: auth + registro con verificación email