Rallymate
Un'app per iPhone in cui gli amici registrano le partite di padel in doppio, set per set, e ottengono una classifica che nessuno può contestare.
- Stato
- In sviluppo · presto su TestFlight
- Ruolo
- Da solo — prodotto, design, iOS e backend
- Periodo
- ott 2026 – oggi
- Piattaforma
- iPhone · iOS 26
- Stack
- SwiftUI · Liquid Glass · MVVM · Swift Concurrency · Supabase · Postgres
Problema
Quando gioco a padel con gli amici, i risultati si perdono. Nessuno ricorda chi ha vinto cosa, e una classifica tenuta a memoria è sempre contestabile.
Rallymate dà a un gruppo di amici un solo posto dove registrare le partite di doppio. Un avversario conferma ogni partita, oppure si conferma da sola dopo tre giorni, così la classifica conta solo i risultati che entrambe le squadre accettano. È anche il mio ingresso in iOS: un'app vera per l'App Store, con un piano fisso di otto settimane.
Cosa ho costruito
- Gruppi con codice d'invito, ciascuno con la sua classifica. Un giocatore può stare in più gruppi.
- Partite di doppio registrate set per set, anche con ospiti senza account, purché ogni squadra abbia un giocatore registrato.
- Conferma o contesta: gli avversari ricevono la partita da verificare; un job pianificato la conferma dopo tre giorni.
- Profili giocatore con statistiche su tutti i gruppi: percentuale di vittorie, serie in corso, compagno migliore.
- Eliminazione dell'account che rende anonimo il giocatore e lascia valide le sue partite per tutti gli altri.
Decisioni
L'app non scrive mai direttamente una partita o l'appartenenza a un gruppo.
Ogni modifica passa da una funzione Postgres che controlla le regole (creare, confermare, contestare, entrare con un codice), e la row-level security mostra a ogni giocatore solo i suoi gruppi. Un client modificato non può confermarsi una partita da solo né entrare in un gruppo senza il codice.
Classifiche e statistiche si calcolano in SQL, non si salvano mai.
Le classifiche nascono da viste e funzioni sulle partite confermate. Quando una partita viene modificata, eliminata o contestata non c'è un totale salvato da correggere, e le regole della classifica stanno in un solo posto, coperte da test pgTAP.
La moderazione c'è dal primo rilascio, per la regola 1.2 dell'App Store.
Nell'app ci sono nomi e foto scelti dagli utenti, quindi serve un modo per segnalarli e intervenire in fretta. All'onboarding si accettano termini a tolleranza zero e si può segnalare un compagno di gruppo; un trigger nel database chiama una Edge Function che mi manda un'email. L'ho progettata insieme al primo schema invece di aggiungerla prima dell'invio.
Qualità
- 172asserzioni pgTAP sulle regole del database, in 14 suite
- 57test Swift su view model, punteggio e ritaglio della foto
- 0policy di scrittura su partite e gruppi — il client può solo chiamare funzioni
Come ci ho lavorato
Spec → ticket → agenti di coding, ogni decisione rivista e presa da me. 25 ticket in un piano di 8 settimane in cui la data è fissa e il perimetro si adatta.
Stato e link
- StatoIn sviluppo · presto su TestFlight
- CodiceSu richiesta · repo pubblica a breve
- TestFlightA breve