SportBuddy/USER_STORIES.md

16 KiB

SportBuddy - User Stories


US-001: Registrácia a prihlásenie

Status: HOTOVÉ

Ako nový používateľ chcem sa zaregistrovať a prihlásiť aby som mohol používať aplikáciu

Vývojár: Kamil Berecký

Tasky:

  • Setup Next.js projekt + Tailwind + BetterAuth
  • PostgreSQL databáza
  • Prisma schema: User model
  • BetterAuth konfigurácia (credentials provider)
  • Registračný formulár (/register)
  • Prihlasovací formulár (/login)
  • Validácia (email formát, heslo min 8 znakov)
  • Hash hesla (bcrypt)
  • Session management (localStorage)
  • Responzívny dizajn formulárov

Výsledné funkcie:

  • Fungujúca registrácia
  • Fungujúce prihlásenie
  • Session persistence
  • Redirect na /dashboard po prihlásení

US-002: Používateľský profil & Dashboard

Status: 📋 PLANNED

Ako používateľ chcem vidieť a upraviť môj profil a dashboard s mojimi aktivitami aby som mohol prezentovať svoje športové záujmy a mať prehľad o mojich udalostiach

Vývojár: Kamil Berecký

Tasky:

Profil sekcia

  • ⏸️ Profil stránka (/profile) - NEIMPLEMENTOVANÉ
  • ⏸️ Zobrazenie: meno, email, mesto, bio, obľúbené športy
  • ⏸️ Formulár na editáciu profilu (/profile/edit)
  • ⏸️ Upload profilovej fotky
  • ⏸️ API: GET /api/profile
  • ⏸️ API: PUT /api/profile
  • ⏸️ Validácia formulára
  • ⏸️ Responzívny dizajn

Dashboard sekcia

  • ⏸️ Dashboard stránka (/dashboard) - EXISTUJE ale je prázdny
  • ⏸️ API: GET /api/activities/my (filtrovanie podľa userId)
  • ⏸️ Dve sekcie: "Moje aktivity" (vytvorené) a "Prihlásený na" (joined)
  • ⏸️ Používanie Activity card komponentu
  • ⏸️ Loading state
  • ⏸️ Empty states
  • ⏸️ Quick actions: "Vytvoriť aktivitu", "Hľadať aktivity"
  • ⏸️ Štatistiky: počet aktivít, počet prihlásení - Základné karty existujú
  • ⏸️ Responzívny layout

Výsledné funkcie:

  • ⏸️ Zobrazenie profilu
  • ⏸️ Editácia profilu
  • ⏸️ Upload fotky
  • ⏸️ Dashboard so zoznamom - Dashboard existuje, ale nezobrazuje zoznam aktivít
  • ⏸️ Filtrovanie funguje
  • ⏸️ Štatistiky sa zobrazujú - Iba placeholder štatistiky (0, 0, -)

Poznámka: Profil model existuje v databáze (User + Profile), ale žiadne UI stránky nie sú implementované. Dashboard stránka existuje s navigáciou a základnou štruktúrou (3 štatistické karty), ale neobsahuje žiadne reálne dáta ani zoznam aktivít.


US-003: Vytvorenie aktivity

Status: 🔄 WIP (Work In Progress)

Ako používateľ chcem vytvoriť novú športovú aktivitu aby som našiel spoluhráčov

Vývojár: -

Tasky:

  • Prisma schema: Activity model
  • API: POST /api/activities
  • Automatické pridanie tvorcu ako účastníka
  • Validácia (dátum v budúcnosti, cena >= 0)
  • ⏸️ Formulár na vytvorenie (/activities/create)
  • ⏸️ Polia: názov, šport (dropdown), dátum, čas, miesto, max hráčov, úroveň, cena, popis
  • ⏸️ React Hook Form + Zod validácia
  • ⏸️ Loading state pri submit
  • ⏸️ Redirect na detail po vytvorení
  • ⏸️ Responzívny formulár

Výsledné funkcie:

  • API endpoint funguje
  • Funkčná validácia na BE
  • Aktivita sa uloží do DB
  • ⏸️ Frontend formulár chýba

