Skip to content
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ca9a3ca
chore(deps): bump the npm-runtime-patch-minor group with 2 updates (#…
dependabot[bot] Aug 10, 2026
251114c
chore(deps): bump fast-uri from 3.1.4 to 3.1.5 (#138)
dependabot[bot] Aug 10, 2026
299b95d
chore(deps): bump undici from 6.27.0 to 6.28.0 (#137)
dependabot[bot] Aug 10, 2026
239575d
chore(security): tighten Dependabot and add SECURITY.md
Japegomez Aug 10, 2026
b6c8df0
fix(security): patch transitive advisories and audit allowlist
Japegomez Aug 10, 2026
4f1b12f
feat(profile): add native contact creation from player phone (#139)
Japegomez Aug 10, 2026
bd14623
feat(stats): player statistics, ELO ranking, H2H insights and unified…
Japegomez Aug 10, 2026
31c0405
fix(ci): restrict GITHUB_TOKEN permissions in workflows
Japegomez Aug 10, 2026
ba75453
feat(leagues): ligas, stats de perfil y acceso admin a privados (#143)
Japegomez Aug 10, 2026
5bd6809
Merge branch 'main' into develop
Japegomez Aug 10, 2026
06ae20b
chore(deps): integrate Dependabot #140 and #141 (#145)
Japegomez Aug 10, 2026
3bf9c05
merge: sync main into develop
Japegomez Aug 11, 2026
5a1daba
fix(security): lock down league lifecycle and gate stats refresh
Japegomez Aug 11, 2026
f32c580
fix(security): harden migration ACL revokes for anon and helpers
Japegomez Aug 11, 2026
ecdeab1
docs: document leagues, stats and account-delete for v1.7
Japegomez Aug 11, 2026
592aad2
feat: friend system + match invitations (v1.8.0) (#157)
Japegomez Aug 12, 2026
218fa5f
fix(friends): harden invites UX and follow-up migrations
Japegomez Aug 12, 2026
bc7b0e1
fix(auth): extend background session timeout to 6h
Japegomez Aug 12, 2026
10751f6
merge: sync main hotfix v1.7.1 into develop
Japegomez Aug 12, 2026
99f8e25
fix(deps): pin react-test-renderer for npm ci
Japegomez Aug 12, 2026
536cb57
test: cover friends/invites hooks to restore coverage gates
Japegomez Aug 12, 2026
43adce5
fix(security): lockdown RLS queue and cron RPCs
Japegomez Aug 13, 2026
7dcdf0f
fix(security): pin search_path on tournament SQL helpers
Japegomez Aug 13, 2026
5e81189
feat(auth): add Turnstile on submit and stronger passwords
Japegomez Aug 13, 2026
8146f3a
chore(release): bump hotfix version to 1.8.1
Japegomez Aug 13, 2026
a293dcd
docs: close Turnstile operational checklist for v1.8.1
Japegomez Aug 13, 2026
7a59705
fix: apply PR review follow-ups for auth, invites, and profiles
Japegomez Aug 13, 2026
a298d19
merge: sync main v1.8.0 into develop
Japegomez Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,17 @@ EXPO_PUBLIC_POSTHOG_API_KEY=phc_XXXXXXXXXXXXXXXXXXXX

### Invite HTTPS host (Firebase Hosting default domain, no protocol)
# Used for WhatsApp share links: https://HOST/m/{id} and https://HOST/t/{id}
# eas env:create --name EXPO_PUBLIC_INVITE_HOST --value "musapp-731e1.web.app" --environment production --visibility plain
# eas env:create --name EXPO_PUBLIC_INVITE_HOST --value "musapp-731e1.web.app" --environment production --visibility plaintext
EXPO_PUBLIC_INVITE_HOST=musapp-731e1.web.app

### Cloudflare Turnstile (Dashboard → Turnstile → widget → Site Key)
# Public site key only. The Secret Key goes in Supabase Auth → Bot and Abuse Protection, never here.
# Hostnames on the widget (no https://): localhost (Expo Go / web) and musapp-731e1.web.app (release).
# eas env:create production --name EXPO_PUBLIC_TURNSTILE_SITE_KEY --value "0x4AAAAA..." --type string --visibility plaintext
EXPO_PUBLIC_TURNSTILE_SITE_KEY=0x4AAAAA_YOUR_SITE_KEY
# Optional override of the production native page host (default: EXPO_PUBLIC_INVITE_HOST)
# EXPO_PUBLIC_TURNSTILE_HOSTNAME=musapp-731e1.web.app

## CI/CD (secrets: NO van al bundle)

### GitHub Actions — repo secrets
Expand All @@ -39,7 +47,8 @@ EXPO_PUBLIC_INVITE_HOST=musapp-731e1.web.app

### EAS Build (cloud/CI)
# Crea las mismas variables en EAS (Environment = production/preview/...) para que el build release arranque:
# eas env:create production --name EXPO_PUBLIC_SUPABASE_URL --value "https://xxx.supabase.co" --type string --visibility plain
# eas env:create production --name EXPO_PUBLIC_SUPABASE_URL --value "https://xxx.supabase.co" --type string --visibility plaintext
# eas env:create production --name EXPO_PUBLIC_SUPABASE_ANON_KEY --value "..." --type string --visibility secret
# eas env:create production --name EXPO_PUBLIC_SENTRY_DSN --value "https://..." --type string --visibility plain
# eas env:create production --name EXPO_PUBLIC_POSTHOG_API_KEY --value "phc_..." --type string --visibility secret
# eas env:create production --name EXPO_PUBLIC_SENTRY_DSN --value "https://..." --type string --visibility plaintext
# eas env:create production --name EXPO_PUBLIC_POSTHOG_API_KEY --value "phc_..." --type string --visibility secret
# eas env:create production --name EXPO_PUBLIC_TURNSTILE_SITE_KEY --value "0x4AAAAA..." --type string --visibility plaintext
19 changes: 12 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ El alcance se estructuró en **seis fases incrementales**, cada una con objetivo

```text
Fase 1 ──► Core Autenticación · Perfil · Partidas · Descubrir
Fase 2 ──► Resultados Notificaciones · Validación de marcadores · Reportes
Fase 3 ──► Administración Panel de moderación · Analíticas · Auditoría
Fase 4 ──► Torneos Cuadros eliminatorios · Parejas · Sincronización en tiempo real
Fase 5 ──► Marcador Conteo en vivo local · Acceso sin registro
Fase 6 ──► Ligas y stats Ligas round-robin / Elo · Estadísticas · Logros · Clasificación
Fase 2 ──► Resultados Notificaciones · Validación de marcadores · Reportes
Fase 3 ──► Administración Panel de moderación · Analíticas · Auditoría
Fase 4 ──► Torneos Cuadros eliminatorios · Parejas · Sincronización en tiempo real
Fase 5 ──► Marcador Conteo en vivo local · Acceso sin registro
Fase 6 ──► Ligas y stats Ligas round-robin / Elo · Estadísticas · Logros · Clasificación
```

---
Expand Down Expand Up @@ -103,7 +103,7 @@ La aplicación sigue una **arquitectura cliente-servidor** con separación clara
┌────────────────────────────▼────────────────────────────────┐
│ SERVICIOS EXTERNOS E INFRAESTRUCTURA │
│ Sentry · PostHog · Expo EAS · GitHub Actions · Push (FCM/APNs)
│ Sentry · PostHog · Expo EAS · GitHub Actions · Push · Turnstile
└─────────────────────────────────────────────────────────────┘
```

Expand Down Expand Up @@ -149,6 +149,7 @@ La aplicación sigue una **arquitectura cliente-servidor** con separación clara
| 🛡️ **Sentry** | Monitorización de errores y rendimiento |
| 📊 **PostHog** | Analítica de producto |
| 🔔 **Expo Push Notifications** | Notificaciones en Android (FCM) e iOS (APNs) |
| 🧩 **Cloudflare Turnstile** | CAPTCHA en login, registro y recuperación de contraseña |
| 🌿 **GitFlow** | Estrategia de ramas: `main`, `develop`, `feature/*`, `release/*` |

---
Expand All @@ -160,12 +161,15 @@ La aplicación sigue una **arquitectura cliente-servidor** con separación clara
- Inicio de sesión con **Google**, **Apple ID** y **correo electrónico**
- Registro con aceptación de términos legales y política de privacidad
- Recuperación de contraseña y persistencia de sesión entre reinicios
- **Cloudflare Turnstile** al enviar login, registro o recuperación (no en Google/Apple)
- Contraseña con mayúscula, minúscula, dígito y símbolo; cambio desde el perfil con la contraseña actual
- **Eliminación de cuenta** conforme al RGPD, con anonimización del historial compartido (partidas, ligas y torneos)
- Cierre de sesión con confirmación explícita

### 👤 Perfil de usuario

- Datos personales: nombre, teléfono con validación internacional, localidad y foto de perfil
- Cambio de contraseña en edición de perfil (exige la actual)
- Preferencias granulares de **notificaciones push** por tipo de evento
- Historial personal de partidas con indicadores de victoria y derrota
- Resumen de **estadísticas / ELO**, logros destacados y pantalla de stats detallada
Expand All @@ -185,7 +189,7 @@ La aplicación sigue una **arquitectura cliente-servidor** con separación clara

### 🔍 Descubrir

- Listado de partidas, torneos y **ligas** públicas con ordenación por proximidad temporal
- Listado de partidas, torneos y **ligas** públicas y **privadas con contraseña** (aparecen en Descubrir; la contraseña desbloquea la vista)
- Filtros por tipo, ciudad, fecha, plazas libres, visibilidad y estado
- Búsqueda por texto y paginación eficiente
- Actualización en tiempo real sin recarga manual
Expand Down Expand Up @@ -236,6 +240,7 @@ La aplicación sigue una **arquitectura cliente-servidor** con separación clara
### 🔒 Seguridad y cumplimiento

- Autenticación OAuth2 con flujo PKCE y tokens de corta duración
- **Turnstile** (Cloudflare) como desafío anti-bots en los formularios de email
- Políticas de acceso a datos por usuario y por rol en base de datos
- Protección de datos personales: teléfono visible solo entre participantes de la misma partida
- Cumplimiento RGPD: consentimiento, minimización de datos y derecho de supresión
Expand Down
Loading
Loading