Moduł: Publiczna strona klubu

Każdy klub Shootero dostaje publiczną stronę pod adresem portal.shootero.pl/SLUG, gdzie SLUG to unikalny identyfikator klubu (np. klub-strzelecki-warszawa).

Strona służy do:

  • Prezentacji klubu (opis, kontakt, social media, mapa)
  • Pokazywania publicznych wydarzeń (kalendarz)
  • Ofertowania treningów
  • Listy zawodów
  • Sprzedaży voucherów online (osobny moduł)

Konfiguracja

Wymagana rola: admin lub zarzad (członek zarządu klubu).

Wejdź w /club/public-page (link w panelu admin sidebar).

Konfigurowalne moduły

Każdy moduł można włączyć/wyłączyć niezależnie:

ModułCo pokazujeWymaga
Kalendarzcalendar_events z flagą is_public=1Wpisy w /calendar z zaznaczonym "publiczne"
Treningitrainings z flagą is_public=1Trening z polem "publiczny" + (opcjonalnie) entry_fee
Zawodycompetitions z flagą is_public=1Zawody oznaczone jako publiczne
Sklep voucherówVouchery klubu (typ ticket/giftcard)Wymaga konfiguracji P24 + katalogu voucherów

Strona główna jest zawsze widoczna — pozostałe są opcjonalne.

Edycja treści

  • Slug URL — tylko rola admin może zmieniać (chroni publiczny URL klubu przed pomyłką).
  • Opis klubu — pole description (max 2000 znaków, plain text z preserved newlines).
  • Strona WWWwebsite_url (walidowane jako URL).
  • Facebook / Instagramsocial_facebook, social_instagram (URL).
  • Lokalizacja (mapa) — szerokość/długość geograficzna. Wyświetla OpenStreetMap iframe.
  • Hero image — zdjęcie tła sekcji głównej (JPG/PNG/WebP, max 5 MB, zalecane 1920×600px).

Branding

Branding (logo + kolory + custom CSS) konfiguruje się w Konfiguracja → Branding (/club-customization). Te ustawienia automatycznie stosują się do publicznej strony:

  • primary_color — kolor głównych elementów (hero gradient, CTA buttons)
  • navbar_bg — tło górnej nawigacji
  • logo_path — logo w navbar + footer
  • custom_css — dowolny CSS (uważnie — może popsuć layout)

Slug — zasady

  • Format: małe litery, cyfry, myślniki. Bez polskich znaków.
  • Długość: 2-60 znaków.
  • Zarezerwowane: admin, auth, api, pub, legal, help, portal, pay, dashboard, member, gdpr, 2fa, register, static, favicon.ico, robots.txt, k, c, club, shootero, www, mail, webhook, masterlogin, club-select, system-logo, demo — nie można użyć.
  • Auto-generated przy tworzeniu klubu z nazwy (Klub Strzelecki Warszawaklub-strzelecki-warszawa).

Zmiana slug = łamanie istniejących linków! Stare URL przestają działać. Pomyśl 2x przed zmianą.

Płatności online

Jeśli włączysz moduł Sklep voucherów, potrzebujesz konfiguracji bramki płatności:

  1. Załóż konto w Przelewy24 (~3 dni weryfikacji).
  2. Konfiguracja w Konfiguracja → Płatności → P24:
  • merchant ID
  • POS ID
  • API key
  • CRC key
  • Sandbox toggle (true do testów)
  1. Aktywacja p24_enabled = 1 w club_settings.

Bez tej konfiguracji moduł Sklep voucherów wciąż widoczny, ale przy próbie zakupu klient widzi error "klub nie ma skonfigurowanej bramki płatności".

Współpraca z innymi modułami

  • Kalendarz używa flagi is_public na poziomie wydarzenia. W panelu kalendarza zaznacz checkbox "Publiczne" żeby wydarzenie pojawiło się na stronie klubu.
  • Treningi — analogicznie, flaga w panelu treningu.
  • Zawody — domyślnie is_public=1 od migration_v34 (backfill).
  • Vouchery — patrz docs/user/modules/vouchers.md.

SEO

Publiczna strona klubu ma:

  • <title> = nazwa klubu
  • <meta description> = opis klubu (do 200 znaków)
  • Open Graph tags (og:title, og:description, og:image)
  • Strukturę: H1 = nazwa klubu, hierarchia H2/H3 z modułów

Linki w stopce: prowadzą do dokumentów prawnych (regulamin, polityka prywatności) — wymagane przez RODO i ustawę o świadczeniu usług drogą elektroniczną.

Bezpieczeństwo

  • Tenant isolation: wszystkie queries są scoped per club_id. Klub A nie widzi żadnych danych klubu B.
  • CSRF: form zapisu w /club/public-page chroniony tokenem.
  • Uploads: hero image walidowany przez MIME type + size limit + random filename (anti enumeration).
  • Slug change: tylko admin (nie zarzad) — chroni publiczny URL przed niezamierzoną zmianą.

Powiązane