522 lines
16 KiB
Markdown
522 lines
16 KiB
Markdown
# 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:** -
|
|
|
|
### 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:** -
|
|
|
|
### 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á)
|
|
|
|
---
|