SportBuddy/USER_STORIES.md
Jozef Kovalčín a3f926c44f feat: recurring activities, my activities page, map view with markers
- 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
2025-11-13 17:58:34 +01:00

34 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 (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á)