Poznámka: API je hotové, ale chýba frontend formulár na vytvorenie aktivity.


US-004: Zoznam a detail aktivít

Status: 🔄 WIP (Work In Progress)

Ako používateľ chcem vidieť zoznam aktivít a ich detail aby som vedel, čo je k dispozícii

Vývojár: -

Tasky:

  • API: GET /api/activities (pagination 20/page)
  • API: GET /api/activities/[id]
  • Filtrovanie podľa športu, mesta, statusu
  • ⏸️ Stránka zoznamu (/activities)
  • ⏸️ Card komponenta pre aktivitu
  • ⏸️ Zobrazenie: názov, šport, dátum, čas, miesto, voľné miesta
  • ⏸️ Loading skeleton
  • ⏸️ Empty state ("Žiadne aktivity")
  • ⏸️ Detail stránka (/activities/[id])
  • ⏸️ Kompletné info + mapa (Google Maps embed)
  • ⏸️ Zoznam účastníkov
  • ⏸️ Progress bar obsadenosti
  • ⏸️ Responzívny grid/detail

Výsledné funkcie:

  • API endpoints fungujú
  • ⏸️ Zoznam aktivít (UI)
  • ⏸️ Detail aktivity (UI)
  • ⏸️ Pagination funguje

Poznámka: Backend API je kompletný s filtrovaním, ale chýba celý frontend UI.


US-005: Prihlasovanie na aktivity

Status: 🔄 WIP (Work In Progress)

Ako používateľ chcem sa prihlásiť na aktivitu aby som rezervoval miesto

Vývojár: -

Tasky:

  • Prisma schema: Booking model (many-to-many User-Activity)
  • API: POST /api/activities/[id]/join
  • Kontrola voľnej kapacity
  • Kontrola duplicity (už prihlásený)
  • Aktualizácia počtu hráčov
  • ⏸️ Tlačidlo "Prihlásiť sa" na detaile
  • ⏸️ Tlačidlo "Odhlásiť sa" ak som prihlásený
  • ⏸️ API: DELETE /api/activities/[id]/leave
  • ⏸️ Optimistic updates (TanStack Query)
  • ⏸️ Toast notifikácie
  • ⏸️ Badge "Prihlásený" na karte aktivity

Výsledné funkcie:

  • Prihlásenie funguje (API)
  • ⏸️ Odhlásenie funguje
  • Počet hráčov sa aktualizuje
  • ⏸️ UI komponenty chýbajú

Poznámka: Join API je hotové, ale chýba leave endpoint a všetky UI elementy.


US-006: Vyhľadávanie aktivít

Status: 🔄 WIP (Work In Progress)

Ako používateľ chcem vyhľadávať aktivity aby som rýchlo našiel, čo ma zaujíma

Vývojár: Kamil Berecký

Tasky:

  • API: GET /api/activities?search=... (full-text cez názov, popis)
  • Prisma search
  • ⏸️ Search bar
  • ⏸️ Search input na /activities
  • ⏸️ Loading spinner pri searchi
  • ⏸️ Highlighting výsledkov (optional)
  • ⏸️ Clear search button
  • ⏸️ "Žiadne výsledky" state
  • ⏸️ Query params v URL (?search=futbal)

Výsledné funkcie:

  • Vyhľadávanie funguje (API)
  • ⏸️ Real-time výsledky (UI)
  • ⏸️ URL synchronizácia

Poznámka: API podporuje search, ale UI komponenty nie sú implementované.


US-007: Základný UI/UX

Status: 🔄 WIP (Work In Progress)

Ako používateľ chcem pekné a funkčné rozhranie aby som mal dobrý zážitok

Vývojár: Všetci spoločne

Tasky:

  • Responzívny dizajn (mobile/tablet/desktop)
  • Header s navigáciou (logo, links, user menu)
  • Footer (copyright, links)
  • Dark mode toggle
  • ⏸️ Loading states všade (skeleton, spinner)
  • ⏸️ Notifikácie (react-hot-toast)
  • ⏸️ Error states a error boundaries
  • ⏸️ 404 stránka
  • Konzistencia písma a farebných schém
  • Tailwind configurácia
  • Mobilné menu (hamburger)

Výsledné funkcie:

  • Responzívny dizajn
  • Konzistentný UI
  • ⏸️ Loading/Error states

Poznámka: Základný design a theme switching je hotový, ale chýbajú loading states, error handling a notifikácie.


US-008: OAuth prihlásenie

Status: 📋 PLANNED

Ako používateľ chcem sa prihlásiť pomocou Google, Facebook alebo iných platforiem aby som nemusel vytvárať nové heslo a prihlásenie bolo rýchlejšie

Vývojár: -

Tasky:

  • ⏸️ BetterAuth konfigurácia OAuth providers (Google, Facebook)
  • ⏸️ Google OAuth setup (Client ID, Secret)
  • ⏸️ Facebook OAuth setup (App ID, Secret)
  • ⏸️ Prisma schema: rozšírenie User modelu (providerId, provider)
  • ⏸️ API: OAuth callback handling
  • ⏸️ Tlačidlá "Prihlásiť cez Google/Facebook" na login/register stránke
  • ⏸️ Mapovanie OAuth dát na User profil (email, meno, avatar)
  • ⏸️ Handling existujúceho účtu (merge alebo error)
  • ⏸️ Session management pre OAuth users
  • ⏸️ Responzívne OAuth tlačidlá

Výsledné funkcie:

  • ⏸️ Google login funguje
  • ⏸️ Facebook login funguje
  • ⏸️ Automatické vytvorenie profilu
  • ⏸️ Merge s existujúcim emailom (optional)

US-009: Mapa s lokalitami aktivít

Status: 📋 PLANNED

Ako používateľ chcem vidieť polohu aktivít na Google Maps aby som vedel, kde sa aktivita koná a ako ďaleko to mám

Vývojár: -

Tasky:

  • ⏸️ Google Maps API setup (API key)
  • ⏸️ Prisma schema: pridať lat/lng do Activity modelu
  • ⏸️ Geocoding pri vytváraní aktivity (mesto/adresa → súradnice)
  • ⏸️ API: GET /api/activities s lat/lng dátami
  • ⏸️ React komponenta: MapView s Google Maps embed/SDK
  • ⏸️ Markery pre jednotlivé aktivity na mape
  • ⏸️ Info window pri kliknutí na marker (názov, šport, čas)
  • ⏸️ Prepínanie medzi zoznam view a mapa view na /activities
  • ⏸️ Mapa na detail stránke (/activities/[id])
  • ⏸️ Directions link (navigácia do Google Maps)
  • ⏸️ Responzívna mapa (mobile/desktop)
  • ⏸️ Loading state pre mapu

Výsledné funkcie:

  • ⏸️ Mapa na zozname aktivít
  • ⏸️ Mapa na detaile aktivity
  • ⏸️ Klikateľné markery
  • ⏸️ Navigácia do Google Maps

US-010: Zdieľanie aktivít

Status: 📋 PLANNED

Ako používateľ chcem zdieľať aktivitu na sociálnych sieťach aby som mohol pozvať priateľov

Vývojár: -

Tasky:

  • ⏸️ Share API implementácia (Web Share API)
  • ⏸️ Fallback pre desktopové prehliadače (Copy link + social share buttons)
  • ⏸️ Share buttons: Facebook, Instagram, WhatsApp, Twitter/X, Email
  • ⏸️ Generovanie share URL s UTM parametrami
  • ⏸️ Open Graph meta tags pre aktivitu (og:title, og:image, og:description)
  • ⏸️ Twitter Card meta tags
  • ⏸️ Preview image generátor (optional - dynamický OG image)
  • ⏸️ Share button na detail stránke
  • ⏸️ Share button na activity card (optional)
  • ⏸️ Toast notifikácia "Link skopírovaný"
  • ⏸️ Analytics tracking pre shares (optional)

