- Add recurring activities feature (daily, weekly, monthly) - Auto-join with guest count for recurring series - Parent-child relationship for recurring instances - 'Opakovaná' badge and upcoming instances section - Smart delete logic (promote first child to parent) - My Activities page with created/joined tabs - Map view at /venues with activity markers - Custom sport icons and user location marker - InfoWindow with activity details - Navigation renamed 'Športoviská' to 'Mapa aktivít' - Fix participation tracking for joined activities - Database migrations for recurring and guest count fields
970 lines
34 KiB
Markdown
970 lines
34 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 (scrypt via Better Auth)
|
|
- ✅ Session management (localStorage)
|
|
- ✅ Responzívny dizajn formulárov
|
|
- ✅ Podmienené zobrazenie "Vytvoriť účet" button (skrytie pre prihlásených) - Jozef Kovalčín
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Fungujúca registrácia
|
|
- ✅ Fungujúce prihlásenie
|
|
- ✅ Session persistence
|
|
- ✅ Redirect na /dashboard po prihlásení
|
|
- ✅ Homepage nezobrazuje CTA button pre prihlásených používateľov
|
|
|
|
---
|
|
|
|
## US-002: Používateľský profil & Dashboard
|
|
|
|
**Status:** ✅ HOTOVÉ
|
|
|
|
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:** Jozef Kovalčín
|
|
|
|
### Tasky:
|
|
#### Profil sekcia
|
|
- ✅ Profil stránka (/profile)
|
|
- ✅ 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)
|
|
- ✅ 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í
|
|
- ✅ Responzívny layout
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Zobrazenie profilu
|
|
- ✅ Editácia profilu
|
|
- ✅ Upload fotky
|
|
- ✅ Dashboard so zoznamom
|
|
- ✅ Filtrovanie funguje
|
|
- ✅ Štatistiky sa zobrazujú
|
|
|
|
**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:** ✅ HOTOVÉ
|
|
|
|
Ako používateľ
|
|
chcem vytvoriť novú športovú aktivitu
|
|
aby som našiel spoluhráčov
|
|
|
|
**Vývojár:** Kamil Berecký
|
|
|
|
### 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
|
|
- ✅ Google Maps LocationPicker pre výber adresy - Jozef Kovalčín
|
|
- ✅ Automatické uloženie GPS súradníc a názvu miesta - Jozef Kovalčín
|
|
- ✅ Rozšírenie formulára o filter polia (pohlavie, min vek, max vek, cena) - Jozef Kovalčín
|
|
- ✅ Custom input tlačidlá s +/- tlačidlami - Jozef Kovalčín
|
|
- ✅ Pravidelne opakované aktivity (DAILY, WEEKLY, MONTHLY) - Jozef Kovalčín
|
|
- ✅ Výber dní v týždni pre týždenné opakovanie - Jozef Kovalčín
|
|
- ✅ Dátum ukončenia opakovania (voliteľný, default 2 mesiace) - Jozef Kovalčín
|
|
- ✅ Automatické generovanie budúcich inštancií pri vytvorení (max 20 inštancií alebo 2 mesiace) - Jozef Kovalčín
|
|
- ✅ Auto-join na všetky inštancie s možnosťou zadať počet hostí - Jozef Kovalčín
|
|
- ✅ Parent-child vzťah medzi opakovanými aktivitami - Jozef Kovalčín
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ API endpoint funguje
|
|
- ✅ Funkčná validácia na BE
|
|
- ✅ Aktivita sa uloží do DB
|
|
- ✅ Frontend formulár implementovaný a funkčný
|
|
- ✅ Automatické načítanie venues
|
|
- ✅ Validácia na FE a BE
|
|
- ✅ Google Maps autocomplete pre adresu
|
|
- ✅ Uloženie lokácie, GPS súradníc a názvu miesta
|
|
- ✅ Všetky US-012 filter polia v create forme
|
|
- ✅ Pravidelné opakovanie aktivít (denné, týždenné, mesačné)
|
|
- ✅ UI pre výber dní v týždni
|
|
- ✅ Automatické vytváranie budúcich aktivít (max 20 inštancií alebo 2 mesiace)
|
|
- ✅ Auto-join pre organizátora na všetky inštancie s počtom hostí
|
|
- ✅ Parent-child vzťah s badge "Opakovaná" na kartách aktivít
|
|
- ✅ Sekcia "Nadchádzajúce termíny" na detail stránke (collapsible)
|
|
- ✅ Smart delete logic - pri zmazaní parent sa prvá child aktivita stane novým parentom
|
|
|
|
---
|
|
|
|
## US-004: Zoznam a detail aktivít
|
|
|
|
**Status:** ✅ HOTOVÉ
|
|
|
|
Ako používateľ
|
|
chcem vidieť zoznam aktivít a ich detail
|
|
aby som vedel, čo je k dispozícii
|
|
|
|
**Vývojár:** Kamil Berecký
|
|
|
|
### 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
|
|
- ✅ Zobrazenie všetkých US-012 filter polí - Jozef Kovalčín
|
|
- ✅ Google Maps iframe s názvom miesta - Jozef Kovalčín
|
|
- ✅ "Otvoriť v Mapách" tlačidlo s deep linking - Jozef Kovalčín
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ API endpoints fungujú
|
|
- ✅ Zoznam aktivít (UI) s kartami
|
|
- ✅ Detail aktivity s kompletnou informáciou
|
|
- ✅ Mapa športoviska s názvom lokality
|
|
- ✅ Progress bar a zoznam účastníkov
|
|
- ✅ Loading states a empty states
|
|
- ✅ Zobrazenie pohlavia, vekového rozpätia a ceny
|
|
- ✅ Deep linking do Google Maps/Apple Maps
|
|
|
|
---
|
|
|
|
## US-005: Prihlasovanie na aktivity
|
|
|
|
**Status:** ✅ HOTOVÉ
|
|
|
|
Ako používateľ
|
|
chcem sa prihlásiť na aktivitu
|
|
aby som rezervoval miesto
|
|
|
|
**Vývojár:** Kamil Berecký
|
|
|
|
### 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]/join
|
|
- ✅ Optimistic updates (TanStack Query)
|
|
- ✅ Toast notifikácie
|
|
- ✅ Badge "Prihlásený" na karte aktivity
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Prihlásenie funguje (API + UI)
|
|
- ✅ Odhlásenie funguje (API + UI)
|
|
- ✅ Počet hráčov sa aktualizuje
|
|
- ✅ UI komponenty implementované
|
|
- ✅ Automatický refresh dát po akcii
|
|
- ✅ Vizuálna indikácia stavu (organizátor/účastník)
|
|
|
|
---
|
|
|
|
## 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:** ✅ HOTOVÉ
|
|
|
|
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
|
|
|
|
<<<<<<< HEAD
|
|
**Vývojár:** - Jozef Kovalčín
|
|
=======
|
|
**Vývojár:** Jozef Kovalčín
|
|
>>>>>>> ad142ec (feat: recurring activities, my activities page, map view with markers)
|
|
|
|
### Tasky:
|
|
- ✅ BetterAuth konfigurácia OAuth providers (Google, Facebook, Apple)
|
|
- ✅ Google OAuth setup (Client ID, Secret)
|
|
- ✅ Facebook OAuth setup (App ID, Secret)
|
|
- ✅ Apple OAuth setup (Client ID, Secret)
|
|
- ✅ Prisma schema: rozšírenie Account modelu (accessTokenExpiresAt, refreshTokenExpiresAt, scope)
|
|
- ✅ Account linking konfigurácia (trustedProviders)
|
|
- ✅ API: OAuth callback handling (redirect na frontend URL)
|
|
- ✅ Error page redirect (na frontend signin page)
|
|
- ✅ Tlačidlá "Prihlásiť cez Google/Facebook" na login/register stránke
|
|
- ✅ OAuth callback URLs (/api/auth/callback/google, /facebook)
|
|
- ✅ Mapovanie OAuth dát na User profil (email, meno, avatar)
|
|
- ✅ Session management pre OAuth users
|
|
- ✅ Responzívne OAuth tlačidlá
|
|
- ⏸️ Handling existujúceho účtu (merge alebo error) - funkčné s account linking
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Google login funguje
|
|
- ✅ Facebook login funguje (vyžaduje konfiguráciu Facebook Developer App)
|
|
- ✅ Apple login funguje (vyžaduje konfiguráciu Apple Developer Account)
|
|
- ✅ Automatické vytvorenie profilu
|
|
- ✅ Account linking medzi providers (trusted: Google, Facebook, Apple)
|
|
|
|
|
|
---
|
|
|
|
## US-009: Mapa s lokalitami aktivít
|
|
|
|
**Status:** ✅ HOTOVÉ
|
|
|
|
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:** Jozef Kovalčín
|
|
|
|
### Tasky:
|
|
- ✅ Google Maps API setup (API key)
|
|
- ✅ Prisma schema: pridať lat/lng do Activity modelu
|
|
- ✅ Prisma schema: location, locationName
|
|
- ✅ LocationPicker komponenta s Google Maps Autocomplete
|
|
- ✅ Geocoding pri vytváraní aktivity (adresa → súradnice)
|
|
- ✅ API: GET /api/activities s lat/lng dátami
|
|
- ✅ React komponenta: LocationPicker s Google Maps autocomplete SDK
|
|
- ✅ Mapa na detail stránke (/activities/[id]) s iframe embed
|
|
- ✅ Mapa zobrazuje názov miesta namiesto GPS súradníc
|
|
- ✅ Tlačidlo "Otvoriť v Mapách" s deep linking
|
|
- ✅ Responzívna mapa (mobile/desktop)
|
|
- ✅ Custom styling pre autocomplete dropdown
|
|
- ✅ Stránka /venues s full-screen mapou (premenovaná na "Mapa aktivít")
|
|
- ✅ Google Maps integrácia (useLoadScript hook namiesto LoadScript)
|
|
- ✅ Markery pre všetky open aktivity na mape
|
|
- ✅ Custom marker ikony pre každý šport (emoji SVG)
|
|
- ✅ User location marker (modrý kruh SVG)
|
|
- ✅ Centrovanie mapy na user location (geolocation API)
|
|
- ✅ InfoWindow pri kliknutí na marker
|
|
- ✅ InfoWindow s inline styling (fix pre white background)
|
|
- ✅ InfoWindow zobrazuje: názov, šport, dátum, čas, účastníci, lokácia, cena
|
|
- ✅ "Zobraziť detail" button v InfoWindow s linkom na aktivitu
|
|
- ✅ Legenda s vysvetlením markerov (user location + športy)
|
|
- ⏸️ Prepínanie medzi zoznam view a mapa view na /activities
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Google Maps autocomplete pri vytváraní aktivity
|
|
- ✅ Automatické uloženie GPS súradníc
|
|
- ✅ Mapa na detaile aktivity s názvom miesta
|
|
- ✅ "Otvoriť v Mapách" button (funguje na PC aj mobile)
|
|
- ✅ Deep linking do Google Maps/Apple Maps
|
|
- ✅ Custom styled autocomplete dropdown
|
|
- ✅ Full-screen mapa na /venues s všetkými aktivitami
|
|
- ✅ Klikateľné markery s custom ikonami pre každý šport
|
|
- ✅ InfoWindow s kompletnou informáciou a správnym štýlovaním
|
|
- ✅ User location detection a zobrazenie
|
|
- ✅ Legenda pre orientáciu
|
|
- ⏸️ Toggle medzi listom a mapou
|
|
|
|
---
|
|
|
|
## 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:** 🔄 WIP (Work In Progress)
|
|
|
|
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:** Jozef Kovalčín
|
|
|
|
### 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, price do create formu
|
|
- ✅ Custom styled number inputs s +/- tlačidlami
|
|
- ✅ Validácia (minAge <= maxAge, price >= 0)
|
|
- ✅ Backend validácia všetkých polí
|
|
- ✅ Zobrazenie nových polí na detail stránke
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Databázový model rozšírený
|
|
- ✅ Backend API podporuje filtrovanie
|
|
- ✅ Rozšírený create form s všetkými poliami
|
|
- ✅ Custom UI controls (duration, participants, age, price)
|
|
- ✅ Detail stránka zobrazuje všetky nové polia
|
|
- ⏸️ Filter panel UI na /activities
|
|
- ⏸️ Uloženie preferencií
|
|
- ⏸️ 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:** - Jozef Kovalčín
|
|
|
|
### 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
|
|
|
|
---
|
|
|
|
## US-015: Hodnotenie a recenzie
|
|
|
|
**Status:** 📋 PLANNED
|
|
|
|
Ako používateľ
|
|
chcem hodnotiť účastníkov po aktivite
|
|
aby ostatný vedeli, s kým hrajú
|
|
|
|
**Vývojár:** -
|
|
|
|
### Tasky:
|
|
### Backend
|
|
- ⏸️ Prisma schema: Review model (rating 1-5, comment, reviewer, reviewed user)
|
|
- ⏸️ API: POST /api/users/[id]/reviews
|
|
- ⏸️ API: GET /api/users/[id]/reviews (zoznam recenzií)
|
|
- ⏸️ Validácia: len pre účastníkov aktivity
|
|
- ⏸️ Validácia: len po dátume aktivity
|
|
- ⏸️ Validácia: jeden review na používateľa na aktivitu
|
|
- ⏸️ Validácia: no spam, min 10 znakov pre comment
|
|
- ⏸️ Výpočet priemerného ratingu (agregácia)
|
|
- ⏸️ API: POST /api/reviews/[id]/report (report inappropriate review)
|
|
|
|
### Frontend - Review komponenty
|
|
- ⏸️ Review modal po skončení aktivity
|
|
- ⏸️ Star rating komponenta (1-5 hviezd, interactive)
|
|
- ⏸️ Text area pre komentár (optional, max 500 znakov)
|
|
- ⏸️ Character counter (500/500)
|
|
- ⏸️ Anonymous option checkbox (meno skryté)
|
|
- ⏸️ Submit a Cancel tlačidlá
|
|
- ⏸️ Loading state pri odosielaní
|
|
|
|
### Frontend - Zobrazenie recenzií
|
|
- ⏸️ Zobrazenie priemerného ratingu na profile (stars + číslo)
|
|
- ⏸️ Zoznam recenzií na profile stránke
|
|
- ⏸️ Review card komponenta (avatar, meno/anonymous, rating, komentár, dátum)
|
|
- ⏸️ Pagination pre recenzie (10 per page)
|
|
- ⏸️ Report inappropriate review button
|
|
- ⏸️ "Žiadne recenzie" empty state
|
|
- ⏸️ Responzívny dizajn
|
|
|
|
### Notifikácie
|
|
- ⏸️ Notifikácia pre používateľa pri novej recenzii
|
|
- ⏸️ Email notifikácia o novom hodnotení (optional)
|
|
|
|
### Výsledné funkcie:
|
|
- ⏸️ Rating systém funguje
|
|
- ⏸️ Reviews na profile
|
|
- ⏸️ Priemerný rating sa zobrazuje
|
|
- ⏸️ Report function
|
|
|
|
---
|
|
|
|
## US-016: Chat pre aktivitu
|
|
|
|
**Status:** 📋 PLANNED
|
|
|
|
Ako používateľ
|
|
chcem komunikovať s účastníkmi aktivity
|
|
aby sme mohli medzi sebou komunikovať
|
|
|
|
**Vývojár:** -
|
|
|
|
### Tasky:
|
|
### Backend
|
|
- ⏸️ Prisma schema: Message model (activity_id, user_id, content, timestamp)
|
|
- ⏸️ API: GET /api/activities/[id]/messages (s pagination)
|
|
- ⏸️ API: POST /api/activities/[id]/messages
|
|
- ⏸️ API: DELETE /api/messages/[id] (delete vlastnej správy)
|
|
- ⏸️ Validácia: len pre prihlásených účastníkov
|
|
- ⏸️ Validácia: max 500 znakov na správu
|
|
- ⏸️ Real-time setup (Pusher/Ably konfigurácia alebo polling endpoint)
|
|
- ⏸️ Unread message tracking (Message.read field)
|
|
- ⏸️ API: PUT /api/messages/mark-read
|
|
|
|
### Frontend - Chat UI
|
|
- ⏸️ Chat UI komponenta (sidebar/panel na detaile aktivity)
|
|
- ⏸️ Toggle button na otvorenie/zatvorenie chatu
|
|
- ⏸️ Message list (scrollable container)
|
|
- ⏸️ Message bubble komponenta (left/right podľa odosielateľa)
|
|
- ⏸️ Zobrazenie mena a fotky odosielateľa
|
|
- ⏸️ Timestamp pre každú správu (relatívny čas: "5 min ago")
|
|
- ⏸️ Message input field (textarea s auto-resize)
|
|
- ⏸️ Send button (disabled ak prázdne)
|
|
- ⏸️ Character counter (500/500)
|
|
|
|
### Real-time funkcie
|
|
- ⏸️ Real-time message receiving (Pusher/Ably integration)
|
|
- ⏸️ Auto-scroll na novú správu (smooth scroll)
|
|
- ⏸️ Unread message badge (počet neprečítaných)
|
|
- ⏸️ "Typing..." indikátor (optional)
|
|
- ⏸️ Message delivered/read status (optional)
|
|
|
|
### UX vylepšenia
|
|
- ⏸️ Emoji picker (optional - React Emoji Picker)
|
|
- ⏸️ Message delete option (len vlastné správy)
|
|
- ⏸️ "Load more" pre staršie správy (pagination)
|
|
- ⏸️ Empty state ("Začnite konverzáciu...")
|
|
- ⏸️ Loading skeleton pre načítavanie správ
|
|
- ⏸️ Error handling (offline, failed send)
|
|
- ⏸️ Responzívny dizajn (mobile drawer)
|
|
|
|
### Výsledné funkcie:
|
|
- ⏸️ Chat funguje
|
|
- ⏸️ Real-time updates
|
|
- ⏸️ Len pre účastníkov
|
|
- ⏸️ Message history
|
|
|
|
---
|
|
|
|
## US-017: AI Chatbot pre support
|
|
|
|
**Status:** 📋 PLANNED
|
|
|
|
Ako používateľ
|
|
chcem sa opýtať AI na otázky o platforme
|
|
aby som rýchlo našiel odpovede na moje otázky o platforme
|
|
|
|
**Vývojár:** -
|
|
|
|
### Tasky:
|
|
### Backend - AI Infrastructure
|
|
- ⏸️ API: POST /api/ai/support-chat
|
|
- ⏸️ OpenAI Assistants API integration
|
|
- ⏸️ API rate limiting (10 requests/day pre free users)
|
|
- ⏸️ Token usage tracking a cost monitoring
|
|
- ⏸️ Error handling a fallback responses
|
|
- ⏸️ API: GET /api/ai/chat-history (pre daného používateľa)
|
|
- ⏸️ API: DELETE /api/ai/chat-history (vymazanie histórie)
|
|
|
|
### RAG Setup (Retrieval Augmented Generation)
|
|
- ⏸️ Pinecone/Supabase Vector database setup
|
|
- ⏸️ Knowledge base creation (FAQ dokumenty)
|
|
- ⏸️ Platform guide embeddings (ako používať features)
|
|
- ⏸️ FAQ dokumenty embeddings
|
|
- ⏸️ Vector search implementation
|
|
- ⏸️ Context injection do AI promptu
|
|
- ⏸️ Relevance scoring a filtering
|
|
|
|
### Context-Aware Features
|
|
- ⏸️ Current page detection (URL tracking)
|
|
- ⏸️ User profile info injection (ak prihlásený)
|
|
- ⏸️ Recent user actions tracking (last 5 actions)
|
|
- ⏸️ Dynamic prompt construction based on context
|
|
- ⏸️ Session-based conversation memory
|
|
|
|
### Frontend - Chat Widget
|
|
- ⏸️ Floating chat button (bottom right, sticky)
|
|
- ⏸️ Badge notification (nová odpoveď)
|
|
- ⏸️ Chat window komponenta (minimize/maximize/close)
|
|
- ⏸️ Chat header s titulom a actions
|
|
- ⏸️ Message list (user + AI bubbles)
|
|
- ⏸️ Message input field
|
|
- ⏸️ Send button
|
|
- ⏸️ Loading indicator (typing dots)
|
|
- ⏸️ Scroll to bottom button
|
|
|
|
### Quick Actions
|
|
- ⏸️ Quick action buttons: "Ako vytvoriť aktivitu?"
|
|
- ⏸️ Quick action buttons: "Ako sa prihlásiť?"
|
|
- ⏸️ Quick action buttons: "Ako nájsť aktivity?"
|
|
- ⏸️ Quick action buttons: "Ako upraviť profil?"
|
|
- ⏸️ Dynamic suggestions based on page
|
|
|
|
### Advanced Features
|
|
- ⏸️ Chat history persistence (conversation_id v localStorage)
|
|
- ⏸️ "Nová konverzácia" button (reset context)
|
|
- ⏸️ Escalation to human support button
|
|
- ⏸️ Human support form (meno, email, správa)
|
|
- ⏸️ Multilingual support (SK/EN auto-detection)
|
|
- ⏸️ Copy response button
|
|
- ⏸️ Thumbs up/down feedback
|
|
- ⏸️ "Bolo to užitočné?" feedback
|
|
|
|
### Analytics
|
|
- ⏸️ Common questions tracking (analytics dashboard)
|
|
- ⏸️ User satisfaction metrics (feedback aggregation)
|
|
- ⏸️ Response time monitoring
|
|
- ⏸️ Escalation rate tracking
|
|
- ⏸️ Most helpful answers identification
|
|
|
|
### UX Polish
|
|
- ⏸️ Smooth animations (open/close, messages)
|
|
- ⏸️ Typing indicator when AI is responding
|
|
- ⏸️ Error states ("Niečo sa pokazilo, skúste znova")
|
|
- ⏸️ Offline detection a warning
|
|
- ⏸️ Mobile responsive design
|
|
- ⏸️ Keyboard shortcuts (ESC to close)
|
|
- ⏸️ Welcome message on first open
|
|
|
|
### Výsledné funkcie:
|
|
- ⏸️ AI chatbot funguje
|
|
- ⏸️ RAG s knowledge base
|
|
- ⏸️ Context-aware answers
|
|
- ⏸️ Chat history
|
|
|
|
|
|
## US-018: AI Matchmaking pre hráčov
|
|
|
|
**Status:** 📋 PLANNED
|
|
|
|
Ako používateľ
|
|
chcem aby AI našlo kompatibilných spoluhráčov
|
|
aby som hral s ľuďmi na mojej úrovni
|
|
|
|
**Vývojár:** -
|
|
|
|
### Tasky:
|
|
### Backend - Database & Models
|
|
- ⏸️ Prisma schema: MatchScore model (user1_id, user2_id, score, factors)
|
|
- ⏸️ Prisma schema: rozšírenie User (playStyle, preferredTimes, skillLevels)
|
|
- ⏸️ Database indexes pre rýchle vyhľadávanie
|
|
- ⏸️ Cache layer pre match scores (Redis - optional)
|
|
|
|
### Compatibility Algorithm
|
|
- ⏸️ Skill level matching algorithm (weight: 25%)
|
|
- ⏸️ Play style preferences matching (competitive/casual) (weight: 20%)
|
|
- ⏸️ Age group similarity calculation (weight: 15%)
|
|
- ⏸️ Location proximity (Haversine distance) (weight: 20%)
|
|
- ⏸️ Schedule compatibility analysis (weight: 10%)
|
|
- ⏸️ Past activity ratings correlation (weight: 10%)
|
|
- ⏸️ Sport preferences overlap
|
|
- ⏸️ Final score calculation (weighted sum 0-100%)
|
|
|
|
### AI Integration
|
|
- ⏸️ OpenAI embeddings generation pre user profiles
|
|
- ⏸️ Vector similarity search (cosine similarity)
|
|
- ⏸️ Embedding storage (Pinecone/Supabase Vector)
|
|
- ⏸️ Batch embedding generation (pre existing users)
|
|
- ⏸️ Incremental embedding updates (pri zmene profilu)
|
|
- ⏸️ API: POST /api/ai/match-users
|
|
|
|
### Backend APIs
|
|
- ⏸️ API: GET /api/users/matches (top matches pre používateľa)
|
|
- ⏸️ API: GET /api/activities/[id]/suggested-users (pre danú aktivitu)
|
|
- ⏸️ API: POST /api/matches/[userId]/invite (pozvať matched usera)
|
|
- ⏸️ Match score caching (24h refresh)
|
|
- ⏸️ Pagination pre match results
|
|
- ⏸️ Filtering options (min score, max distance)
|
|
|
|
### Frontend - Match Discovery
|
|
- ⏸️ "Nájdi mi spoluhráča" feature page (/find-partners)
|
|
- ⏸️ Match score zobrazenie (1-100% progress bar + badge)
|
|
- ⏸️ Match card komponenta (avatar, meno, score, factors)
|
|
- ⏸️ Match explanation tooltip: "Podobná úroveň, blízka lokalita..."
|
|
- ⏸️ "Perfect match" badge (90%+ score) - special styling
|
|
- ⏸️ "Good match" badge (70-89%)
|
|
- ⏸️ Skill level indicators (beginner/intermediate/advanced)
|
|
|
|
### Frontend - Activity Integration
|
|
- ⏸️ Suggested users section na activity detail
|
|
- ⏸️ "Odporúčaní spoluhráči" widget (top 3)
|
|
- ⏸️ Invite matched user button
|
|
- ⏸️ Invite modal (personalizovaná správa)
|
|
- ⏸️ Toast notifikácia po odoslaní pozvánky
|
|
|
|
### Match Breakdown UI
|
|
- ⏸️ Expandable match details (klik na match card)
|
|
- ⏸️ Factor breakdown visualization:
|
|
- ⏸️ Skill level match (progress bar)
|
|
- ⏸️ Location proximity (distance in km)
|
|
- ⏸️ Schedule compatibility (calendar icon)
|
|
- ⏸️ Play style match (competitive/casual)
|
|
- ⏸️ Common sports (badge list)
|
|
- ⏸️ "Prečo sme kompatibilní" text explanation (AI-generated)
|
|
|
|
### Email Digest
|
|
- ⏸️ Weekly "Best matches" email template
|
|
- ⏸️ Email service integration (SendGrid/Resend)
|
|
- ⏸️ Cron job: weekly match calculation a email send
|
|
- ⏸️ Top 5 matches v emaili
|
|
- ⏸️ CTA button: "Pozri všetky matched"
|
|
- ⏸️ Unsubscribe option
|
|
|
|
### User Preferences
|
|
- ⏸️ Match preferences page (/profile/match-preferences)
|
|
- ⏸️ Toggle: enable/disable matchmaking
|
|
- ⏸️ Max distance slider (5-50 km)
|
|
- ⏸️ Preferred age range
|
|
- ⏸️ Play style preference (competitive/casual/both)
|
|
- ⏸️ Notification frequency (instant/weekly/never)
|
|
|
|
### Analytics & Optimization
|
|
- ⏸️ Match success tracking (koľko invites accepted)
|
|
- ⏸️ Algorithm performance monitoring
|
|
- ⏸️ A/B testing framework (different weight combinations)
|
|
- ⏸️ User feedback collection ("Bol toto dobrý match?")
|
|
|
|
### Výsledné funkcie:
|
|
- ⏸️ Matchmaking algorithm
|
|
- ⏸️ Compatibility scores
|
|
- ⏸️ User suggestions
|
|
- ⏸️ Weekly digest
|
|
|
|
---
|
|
|
|
## US-019: Reset hesla cez email
|
|
|
|
**Status:** ✅ HOTOVÉ
|
|
|
|
Ako používateľ
|
|
chcem si obnoviť heslo ak som ho zabudol
|
|
aby som sa mohol znova prihlásiť do aplikácie
|
|
|
|
**Vývojár:** Kamil Berecký
|
|
|
|
### Tasky:
|
|
- ✅ Prisma schema: PasswordReset model (token, userId, expiresAt, used)
|
|
- ✅ Email service setup (Brevo - 300 emailov/deň zadarmo)
|
|
- ✅ Verified sender email (kberecky@gmail.com) v Brevo dashboard
|
|
- ✅ API: POST /api/auth/forgot-password (generuje token a posiela email)
|
|
- ✅ API: POST /api/auth/reset-password (resetuje heslo s tokenom)
|
|
- ✅ Email template pre reset link (HTML s responsive dizajnom)
|
|
- ✅ Stránka /auth/forgot-password (formulár na zadanie emailu)
|
|
- ✅ Stránka /auth/reset-password?token=xxx (formulár na nové heslo)
|
|
- ✅ Validácia tokenu (expiracia 1 hodina, used flag)
|
|
- ✅ Bezpečné generovanie tokenu (crypto.randomBytes + SHA-256)
|
|
- ✅ Hash nového hesla (scrypt s Better Auth parametrami: N:16384, r:16, p:1, dkLen:64)
|
|
- ✅ Vymazanie tokenu po použití (used = true)
|
|
- ✅ Správne URL pre frontend (NEXT_PUBLIC_FRONTEND_URL)
|
|
- ✅ "Zabudli ste heslo?" link na signin stránke
|
|
- ✅ Success/Error feedback messages (slovenský jazyk)
|
|
- ✅ Rate limiting (max 3 requesty za hodinu na email)
|
|
- ✅ Responzívny dizajn
|
|
- ✅ Development mode (console log namiesto emailu keď BREVO_API_KEY="brevo_test_key")
|
|
- ✅ Production mode (Brevo API integration s messageId tracking)
|
|
- ✅ Všetky sessions sa vymažú po resete (force re-login)
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Odoslanie reset emailu funguje (Brevo API)
|
|
- ✅ Token validácia funguje (expiracia, duplicita, použitie)
|
|
- ✅ Reset hesla funguje s kompatibilným scrypt hashom
|
|
- ✅ Email template je pekný a funkčný s correct frontend URL
|
|
- ✅ Development mode bez Brevo API kľúča (console log)
|
|
- ✅ Production ready s Brevo integration
|
|
- ✅ Všetky sessions sa vymažú po resete (security)
|
|
- ✅ Prihlásenie funguje po resete hesla
|
|
|
|
**Technické detaily:**
|
|
- Email service: Brevo (@getbrevo/brevo SDK)
|
|
- Password hashing: Node.js crypto scrypt (Better Auth compatible)
|
|
- Token storage: PostgreSQL (PasswordReset table)
|
|
- Email delivery: 300/day limit (Brevo free tier)
|
|
|
|
---
|
|
|
|
## US-020: Stránka "Moje aktivity"
|
|
|
|
**Status:** ✅ HOTOVÉ
|
|
|
|
Ako používateľ
|
|
chcem mať prehľad všetkých mojich aktivít (vytvorených aj prihlásených) na jednom mieste
|
|
aby som vedel, na čo som sa prihlásil a čo som vytvoril
|
|
|
|
**Vývojár:** Jozef Kovalčín
|
|
|
|
### Tasky:
|
|
- ✅ API: GET /api/activities/my (vracia created a joined aktivity)
|
|
- ✅ Backend logika: created = organizerId === userId
|
|
- ✅ Backend logika: joined = participation existuje pre userId (vrátane vlastných aktivít)
|
|
- ✅ Stránka /my-activities s tab navigáciou
|
|
- ✅ Tab "Vytvorené" (created activities)
|
|
- ✅ Tab "Prihlásené" (joined activities vrátane vlastných)
|
|
- ✅ Štatistiky: Total Created, Total Joined, Upcoming Created, Upcoming Joined
|
|
- ✅ Activity cards s badge "Organizátor" pre vytvorené
|
|
- ✅ Badge "Opakovaná" pre recurring aktivity
|
|
- ✅ Smart back navigation (sessionStorage tracking)
|
|
- ✅ Delete button pre organizátorov na detail stránke
|
|
- ✅ Redirect na source page po zmazaní (activities vs my-activities)
|
|
- ✅ Empty states pre obe záložky
|
|
- ✅ CTA buttons: "Vytvoriť aktivitu" / "Prehliadať aktivity"
|
|
- ✅ Responzívny dizajn
|
|
|
|
### Výsledné funkcie:
|
|
- ✅ Backend API vracia vytvorené aj prihlásené aktivity
|
|
- ✅ Tab navigácia medzi vytvorenými a prihlásenými
|
|
- ✅ Štatistiky zobrazujú správne počty
|
|
- ✅ Activity cards s visual badges (Organizátor, Opakovaná)
|
|
- ✅ Delete funkcia pre organizátorov s smart navigation
|
|
- ✅ Smart back button tracking (vracia na správnu stránku)
|
|
- ✅ Empty states s CTA akciami
|
|
|
|
---
|
|
|
|
## Legenda
|
|
|
|
- ✅ Hotové (Completed)
|
|
- 🔄 WIP (Work In Progress - rozrobené)
|
|
- ⏸️ Nerealizované (Planned but not started)
|
|
- 📋 PLANNED (Celá user story je len naplánovaná)
|
|
|
|
---
|