2025-11-12 18:07:42 +01:00
# spotlight.cam - Project Context
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
**Peer-to-peer video exchange app for dance event participants**
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
## 📝 Quick Description
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
Aplikacja umożliwiająca użytkownikom łączenie się w pary, czatowanie, **przesyłanie filmów bezpośrednio peer-to-peer przez WebRTC** i ocenianie współpracy – bez przechowywania danych na serwerze.
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
Główna funkcjonalność: **WebRTC P2P video file transfer** (nie wymiana linków - to tylko fallback).
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
✅ Pełne wsparcie dla Android/iOS (przez przeglądarkę), bez hostowania plików, z backendem i frontendem działającym w ramach Docker Compose.
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
## 🧠 Główne założenia
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
- 🔒 **Prywatność:** Przesyłanie filmów bezpośrednio peer-to-peer przez WebRTC – żadnych plików wideo na serwerze. Opcjonalnie możliwość wymiany linków (np. Google Drive) jako fallback.
- 💬 **Czat + matchmaking:** Użytkownicy rejestrują się, wybierają event, trafiają na czat eventowy, łączą się w pary.
- 🤝 **1:1 collaboration:** Po potwierdzeniu – para znika z czatu publicznego i przechodzi do prywatnego.
- 📦 **Docker Compose:** Całość uruchamiana w kontenerach.
- 📱 **PWA:** Działa mobilnie i na desktopie.
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
## 🧱 Architektura systemu
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
```
Web client (PWA) ↔ Backend (Node.js + WebSocket + REST API) ↔ PostgreSQL
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
WebRTC P2P Connection:
Browser A ←──────────────────────→ Browser B
(Direct file transfer)
```
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
## 🐳 Docker Compose – komponenty
2025-11-12 17:50:44 +01:00
2025-11-20 22:34:05 +01:00
**Current (All Implemented):**
2025-11-12 18:07:42 +01:00
- `nginx` : Reverse proxy (port 8080)
2025-11-20 22:34:05 +01:00
- `frontend` : React/Vite/Tailwind PWA (port 5173 internal)
2025-11-12 18:07:42 +01:00
- `backend` : Node.js/Express/Socket.IO (port 3000 internal)
2025-11-20 22:34:05 +01:00
- `db` : PostgreSQL 15 with Prisma ORM
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-20 22:34:05 +01:00
## 🗃️ Modele bazy danych (Implemented)
2025-11-12 17:50:44 +01:00
2025-11-20 22:34:05 +01:00
- `users` : identyfikacja, email, hasło (bcrypt), avatar, profile data
- `events` : lista eventów (z worldsdc.com + manual entries)
- `divisions` : competition divisions (Novice, Intermediate, Advanced, etc.)
- `competition_types` : Jack & Jill, Strictly
- `event_user_heats` : declared competition heats per user per event
2025-11-12 18:07:42 +01:00
- `chat_rooms` : publiczne (event) i prywatne (match) pokoje
2025-11-20 22:34:05 +01:00
- `messages` : wiadomości tekstowe/linki (persisted)
- `matches` : relacja między dwoma użytkownikami (CUID slugs for security)
- `ratings` : oceny po wymianie nagraniami (1-5, komentarz, collaboration preference)
- `event_participants` : tracking event participation
- `event_checkin_tokens` : QR code check-in system
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
## 🔁 Flow użytkownika
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
1. **Rejestracja/Logowanie** użytkownika
2. **Wybór eventu** (lista z worldsdc.com) na którym użytkownik jest
3. **Czat eventowy** – matchmaking (lista aktywnych użytkowników)
4. **Potwierdzenie matcha** → przejście do prywatnego czatu 1:1
5. **Wybór pliku wideo z galerii** (nagranie odbywa się poza aplikacją)
6. **Przesłanie filmu przez WebRTC** (P2P, bez serwera) LUB wymiana linków (fallback)
7. **Ocena partnera** (1– 5 ⭐, komentarz, chęć ponownej współpracy)
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
## 💬 Tech Stack
2025-11-12 17:50:44 +01:00
2025-11-20 22:34:05 +01:00
### Frontend
2025-11-12 18:07:42 +01:00
- React 18 + Vite
- Tailwind CSS v3.4.0 (NOT v4)
- React Router
2025-11-20 22:34:05 +01:00
- Context API for state
- PWA (vite-plugin-pwa, Workbox service worker)
- socket.io-client for real-time
### Backend
- Node.js 20 + Express 4.18.2
- Socket.IO 4.8.1 (WebSocket)
- PostgreSQL 15 with Prisma ORM 5.8.0
- bcrypt + JWT authentication
2025-11-23 23:09:30 +01:00
- Jest + Supertest (286/286 tests passing, 73% coverage)
2025-11-20 22:34:05 +01:00
### WebRTC
- RTCPeerConnection (implemented)
- RTCDataChannel (file transfer)
- 16KB chunking (tested up to 700MB)
- STUN servers for NAT traversal
- E2E encryption (DTLS)
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
---
2025-11-12 17:50:44 +01:00
## 🔐 Bezpieczeństwo
2025-11-12 18:07:42 +01:00
**Backend:**
- Hasła haszowane (bcrypt)
- JWT authentication
- Rate limiting, CORS, Helmet.js
- Input validation & sanitization
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
**Frontend:**
- XSS prevention
- Secure token storage
- HTTPS required
2025-11-12 17:50:44 +01:00
2025-11-12 18:07:42 +01:00
**WebRTC:**
- Natywne szyfrowanie (DTLS/SRTP)
- Brak przechowywania nagrań na serwerze
- Opcjonalne dodatkowe szyfrowanie czatu
2025-11-12 17:50:44 +01:00
---
## 📝 Zasady rozwoju projektu (Development Guidelines)
### Język w kodzie
2025-11-12 18:07:42 +01:00
- **Wszystkie stringi, komunikaty, UI text, komentarze w kodzie**: **ENGLISH**
- **Nazwy zmiennych, funkcji, klas**: **ENGLISH**
- **Dokumentacja techniczna w kodzie (JSDoc, docstrings)**: **ENGLISH**
2025-11-12 17:50:44 +01:00
### Komunikacja
2025-11-12 18:07:42 +01:00
- **Komunikacja z zespołem/developerem**: **POLISH**
- **Dokumentacja projektowa (CONTEXT.md, README.md)**: **POLISH** (może być mieszana z angielskim)
2025-11-12 17:50:44 +01:00
### Git commits
2025-11-12 18:07:42 +01:00
- **Commit messages**: standardowy format BEZ wzmianek o AI/automatycznym generowaniu kodu
- ✅ Przykład dobry: `feat: add WebRTC P2P video transfer`
- ❌ Przykład zły: ~~`feat: add video transfer (generated by AI)`~~
2025-11-12 17:50:44 +01:00
- Commituj zmiany logicznie (feature by feature, bugfix by bugfix)
2025-11-12 18:07:42 +01:00
### Przykład kodu
2025-11-12 17:50:44 +01:00
```jsx
// ✅ Poprawnie - kod po angielsku
const sendMessage = (message) => {
if (!message.trim()) {
alert('Please enter a message');
return;
}
socket.emit('message', message);
};
// ❌ Niepoprawnie - kod po polsku
const wyslijWiadomosc = (wiadomosc) => {
if (!wiadomosc.trim()) {
alert('Proszę wpisać wiadomość');
return;
}
socket.emit('wiadomosc', wiadomosc);
};
2025-11-12 18:07:42 +01:00
```
---
## 📚 Dodatkowe dokumenty
**For quick context (minimal tokens):**
- `docs/SESSION_CONTEXT.md` - Ultra-zwięzły kontekst dla nowych sesji (~300-500 linii)
**For full details:**
- `docs/ARCHITECTURE.md` - Szczegóły techniczne, implementacja, WebRTC flow
- `docs/TODO.md` - Lista zadań i roadmap
2025-11-20 22:42:06 +01:00
- `docs/DEPLOYMENT.md` - Production deployment guide
- `docs/MONITORING.md` - Monitoring and operations
- `docs/archive/COMPLETED.md` - Archiwum ukończonych zadań
- `docs/archive/RESOURCES.md` - Linki do dokumentacji i zasobów edukacyjnych
2025-11-12 18:07:42 +01:00
---
2025-11-23 23:09:30 +01:00
**Last Updated:** 2025-11-23
2025-11-20 22:34:05 +01:00
**Status:** ✅ MVP Complete - All core features implemented and tested