feat: initial project setup with frontend mockup

- Docker Compose setup with nginx reverse proxy and frontend service
- React + Vite + Tailwind CSS configuration
- Complete mockup of all application views:
  - Authentication (login/register)
  - Events list and selection
  - Event chat with matchmaking
  - 1:1 private chat with WebRTC P2P video transfer mockup
  - Partner rating system
  - Collaboration history
- Mock data for users, events, messages, matches, and ratings
- All UI text and messages in English
- Project documentation (CONTEXT.md, TODO.md, README.md, QUICKSTART.md)
This commit is contained in:
Radosław Gierwiało
2025-11-12 17:50:44 +01:00
commit 80ff4a70bf
38 changed files with 7213 additions and 0 deletions

253
README.md Normal file
View File

@@ -0,0 +1,253 @@
# spotlight.cam 🎥
Aplikacja webowa (PWA) dla społeczności tanecznej umożliwiająca matchmaking, czatowanie i wymianę nagrań wideo bezpośrednio przez WebRTC (peer-to-peer).
## 🚀 Funkcjonalności (Mockup)
### ✅ Zaimplementowane (Frontend Mockup)
- **Autoryzacja** - logowanie i rejestracja (mock)
- **Wybór eventu** - przeglądanie i dołączanie do eventów tanecznych
- **Czat eventowy** - publiczny czat dla uczestników eventu z listą aktywnych użytkowników
- **Matchmaking** - łączenie się w pary bezpośrednio z czatu
- **Czat 1:1** - prywatny czat dla sparowanych użytkowników
- **📹 Transfer wideo (mockup WebRTC)** - symulacja przesyłania filmów P2P
- Wybór pliku z galerii urządzenia
- Symulacja połączenia WebRTC (connecting → connected)
- Progress bar transferu pliku
- Status połączenia (disconnected/connecting/connected/failed)
- Fallback: wysyłanie linków do filmów (Google Drive, Dropbox)
- **System ocen** - ocenianie partnera po współpracy (1-5 gwiazdek, komentarz)
- **Historia współprac** - lista poprzednich matchów i otrzymanych ocen
### 🔜 Do implementacji w kolejnych etapach
- **Backend API** (Node.js + Express + PostgreSQL)
- **WebSocket** (Socket.IO) - real-time chat i signaling
- **WebRTC P2P** - prawdziwy transfer plików przez RTCDataChannel
- **Autentykacja JWT** - prawdziwa autoryzacja
- **Baza danych** - PostgreSQL z pełnym schematem
## 🛠️ Stack Technologiczny
### Frontend (Current)
- **React 18** - framework UI
- **Vite** - build tool i dev server
- **Tailwind CSS** - stylowanie
- **React Router** - routing
- **Lucide React** - ikony
- **Context API** - zarządzanie stanem (auth)
### Infrastructure
- **Docker Compose** - orkiestracja kontenerów
- **Nginx** - reverse proxy i serving statycznych plików
- **Node.js 20 Alpine** - kontener dla frontendu
## 📁 Struktura projektu
```
spotlightcam/
├── docker-compose.yml # Konfiguracja Docker Compose
├── nginx/ # Konfiguracja Nginx
│ ├── nginx.conf # Główna konfiguracja
│ └── conf.d/
│ └── default.conf # Proxy do frontendu (i backendu w przyszłości)
├── frontend/ # React PWA
│ ├── src/
│ │ ├── components/ # Komponenty React
│ │ │ ├── common/
│ │ │ ├── chat/
│ │ │ ├── video/
│ │ │ └── layout/ # Navbar, Layout
│ │ ├── pages/ # Strony aplikacji
│ │ │ ├── LoginPage.jsx
│ │ │ ├── RegisterPage.jsx
│ │ │ ├── EventsPage.jsx
│ │ │ ├── EventChatPage.jsx
│ │ │ ├── MatchChatPage.jsx # 🔥 Główna funkcjonalność - mockup WebRTC
│ │ │ ├── RatePartnerPage.jsx
│ │ │ └── HistoryPage.jsx
│ │ ├── contexts/ # Context API (AuthContext)
│ │ ├── hooks/ # Custom hooks
│ │ ├── utils/ # Utility functions
│ │ ├── services/ # API services (przyszłość)
│ │ └── mocks/ # Mock data
│ │ ├── events.js
│ │ ├── users.js
│ │ ├── messages.js
│ │ └── matches.js
│ ├── Dockerfile
│ └── package.json
└── docs/ # Dokumentacja
├── CONTEXT.md # Opis projektu
└── TODO.md # Lista zadań
```
## 🚀 Uruchomienie projektu
### Wymagania
- Docker i Docker Compose
- (Opcjonalnie) Node.js 20+ dla developmentu bez Dockera
### Uruchomienie z Docker Compose
1. Sklonuj repozytorium:
```bash
git clone <repo-url>
cd spotlightcam
```
2. Uruchom Docker Compose:
```bash
docker-compose up --build
```
3. Otwórz przeglądarkę:
```
http://localhost:8080
```
Frontend Vite dev server działa na porcie 5173 (wewnątrz kontenera), ale jest dostępny przez Nginx na porcie 8080.
### Zatrzymanie
```bash
docker-compose down
```
### Rebuild po zmianach
```bash
docker-compose up --build
```
## 🧪 Testowanie aplikacji
### Flow testowy:
1. **Logowanie** (http://localhost:8080/login)
- Wpisz dowolny email i hasło (mock auth)
- Zostaniesz zalogowany jako użytkownik "john_dancer"
2. **Wybór eventu** (http://localhost:8080/events)
- Wybierz jeden z eventów (np. "Warsaw Dance Festival 2025")
- Kliknij "Dołącz do czatu"
3. **Czat eventowy**
- Zobacz mockowane wiadomości w czacie publicznym
- Po prawej stronie lista aktywnych użytkowników
- Kliknij ikonę "+" przy użytkowniku aby się z nim połączyć
- Po 1 sekundzie zostaniesz przekierowany do prywatnego czatu 1:1
4. **Czat 1:1 - Główna funkcjonalność!** 🔥
- Zobacz profil partnera na górze
- Status WebRTC połączenia (disconnected/connecting/connected)
- **Wysyłanie filmu przez WebRTC (mockup):**
- Kliknij "Wyślij film (WebRTC)"
- Wybierz plik wideo z dysku
- Kliknij "Wyślij film (P2P)"
- Zobacz symulację:
- Status WebRTC: connecting → connected
- Progress bar transferu (0% → 100%)
- Informacja o przesłanym pliku w czacie
- **Fallback - wysyłanie linku:**
- Kliknij "Link"
- Wklej URL do filmu (np. Google Drive)
- Link pojawi się w czacie
5. **Ocena partnera**
- Kliknij "Zakończ i oceń"
- Wybierz ocenę (1-5 gwiazdek)
- Dodaj komentarz (opcjonalnie)
- Zaznacz czy chcesz współpracować ponownie
- Kliknij "Zapisz ocenę"
6. **Historia współprac** (http://localhost:8080/history)
- Zobacz listę twoich poprzednich matchów
- Zobacz otrzymane oceny
- Zobacz statystyki
## 🎨 Główne widoki
### LoginPage & RegisterPage
- Formularz logowania/rejestracji
- Mock autoryzacja (dowolny email/hasło)
- Info box o demo mode
### EventsPage
- Karty eventów z worldsdc.com
- Informacje: lokalizacja, daty, liczba uczestników
- Przycisk "Dołącz do czatu"
### EventChatPage
- Czat publiczny dla eventu
- Lista aktywnych użytkowników (sidebar)
- Wysyłanie wiadomości
- Matchmaking przez ikonę "+"
### MatchChatPage ⭐ (Główna funkcjonalność)
- Profil partnera
- Status WebRTC połączenia (disconnected/connecting/connected/failed)
- Czat 1:1
- **Mockup transferu wideo WebRTC:**
- Wybór pliku z galerii
- Symulacja nawiązywania połączenia WebRTC
- Progress bar (chunking simulation)
- Info o szyfrrowaniu E2E (DTLS/SRTP)
- Fallback: wysyłanie linków do filmów
- Przycisk "Zakończ i oceń"
### RatePartnerPage
- Ocena partnera (1-5 gwiazdek)
- Pole komentarza
- Checkbox "Chcę współpracować ponownie"
### HistoryPage
- Lista matchów
- Otrzymane oceny
- Statystyki użytkownika
## 📝 Mock Data
Aplikacja używa mock data dla wszystkich funkcjonalności:
- **Users**: 5 użytkowników testowych
- **Events**: 4 eventy (Warsaw, Berlin, Prague, Krakow)
- **Messages**: Przykładowe wiadomości w czatach
- **Matches**: 3 przykładowe matche
- **Ratings**: 3 przykładowe oceny
Mock data znajduje się w `frontend/src/mocks/`.
## 🔐 Bezpieczeństwo (Mockup)
W obecnej wersji (mockup):
- ✅ Autoryzacja jest symulowana (localStorage)
- ✅ WebRTC status jest symulowany
- ⏳ Backend API będzie dodany w kolejnym etapie
- ⏳ Prawdziwe WebRTC P2P będzie zaimplementowane później
- ⏳ JWT autoryzacja będzie dodana później
## 🎯 Kolejne kroki
Zobacz `docs/TODO.md` dla pełnej listy zadań. Najważniejsze:
1. **Backend setup** - Node.js + Express + PostgreSQL
2. **WebSocket** - Socket.IO dla real-time communication
3. **WebRTC Signaling** - Serwer sygnalizacyjny (SDP/ICE exchange)
4. **WebRTC P2P Transfer** - Prawdziwy transfer plików przez RTCDataChannel
5. **Autentykacja** - JWT + bcrypt
6. **Testy** - Unit, integration, E2E
7. **Deployment** - Production setup
## 📖 Dokumentacja
- `docs/CONTEXT.md` - Szczegółowy opis projektu i architektury
- `docs/TODO.md` - Lista zadań do zrobienia
## 🤝 Contributing
Projekt jest w fazie MVP. Backend i prawdziwy WebRTC będą dodane w kolejnych etapach.
## 📄 License
TBD
---
**Uwaga:** To jest wersja mockup frontendu. WebRTC transfer jest symulowany. Pełna funkcjonalność (backend + prawdziwy WebRTC) będzie dostępna w kolejnych wersjach.