Výsledné funkcie:

  • ⏸️ Web Share API na mobile
  • ⏸️ Social share tlačidlá
  • ⏸️ Copy link funkcia
  • ⏸️ Rich previews na sociálnych sieťach

US-011: Pridanie do kalendára

Status: 📋 PLANNED

Ako používateľ chcem pridať aktivitu do môjho Google/Apple kalendára aby som nezabudol na termín

Vývojár: -

Tasky:

  • ⏸️ Generovanie .ics súboru (iCalendar formát)
  • ⏸️ API: GET /api/activities/[id]/calendar (vracia .ics)
  • ⏸️ Google Calendar link generátor
  • ⏸️ Apple Calendar kompatibilita
  • ⏸️ Outlook Calendar link
  • ⏸️ Tlačidlo "Pridať do kalendára" na detaile
  • ⏸️ Dropdown menu s možnosťami (Google, Apple, Outlook, Download .ics)
  • ⏸️ ICS súbor obsahuje: názov, popis, lokácia, začiatok, koniec, alarm (1h pred)
  • ⏸️ Automatické nastavenie časového pásma
  • ⏸️ Responzívne tlačidlo

Výsledné funkcie:

  • ⏸️ Google Calendar export
  • ⏸️ Apple Calendar export
  • ⏸️ Outlook Calendar export
  • ⏸️ .ics download

US-012: Pokročilé filtrovanie a preferencie

Status: 📋 PLANNED

Ako používateľ chcem filtrovať aktivity podľa skúseností, pohlavia, veku, ceny a ďalších kritérií aby som našiel aktivity, ktoré mi vyhovujú

Vývojár: -

Tasky:

Rozšírenie databázového modelu

  • ⏸️ Prisma schema: rozšírenie Activity (skillLevel, gender, minAge, maxAge, price)
  • ⏸️ Prisma schema: UserPreferences model (preferredSports, skillLevel, maxDistance, maxPrice)
  • ⏸️ Migrácia databázy

Backend

  • ⏸️ API: GET /api/activities s rozšíreným filtrovaním
  • ⏸️ Filtrovanie: skillLevel (začiatočník, stredne pokročilý, pokročilý, expert)
  • ⏸️ Filtrovanie: gender (muži, ženy, zmiešané)
  • ⏸️ Filtrovanie: vekové rozpätie (minAge-maxAge)
  • ⏸️ Filtrovanie: cena (od-do)
  • ⏸️ API: GET/PUT /api/preferences (uloženie používateľských preferencií)

Frontend - Filter panel

  • ⏸️ Bočný filter panel na /activities
  • ⏸️ Dropdown/Select pre úroveň (skillLevel)
  • ⏸️ Radio buttons pre pohlavie
  • ⏸️ Slider/Input pre vek (range)
  • ⏸️ Slider/Input pre cenu (range)
  • ⏸️ Checkbox pre športy
  • ⏸️ "Použiť filtre" a "Resetovať" tlačidlá
  • ⏸️ Uložené preferencie v /profile/preferences
  • ⏸️ Quick filter badges (zobrazenie aktívnych filtrov)
  • ⏸️ Mobile-friendly filter (bottom sheet/modal)

Formulár na vytvorenie aktivity

  • ⏸️ Pridať polia: skillLevel, gender, minAge, maxAge do create formu
  • ⏸️ Validácia (minAge <= maxAge, price >= 0)

Výsledné funkcie:

  • ⏸️ Filtrovanie podľa všetkých kritérií
  • ⏸️ Uloženie preferencií
  • ⏸️ Rozšírený create form
  • ⏸️ Responzívny filter UI

US-013: Verejný používateľský profil

Status: 📋 PLANNED

Ako používateľ chcem vidieť profily ostatných používateľov s ich predošlými aktivitami aby som vedel, s kým budem hrať

Vývojár: -

Tasky:

Backend

  • ⏸️ API: GET /api/users/[id] (verejné dáta)
  • ⏸️ API: GET /api/users/[id]/activities (absolvované aktivity)
  • ⏸️ Prisma query: počet aktivít, hodnotenie (optional)
  • ⏸️ Privacy nastavenia (ktoré dáta sú verejné)

Frontend - Verejný profil

  • ⏸️ Stránka /users/[id]
  • ⏸️ Zobrazenie: meno, avatar, bio, mesto
  • ⏸️ Štatistiky: počet aktivít, obľúbené športy
  • ⏸️ Zoznam predošlých aktivít (completed)
  • ⏸️ Badge systém (optional: "Častý hráč", "Organizátor" atď.)
  • ⏸️ Hodnotenie/Recenzie od ostatných (optional)
  • ⏸️ Responzívny dizajn

Prepojenia

  • ⏸️ Link na profil z activity card (pri účastníkoch)
  • ⏸️ Link na profil z activity detail (zoznam účastníkov)
  • ⏸️ Avatar klikateľný → profil

Privacy

  • ⏸️ Nastavenie v /profile/privacy (čo je verejné)
  • ⏸️ Možnosť skryť predošlé aktivity
  • ⏸️ Možnosť skryť štatistiky

Výsledné funkcie:

  • ⏸️ Verejný profil stránka
  • ⏸️ História aktivít
  • ⏸️ Štatistiky používateľa
  • ⏸️ Privacy nastavenia

US-014: Notifikácie o nových aktivitách

Status: 📋 PLANNED

Ako používateľ chcem dostávať notifikácie o nových aktivitách v mojom okolí podľa mojich preferencií aby som nezmeškal zaujímavé aktivity

Vývojár: -

Tasky:

Backend - Notifikačný systém

  • ⏸️ Prisma schema: Notification model (type, userId, activityId, read, createdAt)
  • ⏸️ API: GET /api/notifications (zoznam notifikácií)
  • ⏸️ API: PUT /api/notifications/[id]/read (označiť ako prečítané)
  • ⏸️ API: DELETE /api/notifications/[id]
  • ⏸️ Background job: kontrola nových aktivít podľa preferencií (cron job)
  • ⏸️ Matching engine: aktivita vs. user preferences (šport, location, price)
  • ⏸️ Rate limiting (max X notifikácií denne)

Push notifikácie (optional)

  • ⏸️ Web Push API setup
  • ⏸️ Service Worker registrácia
  • ⏸️ Push subscription management
  • ⏸️ API: POST /api/notifications/subscribe
  • ⏸️ Browser notification permission request

Email notifikácie

  • ⏸️ Email service setup (SendGrid, Resend, alebo Nodemailer)
  • ⏸️ Email template pre novú aktivitu
  • ⏸️ Digest email (denný/týždenný súhrn)
  • ⏸️ Unsubscribe link

Frontend - Notification center

  • ⏸️ Notification bell icon v headeri
  • ⏸️ Badge s počtom neprečítaných
  • ⏸️ Dropdown/Panel s notifikáciami
  • ⏸️ Notification item: avatar, text, čas, link na aktivitu
  • ⏸️ "Označiť všetko ako prečítané"
  • ⏸️ "Vymazať všetky"
  • ⏸️ Link na /notifications (full page view)
  • ⏸️ Real-time updates (WebSocket alebo polling)

Nastavenia notifikácií

  • ⏸️ Stránka /profile/notifications
  • ⏸️ Toggle: email notifikácie on/off
  • ⏸️ Toggle: push notifikácie on/off
  • ⏸️ Frekvencia: instant, denný digest, týždenný digest
  • ⏸️ Filter: len obľúbené športy, len v okolí X km
  • ⏸️ Quiet hours (nočný režim)

Výsledné funkcie:

  • ⏸️ In-app notifikácie
  • ⏸️ Push notifikácie (optional)
  • ⏸️ Email notifikácie
  • ⏸️ Notifikačné centrum
  • ⏸️ Konfigurovateľné nastavenia

Legenda

  • Hotové (Completed)
  • 🔄 WIP (Work In Progress - rozrobené)
  • ⏸️ Nerealizované (Planned but not started)
  • 📋 PLANNED (Celá user story je len naplánovaná)