- Mark completed tasks from Phase 0 (frontend mockup) - Add detailed next steps with time estimates - Update project progress (~25% complete) - Add suggested roadmap for Phase 1 (backend foundation) - Include additional learning resources
473 lines
15 KiB
Markdown
473 lines
15 KiB
Markdown
# TODO - spotlight.cam
|
||
|
||
Lista zadań do realizacji projektu spotlight.cam - aplikacji do matchmaking i wymiany nagrań wideo na eventach tanecznych.
|
||
|
||
## 📋 Status realizacji
|
||
- ⏳ Do zrobienia
|
||
- 🔄 W trakcie
|
||
- ✅ Zrobione
|
||
|
||
---
|
||
|
||
## 🎯 AKTUALNY STATUS PROJEKTU
|
||
|
||
### ✅ Ukończone (Faza 0: Frontend Mockup)
|
||
- Frontend mockup z pełną funkcjonalnością UI
|
||
- Docker Compose setup (nginx + frontend)
|
||
- Dokumentacja projektu
|
||
- **Gotowe do prezentacji i testowania UX**
|
||
|
||
### 🔄 W trakcie
|
||
- Przygotowanie do backend development
|
||
|
||
### ⏳ Następne kroki
|
||
**Priorytet:** Backend setup → Database → API → WebSocket
|
||
|
||
---
|
||
|
||
## 📌 SUGEROWANE KOLEJNE KROKI
|
||
|
||
### 🚀 Krok 1: Backend Foundation (zalecane TERAZ)
|
||
Cel: Uruchomić backend Node.js z podstawowym API
|
||
|
||
**Co zrobić:**
|
||
1. Dodaj kontener `backend` do docker-compose.yml
|
||
2. Zainicjalizuj projekt Node.js + Express
|
||
3. Skonfiguruj strukturę folderów backend
|
||
4. Dodaj podstawowy endpoint healthcheck (`GET /api/health`)
|
||
5. Zaktualizuj nginx config aby proxy'ował `/api/*` do backendu
|
||
|
||
**Czas realizacji:** 1-2 godziny
|
||
**Benefit:** Podstawa dla dalszego rozwoju API
|
||
|
||
---
|
||
|
||
### 🗄️ Krok 2: PostgreSQL Setup (po Kroku 1)
|
||
Cel: Uruchomić bazę danych i stworzyć schemat
|
||
|
||
**Co zrobić:**
|
||
1. Dodaj kontener `db` (PostgreSQL 15) do docker-compose.yml
|
||
2. Skonfiguruj volumes dla persystencji danych
|
||
3. Wybierz tool do migracji (Prisma / node-pg-migrate / Knex)
|
||
4. Stwórz schemat bazy (6 tabel: users, events, chat_rooms, messages, matches, ratings)
|
||
5. Dodaj seed data dla eventów testowych
|
||
|
||
**Czas realizacji:** 2-3 godziny
|
||
**Benefit:** Prawdziwe dane zamiast mocków
|
||
|
||
---
|
||
|
||
### 🔐 Krok 3: Authentication API (po Kroku 2)
|
||
Cel: Prawdziwa autentykacja JWT
|
||
|
||
**Co zrobić:**
|
||
1. Implementacja bcrypt do hashowania haseł
|
||
2. JWT token generation i verification
|
||
3. Endpointy: POST /api/auth/register, POST /api/auth/login
|
||
4. Middleware do weryfikacji tokena
|
||
5. Podłączenie frontendu do prawdziwego API
|
||
|
||
**Czas realizacji:** 3-4 godziny
|
||
**Benefit:** Koniec z mock auth, prawdziwe konta użytkowników
|
||
|
||
---
|
||
|
||
### 💬 Krok 4: WebSocket Chat (po Kroku 3)
|
||
Cel: Real-time czat eventowy
|
||
|
||
**Co zrobić:**
|
||
1. Setup Socket.IO na backendzie
|
||
2. Implementacja room management (event rooms)
|
||
3. Broadcast messages
|
||
4. Lista aktywnych użytkowników
|
||
5. Podłączenie frontendu do Socket.IO
|
||
|
||
**Czas realizacji:** 4-5 godzin
|
||
**Benefit:** Prawdziwy czat zamiast mocka
|
||
|
||
---
|
||
|
||
## 🐳 1. Setup projektu i infrastruktura
|
||
|
||
### Docker Compose
|
||
- [x] ✅ Utworzenie `docker-compose.yml` z serwisem nginx
|
||
- [x] ✅ Konfiguracja kontenera frontend (React/Vite)
|
||
- [ ] ⏳ Konfiguracja kontenera backend (Node.js)
|
||
- [ ] ⏳ Konfiguracja kontenera PostgreSQL 15
|
||
- [ ] ⏳ Konfiguracja volumes dla persystencji danych
|
||
- [x] ✅ Konfiguracja sieci między kontenerami
|
||
|
||
### Struktura projektu
|
||
- [x] ✅ Inicjalizacja projektu frontend (React + Vite + Tailwind)
|
||
- [x] ✅ Utworzenie `.gitignore`
|
||
- [x] ✅ Konfiguracja ESLint (frontend)
|
||
- [ ] ⏳ Inicjalizacja projektu backend (Node.js + Express)
|
||
- [ ] ⏳ Konfiguracja ESLint i Prettier (backend)
|
||
- [ ] ⏳ Konfiguracja TypeScript (opcjonalnie)
|
||
- [ ] ⏳ Utworzenie `.env` i `.env.example`
|
||
|
||
---
|
||
|
||
## 🗄️ 2. Baza danych PostgreSQL
|
||
|
||
### Schema i migracje
|
||
- [ ] ⏳ Setup narzędzia do migracji (np. node-pg-migrate, Knex, Prisma)
|
||
- [ ] ⏳ Utworzenie tabeli `users`
|
||
- id, username, email, password_hash, created_at, updated_at
|
||
- [ ] ⏳ Utworzenie tabeli `events`
|
||
- id, name, location, start_date, end_date, worldsdc_id
|
||
- [ ] ⏳ Utworzenie tabeli `chat_rooms`
|
||
- id, event_id, type (event/private), created_at
|
||
- [ ] ⏳ Utworzenie tabeli `messages`
|
||
- id, room_id, user_id, content, type (text/link), created_at
|
||
- [ ] ⏳ Utworzenie tabeli `matches`
|
||
- id, user1_id, user2_id, event_id, status, room_id, created_at
|
||
- [ ] ⏳ Utworzenie tabeli `ratings`
|
||
- id, match_id, rater_id, rated_id, score (1-5), comment, would_collaborate_again
|
||
- [ ] ⏳ Utworzenie indeksów dla optymalizacji zapytań
|
||
- [ ] ⏳ Seed danych testowych (events z worldsdc.com)
|
||
|
||
---
|
||
|
||
## 🔧 3. Backend - REST API
|
||
|
||
### Autentykacja i autoryzacja
|
||
- [ ] ⏳ Endpoint: `POST /api/auth/register` - rejestracja użytkownika
|
||
- [ ] ⏳ Endpoint: `POST /api/auth/login` - logowanie użytkownika
|
||
- [ ] ⏳ Endpoint: `POST /api/auth/logout` - wylogowanie
|
||
- [ ] ⏳ Implementacja bcrypt do hashowania haseł
|
||
- [ ] ⏳ Implementacja JWT/session dla autoryzacji
|
||
- [ ] ⏳ Middleware do weryfikacji tokena
|
||
|
||
### Users API
|
||
- [ ] ⏳ Endpoint: `GET /api/users/me` - pobranie profilu użytkownika
|
||
- [ ] ⏳ Endpoint: `PATCH /api/users/me` - aktualizacja profilu
|
||
- [ ] ⏳ Endpoint: `GET /api/users/:id` - pobranie profilu innego użytkownika
|
||
|
||
### Events API
|
||
- [ ] ⏳ Endpoint: `GET /api/events` - lista wszystkich eventów
|
||
- [ ] ⏳ Endpoint: `GET /api/events/:id` - szczegóły eventu
|
||
- [ ] ⏳ Endpoint: `POST /api/events/:id/join` - dołączenie do eventu
|
||
- [ ] ⏳ Integracja z worldsdc.com API (jeśli dostępne)
|
||
|
||
### Matches API
|
||
- [ ] ⏳ Endpoint: `GET /api/matches` - historia matchów użytkownika
|
||
- [ ] ⏳ Endpoint: `POST /api/matches` - utworzenie matcha
|
||
- [ ] ⏳ Endpoint: `PATCH /api/matches/:id` - aktualizacja statusu matcha
|
||
|
||
### Ratings API
|
||
- [ ] ⏳ Endpoint: `POST /api/ratings` - dodanie oceny partnera
|
||
- [ ] ⏳ Endpoint: `GET /api/ratings/user/:id` - oceny danego użytkownika
|
||
- [ ] ⏳ Endpoint: `GET /api/ratings/stats/:id` - statystyki użytkownika
|
||
|
||
### Reports API
|
||
- [ ] ⏳ Endpoint: `POST /api/reports` - zgłoszenie użytkownika
|
||
|
||
---
|
||
|
||
## 💬 4. Backend - WebSocket (Socket.IO)
|
||
|
||
### Czat eventowy (publiczny)
|
||
- [ ] ⏳ Setup Socket.IO na backendzie
|
||
- [ ] ⏳ Obsługa połączenia/rozłączenia użytkownika
|
||
- [ ] ⏳ Dołączenie użytkownika do pokoju eventowego
|
||
- [ ] ⏳ Wysyłanie wiadomości tekstowych do pokoju
|
||
- [ ] ⏳ Broadcast wiadomości do wszystkich w pokoju
|
||
- [ ] ⏳ Lista aktywnych użytkowników w pokoju
|
||
|
||
### Czat 1:1 (prywatny)
|
||
- [ ] ⏳ Utworzenie prywatnego pokoju dla pary
|
||
- [ ] ⏳ Wysyłanie wiadomości prywatnych
|
||
- [ ] ⏳ Powiadomienia o nowych wiadomościach
|
||
|
||
### WebRTC Signaling
|
||
- [ ] ⏳ Obsługa wymiany SDP offer/answer
|
||
- [ ] ⏳ Obsługa wymiany ICE candidates
|
||
- [ ] ⏳ Sygnalizacja statusu połączenia WebRTC
|
||
- [ ] ⏳ Error handling dla failed connections
|
||
|
||
---
|
||
|
||
## 🎥 5. WebRTC - Peer-to-Peer Transfer Filmów (GŁÓWNA FUNKCJONALNOŚĆ)
|
||
|
||
### Setup WebRTC
|
||
- [ ] ⏳ Konfiguracja STUN servers (Google STUN)
|
||
- [ ] ⏳ Konfiguracja TURN server (opcjonalnie, dla trudnych NAT)
|
||
- [ ] ⏳ Utworzenie RTCPeerConnection
|
||
- [ ] ⏳ Utworzenie RTCDataChannel dla transferu plików
|
||
|
||
### Nawiązanie połączenia
|
||
- [ ] ⏳ Inicjacja połączenia przez wysyłającego (createOffer)
|
||
- [ ] ⏳ Odpowiedź odbierającego (createAnswer)
|
||
- [ ] ⏳ Wymiana ICE candidates
|
||
- [ ] ⏳ Monitoring statusu połączenia (connecting, connected, failed)
|
||
|
||
### Transfer plików
|
||
- [ ] ⏳ Wybór pliku z galerii (`<input type="file" accept="video/*">`)
|
||
- [ ] ⏳ Walidacja pliku (typ, rozmiar max)
|
||
- [ ] ⏳ Wysłanie metadanych (nazwa, rozmiar, MIME type)
|
||
- [ ] ⏳ Implementacja chunkingu (podział na fragmenty 16KB)
|
||
- [ ] ⏳ Wysyłanie chunków przez DataChannel
|
||
- [ ] ⏳ Odbieranie chunków i składanie w Blob
|
||
- [ ] ⏳ Progress monitoring (pasek postępu % dla wysyłającego i odbierającego)
|
||
- [ ] ⏳ Obsługa błędów transferu
|
||
- [ ] ⏳ Możliwość anulowania transferu
|
||
- [ ] ⏳ Zapis pliku do pamięci urządzenia (download)
|
||
|
||
### Fallback - wymiana linków
|
||
- [x] ✅ UI do wklejenia linku do filmu (Google Drive, Dropbox, itp.)
|
||
- [x] ✅ Walidacja URL
|
||
- [x] ✅ Wysłanie linku przez czat (mockup)
|
||
|
||
### Optymalizacje
|
||
- [ ] ⏳ Dostosowanie rozmiaru chunka do bandwidth
|
||
- [ ] ⏳ Buffer management (kontrola przepełnienia bufora)
|
||
- [ ] ⏳ Reconnection logic przy utracie połączenia
|
||
|
||
---
|
||
|
||
## 🎨 6. Frontend - PWA (React + Vite + Tailwind)
|
||
|
||
### Setup PWA
|
||
- [x] ✅ Konfiguracja Vite
|
||
- [x] ✅ Konfiguracja Tailwind CSS
|
||
- [ ] ⏳ Konfiguracja Vite PWA plugin
|
||
- [ ] ⏳ Utworzenie `manifest.json`
|
||
- [ ] ⏳ Utworzenie service worker
|
||
- [ ] ⏳ Ikony aplikacji (różne rozmiary)
|
||
- [ ] ⏳ Splash screen
|
||
|
||
### Routing
|
||
- [x] ✅ Setup React Router
|
||
- [x] ✅ Ochrona tras (require authentication)
|
||
|
||
### Widoki/Komponenty
|
||
- [x] ✅ **Logowanie** (`/login`) - Formularz email + hasło, link do rejestracji
|
||
- [x] ✅ **Rejestracja** (`/register`) - Formularz username, email, hasło, walidacja
|
||
- [x] ✅ **Wybór eventu** (`/events`) - Lista eventów, wyszukiwanie, przycisk "Join chat"
|
||
- [x] ✅ **Czat eventowy** (`/events/:id/chat`) - Lista wiadomości, aktywni użytkownicy, matchmaking
|
||
- [x] ✅ **Czat 1:1** (`/matches/:id/chat`) - Profil partnera, czat, **mockup WebRTC transfer**
|
||
- [x] ✅ **Ocena partnera** (`/matches/:id/rate`) - Gwiazdki 1-5, komentarz, checkbox
|
||
- [x] ✅ **Historia współprac** (`/history`) - Lista matchów, oceny, statystyki
|
||
|
||
### Komponenty reużywalne
|
||
- [x] ✅ `<Navbar>` - nawigacja
|
||
- [x] ✅ `<Layout>` - wrapper dla stron
|
||
- [ ] ⏳ `<MessageBubble>` - wiadomość w czacie (do wydzielenia z page)
|
||
- [ ] ⏳ `<UserCard>` - karta użytkownika (do wydzielenia)
|
||
- [ ] ⏳ `<EventCard>` - karta eventu (do wydzielenia)
|
||
- [ ] ⏳ `<RatingStars>` - gwiazdki oceny (do wydzielenia)
|
||
- [ ] ⏳ `<VideoUploader>` - komponent do wyboru i wysyłania filmu
|
||
- [ ] ⏳ `<ProgressBar>` - pasek postępu transferu (do wydzielenia)
|
||
- [ ] ⏳ `<WebRTCStatus>` - status połączenia WebRTC (do wydzielenia)
|
||
|
||
### Stylowanie (Tailwind)
|
||
- [x] ✅ Konfiguracja motywu kolorystycznego
|
||
- [x] ✅ Responsive design (mobile-first)
|
||
- [ ] ⏳ Dark mode (opcjonalnie)
|
||
|
||
### State Management
|
||
- [x] ✅ Auth state (Context API - current user, mock login/logout)
|
||
- [ ] ⏳ Zamiana na prawdziwe API (po backend setup)
|
||
- [ ] ⏳ Chat state (messages, active users) - połączenie z Socket.IO
|
||
- [ ] ⏳ WebRTC state (connection status, transfer progress) - prawdziwy WebRTC
|
||
|
||
### Integracja Socket.IO (client)
|
||
- [ ] ⏳ Setup socket.io-client
|
||
- [ ] ⏳ Połączenie z backendem
|
||
- [ ] ⏳ Obsługa eventów czatu
|
||
- [ ] ⏳ Obsługa eventów WebRTC signaling
|
||
- [ ] ⏳ Reconnection logic
|
||
|
||
---
|
||
|
||
## 🔐 7. Bezpieczeństwo
|
||
|
||
### Backend
|
||
- [ ] ⏳ Rate limiting (np. express-rate-limit)
|
||
- [ ] ⏳ Helmet.js dla security headers
|
||
- [ ] ⏳ CORS configuration
|
||
- [ ] ⏳ Input sanitization (XSS prevention)
|
||
- [ ] ⏳ SQL injection prevention (prepared statements)
|
||
- [ ] ⏳ Walidacja wszystkich inputów (express-validator)
|
||
|
||
### Frontend
|
||
- [ ] ⏳ XSS prevention (sanitize user input)
|
||
- [ ] ⏳ CSRF protection
|
||
- [ ] ⏳ Secure token storage (httpOnly cookies lub secure localStorage)
|
||
|
||
### WebRTC
|
||
- [ ] ⏳ Potwierdzenie, że WebRTC używa DTLS/SRTP (natywne szyfrowanie)
|
||
- [ ] ⏳ Opcjonalne: dodatkowe szyfrowanie czatu (WebCrypto API)
|
||
|
||
---
|
||
|
||
## 🧪 8. Testowanie
|
||
|
||
### Backend
|
||
- [ ] ⏳ Setup Jest + Supertest
|
||
- [ ] ⏳ Testy jednostkowe endpoints API
|
||
- [ ] ⏳ Testy integracyjne z bazą danych
|
||
- [ ] ⏳ Testy WebSocket (Socket.IO)
|
||
|
||
### Frontend
|
||
- [ ] ⏳ Setup Vitest + React Testing Library
|
||
- [ ] ⏳ Testy jednostkowe komponentów
|
||
- [ ] ⏳ Testy integracyjne widoków
|
||
- [ ] ⏳ E2E testy (Playwright / Cypress)
|
||
|
||
### WebRTC
|
||
- [ ] ⏳ Testy manualne transferu plików (różne rozmiary)
|
||
- [ ] ⏳ Testy na różnych urządzeniach (Android/iOS)
|
||
- [ ] ⏳ Testy w różnych warunkach sieciowych
|
||
|
||
---
|
||
|
||
## 📚 9. Dokumentacja
|
||
|
||
- [x] ✅ README.md - instrukcja uruchomienia projektu
|
||
- [x] ✅ QUICKSTART.md - szybki start (2 minuty)
|
||
- [x] ✅ CONTEXT.md - architektura i założenia projektu
|
||
- [x] ✅ TODO.md - roadmap projektu
|
||
- [ ] ⏳ API documentation (Swagger/OpenAPI)
|
||
- [ ] ⏳ Architektura systemu (diagram)
|
||
- [ ] ⏳ WebRTC flow diagram
|
||
- [ ] ⏳ User flow diagrams
|
||
|
||
---
|
||
|
||
## 🚀 10. Deployment i DevOps
|
||
|
||
- [ ] ⏳ Konfiguracja CI/CD (GitHub Actions)
|
||
- [ ] ⏳ Automated tests w CI
|
||
- [ ] ⏳ Docker image optimization (multi-stage builds)
|
||
- [ ] ⏳ Konfiguracja production environment variables
|
||
- [ ] ⏳ Setup HTTPS (Let's Encrypt)
|
||
- [ ] ⏳ Deployment backendu (VPS / Cloud)
|
||
- [ ] ⏳ Deployment frontendu (Vercel / Netlify / własny serwer)
|
||
- [ ] ⏳ Setup PostgreSQL backup strategy
|
||
- [ ] ⏳ Monitoring (logs, errors, performance)
|
||
|
||
---
|
||
|
||
## ➕ 11. Opcjonalne rozszerzenia (po MVP)
|
||
|
||
- [ ] ⏳ System oznaczeń zaufania (badges dla zweryfikowanych użytkowników)
|
||
- [ ] ⏳ Blokowanie użytkowników
|
||
- [ ] ⏳ Publiczne profile z opiniami
|
||
- [ ] ⏳ Powiadomienia push (Web Push API)
|
||
- [ ] ⏳ Kompresja wideo przed wysłaniem (opcjonalnie)
|
||
- [ ] ⏳ Podgląd thumbnail filmu przed wysłaniem
|
||
- [ ] ⏳ Multi-file transfer (wysyłanie wielu filmów naraz)
|
||
- [ ] ⏳ Integracja z worldsdc.com API (automatyczne pobieranie eventów)
|
||
- [ ] ⏳ Statystyki użycia aplikacji (analytics)
|
||
- [ ] ⏳ Admin panel
|
||
|
||
---
|
||
|
||
## 🎯 Priorytet realizacji (zaktualizowany)
|
||
|
||
### ✅ Faza 0: Frontend Mockup (UKOŃCZONA)
|
||
- ✅ Docker Compose (nginx + frontend)
|
||
- ✅ React + Vite + Tailwind setup
|
||
- ✅ Wszystkie widoki z mockupami
|
||
- ✅ Mock data i routing
|
||
- ✅ Dokumentacja
|
||
|
||
**Status:** Gotowe do prezentacji i testowania UX
|
||
|
||
---
|
||
|
||
### 🔄 Faza 1: MVP Backend Foundation (1-2 tygodnie) - **AKTUALNY CEL**
|
||
**Priorytet: WYSOKI** - Następna faza do realizacji
|
||
|
||
1. ✨ **Backend setup** (1-2 godziny)
|
||
- Kontener backend w docker-compose
|
||
- Node.js + Express + podstawowa struktura
|
||
- Healthcheck endpoint
|
||
|
||
2. 🗄️ **PostgreSQL setup** (2-3 godziny)
|
||
- Kontener PostgreSQL
|
||
- Schema bazy (6 tabel)
|
||
- Narzędzie do migracji (Prisma/Knex)
|
||
- Seed data
|
||
|
||
3. 🔐 **Authentication API** (3-4 godziny)
|
||
- bcrypt + JWT
|
||
- Register/Login endpoints
|
||
- Auth middleware
|
||
- Podłączenie frontendu
|
||
|
||
4. 💬 **WebSocket Chat** (4-5 godzin)
|
||
- Socket.IO setup
|
||
- Event rooms
|
||
- Real-time messaging
|
||
- Active users list
|
||
|
||
**Łączny czas:** ~11-14 godzin (1-2 tygodnie przy spokojnym tempie)
|
||
|
||
---
|
||
|
||
### Faza 2: Core Features (2-3 tygodnie)
|
||
1. Matches API (tworzenie par)
|
||
2. Private chat 1:1 (Socket.IO rooms)
|
||
3. WebRTC signaling server
|
||
4. Ratings API
|
||
|
||
---
|
||
|
||
### Faza 3: Główna funkcjonalność WebRTC (3-4 tygodnie)
|
||
1. **WebRTC P2P connection**
|
||
2. **File transfer via DataChannel** (chunking, progress)
|
||
3. Error handling i reconnection
|
||
4. Optymalizacje
|
||
|
||
---
|
||
|
||
### Faza 4: Finalizacja MVP (2-3 tygodnie)
|
||
1. Bezpieczeństwo (rate limiting, validation, CORS)
|
||
2. Testy (unit, integration, E2E)
|
||
3. PWA features (manifest, service worker)
|
||
4. Deployment
|
||
|
||
---
|
||
|
||
### Faza 5: Opcjonalne rozszerzenia (ongoing)
|
||
- Features z sekcji 11
|
||
|
||
---
|
||
|
||
## 📊 Postęp projektu
|
||
|
||
**Ukończone:** ~25% (frontend mockup + dokumentacja)
|
||
**W trakcie:** 0% (przygotowanie do backend)
|
||
**Do zrobienia:** ~75% (backend, WebRTC, deployment)
|
||
|
||
---
|
||
|
||
## 📝 Notatki
|
||
- ✅ Frontend mockup gotowy - można prezentować UX
|
||
- 🎯 Następny krok: **Backend setup** (Node.js + Express + PostgreSQL)
|
||
- 💡 Wszystkie widoki działają z mock data - łatwo podłączyć prawdziwe API
|
||
- 🔥 Główna funkcjonalność (WebRTC P2P) jest mockupem - wymaga implementacji
|
||
- 📌 Regularnie aktualizuj status zadań (⏳ → 🔄 → ✅)
|
||
- 🚀 WebRTC file transfer to najważniejsza i najtrudniejsza część projektu
|
||
|
||
---
|
||
|
||
## 🎓 Dodatkowe zasoby
|
||
|
||
### Backend (Node.js + Express)
|
||
- Express best practices: https://expressjs.com/en/advanced/best-practice-performance.html
|
||
- JWT authentication: https://jwt.io/introduction
|
||
- Socket.IO docs: https://socket.io/docs/v4/
|
||
|
||
### WebRTC
|
||
- WebRTC for beginners: https://webrtc.org/getting-started/overview
|
||
- RTCDataChannel guide: https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel
|
||
- File transfer via WebRTC: https://webrtc.github.io/samples/src/content/datachannel/filetransfer/
|
||
|
||
### Database
|
||
- Prisma docs: https://www.prisma.io/docs
|
||
- PostgreSQL best practices: https://wiki.postgresql.org/wiki/Don't_Do_This
|