Pub Kviz je web aplikacija koja omogućava organizaciju i praćenje pub kviz takmičenja. Korisnici se mogu registrovati i prijaviti na platformu, pridružiti se timovima ili kreirati sopstveni tim, učestvovati u takmičenjima po sezonama, te pratiti rang listu svih timova. Kapiten tima ima posebne privilegije — može prijaviti tim na takmičenje i upravljati zahtevima za članstvo.
| Sloj | Tehnologije |
|---|---|
| Frontend | React 19, Next.js 16, Tailwind CSS 4, TypeScript |
| Backend | Next.js API rute, NextAuth, JWT (jose / jsonwebtoken) |
| Baza podataka | PostgreSQL, Drizzle ORM |
| Dokumentacija | Swagger (swagger-jsdoc + swagger-ui-react) |
| Testiranje | Vitest, Jest, Playwright, Testing Library |
| Deployment | Vercel (aplikacija), Neon (baza podataka) |
- Docker i Docker Compose
- Node.js 20+ (opciono, za lokalni razvoj bez Dockera)
Za rad unutar Docker kontejnera, kreiraj .env.docker fajl. Primeti da DATABASE_URL koristi db (ime servisa iz docker-compose.yml) umesto localhost:
DATABASE_URL=postgresql://user:password@db:5432/database
JWT_SECRET=neki-string NEXTAUTH_SECRET=neki-string NEXTAUTH_URL=http://localhost:3000
DB_USER=user DB_PASSWORD=password DB_NAME=database
docker compose up --buildOva komanda pokreće dva servisa:
- frontend – Next.js aplikacija
- backend – API servis
Aplikacija će biti dostupna na http://localhost:3000.
- Instaliraj zavisnosti:
npm install-
Kreiraj
.envfajl u root direktorijumu i popuni neophodne promenljive (pogledaj sekciju Environment promenljive). -
Pokreni migracije i seed baze:
npm run db:migrate
npm run db:seed- Pokreni razvojni server:
npm run devAplikacija će biti dostupna na http://localhost:3000.
Kreiraj .env fajl u root direktorijumu projekta sa sledećim promenljivama:
# Baza podataka
DATABASE_URL=postgresql://korisnik:lozinka@host:5432/pub_kviz
# NextAuth
NEXTAUTH_SECRET=tvoj_tajni_kljuc
NEXTAUTH_URL=http://localhost:3000
# JWT
JWT_SECRET=tvoj_jwt_tajni_kljuc/
├── src/
│ ├── app/
│ │ ├── api/ # Next.js API rute (REST endpoints)
│ │ ├── profile/ # Stranica profila korisnika
│ │ ├── team/ # Stranice vezane za timove
│ │ ├── events/ # Stranice takmičenja i događaja
│ │ └── ... # Ostale stranice aplikacije
│ ├── components/ # Višekratno upotrebljive React komponente
│ └── db/ # Drizzle ORM konfiguracija i šeme
├── docker-compose.yml
├── drizzle.config.ts
├── next.config.ts
├── tailwind.config.ts
├── tsconfig.json
└── package.json
- Registracija novog korisnika
- Prijava putem NextAuth sesija
- Zaštićene rute za ulogovane korisnike
- Kreiranje novog tima
- Pregled i pretraga postojećih timova
- Slanje zahteva za članstvo u timu
- Kapiten tima može prihvatiti ili odbiti zahteve za članstvo
- Pregled dostupnih takmičenja po sezonama
- Kapiten može prijaviti tim na takmičenje
- Praćenje statusa prijave
- Prikaz rang liste svih timova u okviru odabranog takmičenja i sezone
- Vizualizacija podataka putem Recharts grafikona
- Swagger UI dostupan na
/api-docs - Sve API rute su dokumentovane putem JSDoc anotacija
Frontend i backend su integrisani unutar iste Next.js aplikacije. Pokretanjem aplikacije (Docker ili npm run dev) dostupni su i korisnički interfejs i API na istom portu.
Registracija korisnika:
POST /api/auth/register
Content-Type: application/json
{
"username": "korisnik123",
"email": "korisnik@primer.com",
"password": "sigurna_lozinka"
}Prijava tima na takmičenje:
POST /api/events/{eventId}/register
Authorization: Bearer <token>
{
"teamId": 1
}Preuzimanje rang liste:
GET /api/leaderboard?eventId=1&seasonId=2Nakon pokretanja aplikacije, interaktivna API dokumentacija dostupna je na:
http://localhost:3000/api-docs
Projekat koristi tri vrste testova:
npm run testZa watch režim:
npm run test:watchJest se koristi za testiranje API ruta putem next-test-api-route-handler i supertest.
npx jestnpm run test:e2ePlaywright testovi zahtevaju pokrenut server. Preporučuje se pokrenuti
npm run devu zasebnom terminalu pre pokretanja e2e testova.
npm run typecheckAplikacija je postavljena na Vercel platformi. Svaki push na main granu automatski pokreće novi deployment.
Za ručno kreiranje build-a:
npm run buildBaza podataka je hostovana na Neon PostgreSQL platformi. Konekcioni string se podešava putem DATABASE_URL environment promenljive u Vercel kontrolnoj tabli.
npm run db:migratePokrenuti nakon svake izmene šeme baze podataka.
- Next.js dokumentacija
- Drizzle ORM dokumentacija
- Tailwind CSS dokumentacija
- NextAuth.js dokumentacija
- Neon dokumentacija
- Swagger / OpenAPI