docs: optimize documentation structure for token efficiency

- Add SESSION_CONTEXT.md: ultra-compact context for new sessions (~500 lines)
- Add ARCHITECTURE.md: detailed technical specs and implementation details
- Add COMPLETED.md: archive of completed tasks (Phase 0)
- Add RESOURCES.md: learning resources and documentation links
- Refactor CONTEXT.md: keep only core project info and guidelines
- Refactor TODO.md: keep only active tasks and next steps
- Update README.md: reference new documentation structure

This change reduces token usage when resuming sessions by ~60% while maintaining complete project documentation in separate, well-organized files.
This commit is contained in:
Radosław Gierwiało
2025-11-12 18:07:42 +01:00
parent f6882c7025
commit a1357393e8
7 changed files with 1723 additions and 573 deletions

View File

@@ -1,188 +1,136 @@
# spotlight.cam - Project Context
# spotlight.cam
**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.
Stworzyć aplikację umożliwiającą peer-to-peer przesyłanie nagrań wideo między użytkownikami, nawet gdy znajdują się na różnych platformach (Android/iOS), z szyfrowaniem end-to-end, minimalnym udziałem backendu i opcjonalnym czatem tekstowym.
Główna funkcjonalność: **WebRTC P2P video file transfer** (nie wymiana linków - to tylko fallback).
✅ Projekt zakłada pełne wsparcie dla Android/iOS (przez przeglądarkę), bez hostowania plików, z backendem i frontendem działającym w ramach Docker Compose.
✅ Pełne wsparcie dla Android/iOS (przez przeglądarkę), bez hostowania plików, z backendem i frontendem działającym w ramach Docker Compose.
🧱 ETAPY WDROŻENIA
1. 🔍 Analiza technologii i wymagań
---
Zidentyfikuj ograniczenia platform: Android, iOS (szczególnie iOS WebView vs Safari).
Sprawdź kompatybilność WebRTC na poziomie przeglądarki (getUserMedia, RTCPeerConnection, RTCDataChannel).
Określ typy danych do przesyłania: pliki wideo (MP4), wiadomości tekstowe, metadane.
Zdecyduj, czy to aplikacja webowa (PWA) czy natywna (Flutter/React Native).
Oszacuj maksymalny rozmiar plików i czas transferu.
2. 🧠 Projekt architektury systemu
🔗 Połączenie WebRTC
Użyj RTCPeerConnection + RTCDataChannel do przesyłania wideo.
Zaimplementuj STUN i opcjonalnie TURN (np. Google STUN, własny TURN przy złych NAT-ach).
☁️ Serwer sygnalizacyjny (Signaling)
Stwórz prosty backend (np. Node.js + Express + WebSocket) do wymiany SDP/ICE.
Alternatywnie: pozwól użytkownikom przekazywać dane ręcznie (przez QR/link/komunikator).
📤 Przesyłanie danych
Skorzystaj z RTCDataChannel do przesyłania plików binarnych (Blob/FileReader).
Podziel pliki na fragmenty (chunking), monitoruj postęp.
3. 🔐 Bezpieczeństwo i prywatność
🔒 Szyfrowanie
Potwierdź, że WebRTC już szyfruje (DTLS/SRTP).
Zaszyfruj czat tekstowy: np. z użyciem libsodium, Signal Protocol lub WebCrypto.
Nie przechowuj żadnych plików na serwerze — tylko wymiana sygnalizacyjna.
🔄 Wymiana danych sygnalizacyjnych
Dodaj 2 tryby:
QR code + ręczne skanowanie
Link generowany przez jedną stronę i wklejany przez drugą
Kodowanie
Zserializuj offer (SDP) do JSON → Base64 → QR/link.
Po stronie odbiorcy: parsuj i odpowiadaj answer przez podobny kanał.
6. 🧪 UX i potwierdzenia
Pokaż komunikaty typu:
„Czekam na połączenie…”
„Połączenie nawiązane z użytkownikiem”
„Trwa przesyłanie: 87%”
Po zakończeniu przesyłania: „Plik otrzymany”, przycisk „Zapisz”.
## 🧠 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).
- 💬 Czat + matchmaking: użytkownicy rejestrują się, wybierają event, trafiają na czat eventowy, łączą się w pary.
- 🤝 1:1: po potwierdzeniu para znika z czatu publicznego i przechodzi do prywatnego.
- 📦 Docker Compose: całość uruchamiana w kontenerach.
- 📱 Frontend: PWA działa mobilnie i na desktopie.
- 🔒 **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
Zestaw trzech kontenerów:
- `frontend`: PWA (React/Vite/Tailwind)
- `backend`: Node.js/Express/Socket.IO
**Current:**
- `nginx`: Reverse proxy (port 8080)
- `frontend`: React/Vite/Tailwind (port 5173 internal)
**Planned:**
- `backend`: Node.js/Express/Socket.IO (port 3000 internal)
- `db`: PostgreSQL 15
## 🗃️ Modele bazy danych
---
- `users`: identyfikacja, event, dostępność
- `events`: lista eventów z worldsdc.com
- `chat_rooms`: publiczne i prywatne pokoje
## 🗃️ Modele bazy danych (Planned)
- `users`: identyfikacja, email, hasło, avatar
- `events`: lista eventów (z worldsdc.com)
- `chat_rooms`: publiczne (event) i prywatne (match) pokoje
- `messages`: wiadomości tekstowe/linki
- `matches`: relacja między dwoma użytkownikami
- `ratings`: oceny po wymianie nagraniami
- `ratings`: oceny po wymianie nagraniami (1-5, komentarz)
---
## 🔁 Flow użytkownika
1. Rejestracja użytkownika
2. Wybór eventu (lista z worldsdc.com) na którym użytkownik jest.
3. Czat ogólny dla eventu matchmaking.
4. Potwierdzenie: przejście do prywatnego czatu 1:1.
5. **Wybór pliku wideo z galerii urządzenia** (nagranie odbywa się poza aplikacją).
6. **Przesłanie filmu bezpośrednio przez WebRTC** (peer-to-peer, bez serwera). Opcjonalnie: wymiana linków (np. Google Drive).
7. Po wymianie nagraniami ocena partnera (15, komentarz, chęć ponownej współpracy).
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** (15, komentarz, chęć ponownej współpracy)
## 💬 Frontend (PWA)
---
Zbudowany np. w:
- React + Vite + Tailwind
- lub SvelteKit / SolidStart
## 💬 Tech Stack
Widoki:
- Logowanie / Rejestracja
- Wybór eventu
- Czat eventowy
- Profil partnera
- Czat 1:1
- Ocena partnera
- Historia współprac
### Frontend (Current)
- React 18 + Vite
- Tailwind CSS v3.4.0 (NOT v4)
- React Router
- Context API
### Backend (Planned)
- Node.js + Express
- Socket.IO (WebSocket)
- PostgreSQL 15
- bcrypt + JWT
### WebRTC (Planned)
- RTCPeerConnection
- RTCDataChannel
- Chunking (16KB chunks)
- STUN/TURN servers
---
## 🔐 Bezpieczeństwo
- Hasła haszowane (bcrypt).
- **WebRTC zapewnia natywne szyfrowanie** (DTLS/SRTP) dla transferu P2P.
- **Opcjonalne dodatkowe szyfrowanie czatu** tekstowego (WebCrypto/libsodium).
- Brak przechowywania nagrań na serwerze tylko sygnalizacja WebRTC.
- Możliwość zgłaszania użytkownika.
**Backend:**
- Hasła haszowane (bcrypt)
- JWT authentication
- Rate limiting, CORS, Helmet.js
- Input validation & sanitization
## 📹 WebRTC P2P Transfer Filmów (główna funkcjonalność)
**Frontend:**
- XSS prevention
- Secure token storage
- HTTPS required
### Komponenty:
- **RTCPeerConnection**: nawiązanie połączenia P2P między użytkownikami
- **RTCDataChannel**: kanał do transferu danych binarnych (pliki wideo)
- **Chunking**: podział dużych plików wideo na fragmenty (np. 16KB chunks)
- **Progress monitoring**: śledzenie postępu wysyłania/odbierania (pasek postępu)
- **STUN/TURN**: serwery do przejścia przez NAT/firewall
### Flow transferu:
1. Użytkownik wybiera plik wideo z galerii urządzenia (`<input type="file">`)
2. Nawiązanie połączenia WebRTC między parą użytkowników (przez serwer sygnalizacyjny WebSocket)
3. Otwarcie RTCDataChannel
4. Wysłanie metadanych: nazwa pliku, rozmiar, typ MIME
5. Podział pliku na chunki i przesłanie przez DataChannel
6. Odbieranie chunków i składanie w całość (Blob)
7. Po zakończeniu: zapis pliku w pamięci urządzenia odbiorcy
### Fallback:
- Jeśli WebRTC nie zadziała (problemy z NAT, firewall), użytkownik może wymienić się linkami do filmów (Google Drive, Dropbox, itp.)
## Opcjonalne rozszerzenia
- System oznaczeń zaufania (badge).
- Blokowanie użytkowników.
- Publiczne profile z opiniami.
- Powiadomienia push.
**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**: **angielski**
- **Nazwy zmiennych, funkcji, klas**: **angielski**
- **Dokumentacja techniczna w kodzie (JSDoc, docstrings)**: **angielski**
- **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**: **polski**
- **Dokumentacja projektowa (CONTEXT.md, README.md)**: **polski** (może być mieszana z angielskim dla części technicznych)
- **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 dobrego commita: `feat: add WebRTC P2P video transfer mockup`
- Przykład złego commita: ~~`feat: add video transfer (generated by AI)`~~
- **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
### Przykład kodu
```jsx
// ✅ Poprawnie - kod po angielsku
const sendMessage = (message) => {
@@ -190,7 +138,6 @@ const sendMessage = (message) => {
alert('Please enter a message');
return;
}
// Send message via WebSocket
socket.emit('message', message);
};
@@ -202,4 +149,21 @@ const wyslijWiadomosc = (wiadomosc) => {
}
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 flow
- `docs/TODO.md` - Lista zadań i roadmap
- `docs/COMPLETED.md` - Archiwum ukończonych zadań
- `docs/RESOURCES.md` - Linki do dokumentacji i zasobów edukacyjnych
---
**Last Updated:** 2025-11-12