Strona festiwalu muzycznego ze sklepem i panel administracyjny.
Link: https://festival-page.vertyll.dev
| Katalog | Opis |
|---|---|
backend/ |
Spring Boot 4.1, Java 25 - API |
frontend/packages/shared/ |
@festival/shared: typy modeli API, klient HTTP z CSRF, sesja, walidacja, formaty |
frontend/apps/page/ |
Strona festiwalu i sklep |
frontend/apps/admin/ |
Panel administracyjny |
frontend/Dockerfile |
Wieloetapowy obraz dla obu front-endów (--build-arg APP=page|admin) |
docker-compose.local.yml, infra/ |
Lokalnie: MongoDB + Garage + mock logowania Google, opcjonalnie cały system (profil app) |
.github/workflows/ |
CI/CD |
- Spring Boot.
- Java.
- Maven.
- MongoDB.
- JUnit.
- Mockito.
- Lombok.
- Spring Security.
- Spring Data MongoDB.
- Spring Web.
cd backend
./mvnw spotless:apply # formatowanie
./mvnw verify # kompilacja z Error Prone/NullAway, testy, Spotless, PMD, SpotBugsImportant
Polecenie verify wymaga środowiska skonteneryzowanego dla Testcontainers.
| Pakiet | Odpowiedzialność |
|---|---|
security |
Spring Security, logowanie Google (OIDC), CSRF, /api/me |
administrator |
Lista administratorów panelu |
catalog.{product,category,attribute} |
Produkty z opcjami i wariantami, kategorie, atrybuty |
lineup.{artist,stage} |
Artyści i sceny |
content.{news,sponsor} |
Newsy i sponsorzy |
settings |
Ustawienia sklepu |
shop.{address,wishlist,order} |
Adres dostawy, lista życzeń, zamówienia |
media |
Upload zdjęć do Garage |
i18n |
Tłumaczenia interfejsu w MongoDB (ICU), edycja w panelu |
common, config |
Błędy (RFC 9457), walidacja, konfiguracja Mongo/Jackson/zegara |
Domyślny profil to local; obraz Dockera ustawia prod (SPRING_PROFILES_ACTIVE=prod).
| Plik | Zawartość |
|---|---|
application.properties |
wspólna konfiguracja, bez zmiennych środowiskowych |
application-local.properties |
pełna konfiguracja lokalna (usługi z docker-compose.local.yml) |
application-prod.properties |
same odwołania ${...} do zmiennych środowiskowych (tabela poniżej) |
W profilu local logowanie Google zastępuje mock-oauth2-server.
Na ekranie logowania wpisuje się dowolną nazwę użytkownika, np. admin, a mock wystawia token z adresem <nazwa>@festival.local.
Użytkownik admin@festival.local jest administratorem panelu (festival.security.bootstrap-admins).
Na produkcji klienci Google OAuth muszą mieć dozwolone adresy przekierowania:
${FESTIVAL_PAGE_URL}/login/oauth2/code/page${FESTIVAL_ADMIN_URL}/login/oauth2/code/admin
Zmienne środowiskowe profilu prod:
| Zmienna | Opis |
|---|---|
MONGODB_URI |
np. mongodb://localhost:27017/festival |
FESTIVAL_PAGE_URL, FESTIVAL_ADMIN_URL |
publiczne adresy front-endów (redirect URI logowania) |
GOOGLE_PAGE_CLIENT_ID, GOOGLE_PAGE_CLIENT_SECRET |
klient OAuth strony festiwalu |
GOOGLE_ADMIN_CLIENT_ID, GOOGLE_ADMIN_CLIENT_SECRET |
klient OAuth panelu |
FESTIVAL_BOOTSTRAP_ADMINS |
e-maile administratorów dopisywane przy starcie |
FESTIVAL_CHECKOUT_ENABLED |
czy można składać zamówienia (true/false) |
S3_ENDPOINT, S3_REGION, S3_BUCKET |
Garage: API S3, region (s3_region z garage.toml), bucket |
S3_ACCESS_KEY, S3_SECRET_ACCESS_KEY |
klucz Garage z uprawnieniem zapisu do bucketa |
S3_PUBLIC_BASE_URL |
publiczny adres bucketa (web endpoint Garage) |
INTERNAL_CA_CERT |
CA klastra (TLS do MongoDB i Garage): file:/tls/ca.crt |
- Next.js.
- React.
- Node.js.
- Tailwind CSS.
- styled-components.
Oba front-endy i kod współdzielony (packages/shared) to monorepo pnpm zarządzane przez Turborepo.
cd frontend
pnpm install
pnpm dev:page # http://localhost:3000
pnpm dev:admin # http://127.0.0.1:3001
pnpm build # turbo build obu aplikacji
pnpm lint && pnpm typecheck && pnpm format:check && pnpm check:translationsNote
Adres back-endu dla next dev znajduje się w apps/*/.env.development.
Important
Wymagania: Docker, Java 25, Node.js 24 (pnpm przez Corepack).
docker compose -f docker-compose.local.yml up -d # MongoDB :27017, Garage :3900 (S3), :3902 (publiczny odczyt) i konsola :3909, mock Google :8090
cd backend && ./mvnw spring-boot:run # :8080
cd frontend && pnpm install && pnpm dev:page # http://localhost:3000
cd frontend && pnpm dev:admin # http://127.0.0.1:3001Albo cały system w kontenerach: docker compose -f docker-compose.local.yml --profile app up -d --build.
| Strona | Panel |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |





