- Streamline README.md from 645 to 365 lines (43% reduction) - Remove duplicate content with other documentation files - Focus README on quick start, features overview, and links to detailed docs - Update SESSION_CONTEXT.md with recent changes (342/342 tests, matching runs audit) - Archive outdated documentation: - CONTEXT.md (duplicated in README) - QUICKSTART.md (mentions mock auth, outdated) - QUICK_TEST.md (outdated) - Keep SESSION_CONTEXT.md active for context restoration
5.9 KiB
5.9 KiB
spotlight.cam - Project Context
Peer-to-peer video exchange app for dance event participants
📝 Quick Description
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.
Główna funkcjonalność: WebRTC P2P video file transfer (nie wymiana linków - to tylko fallback).
✅ Pełne wsparcie dla Android/iOS (przez przeglądarkę), bez hostowania plików, z backendem i frontendem działającym w ramach Docker Compose.
🧠 Główne założenia
- 🔒 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.
🧱 Architektura systemu
Web client (PWA) ↔ Backend (Node.js + WebSocket + REST API) ↔ PostgreSQL
WebRTC P2P Connection:
Browser A ←──────────────────────→ Browser B
(Direct file transfer)
🐳 Docker Compose – komponenty
Current (All Implemented):
nginx: Reverse proxy (port 8080)frontend: React/Vite/Tailwind PWA (port 5173 internal)backend: Node.js/Express/Socket.IO (port 3000 internal)db: PostgreSQL 15 with Prisma ORM
🗃️ Modele bazy danych (Implemented)
users: identyfikacja, email, hasło (bcrypt), avatar, profile data- Account tiers:
accountTier(BASIC/SUPPORTER/COMFORT),recordingsDone,recordingsReceived
- Account tiers:
events: lista eventów (z worldsdc.com + manual entries)divisions: competition divisions (Novice, Intermediate, Advanced, etc.)competition_types: Jack & Jill, Strictlyevent_user_heats: declared competition heats per user per eventchat_rooms: publiczne (event) i prywatne (match) pokojemessages: 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- Recording opt-out, competitor numbers,
accountTierOverride(event-specific tier upgrades)
- Recording opt-out, competitor numbers,
event_checkin_tokens: QR code check-in systemrecording_suggestions: auto-matching results with collision detection
🔁 Flow użytkownika
- Rejestracja/Logowanie użytkownika
- Wybór eventu (lista z worldsdc.com) na którym użytkownik jest
- Czat eventowy – matchmaking (lista aktywnych użytkowników)
- Potwierdzenie matcha → przejście do prywatnego czatu 1:1
- Wybór pliku wideo z galerii (nagranie odbywa się poza aplikacją)
- Przesłanie filmu przez WebRTC (P2P, bez serwera) LUB wymiana linków (fallback)
- Ocena partnera (1–5 ⭐, komentarz, chęć ponownej współpracy)
💬 Tech Stack
Frontend
- React 18 + Vite
- Tailwind CSS v3.4.0 (NOT v4)
- React Router
- 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
- Jest + Supertest (285/286 tests passing - 99.7%, 73% coverage)
WebRTC
- RTCPeerConnection (implemented)
- RTCDataChannel (file transfer)
- 16KB chunking (tested up to 700MB)
- STUN servers for NAT traversal
- E2E encryption (DTLS)
🔐 Bezpieczeństwo
Backend:
- Hasła haszowane (bcrypt)
- JWT authentication
- Rate limiting, CORS, Helmet.js
- Input validation & sanitization
Frontend:
- XSS prevention
- Secure token storage
- HTTPS required
WebRTC:
- Natywne szyfrowanie (DTLS/SRTP)
- Brak przechowywania nagrań na serwerze
- Opcjonalne dodatkowe szyfrowanie czatu
📝 Zasady rozwoju projektu (Development Guidelines)
Język w kodzie
- Wszystkie stringi, komunikaty, UI text, komentarze w kodzie: ENGLISH
- Nazwy zmiennych, funkcji, klas: ENGLISH
- Dokumentacja techniczna w kodzie (JSDoc, docstrings): ENGLISH
Komunikacja
- Komunikacja z zespołem/developerem: POLISH
- Dokumentacja projektowa (CONTEXT.md, README.md): POLISH (może być mieszana z angielskim)
Git commits
- 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) - Commituj zmiany logicznie (feature by feature, bugfix by bugfix)
Przykład kodu
// ✅ 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);
};
📚 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 flowdocs/TODO.md- Lista zadań i roadmapdocs/DEPLOYMENT.md- Production deployment guidedocs/MONITORING.md- Monitoring and operationsdocs/archive/COMPLETED.md- Archiwum ukończonych zadańdocs/archive/RESOURCES.md- Linki do dokumentacji i zasobów edukacyjnych
Last Updated: 2025-11-29
Status: ✅ MVP Complete - All core features implemented and tested