Files
spotlightcam/docs/SESSION_CONTEXT.md
Radosław Gierwiało 4d7f814538 docs: update documentation after Phase 1 completion
Updated documentation to reflect completion of Phase 1 (Backend Foundation):

- SESSION_CONTEXT.md: Updated status to Phase 1 completed, ~50% progress
  - Added completed backend infrastructure details
  - Updated tech stack with actual versions
  - Added Phase 2 next steps (Matches API, Ratings, WebRTC)
  - Updated key files list with backend files
  - Added Prisma OpenSSL bug fix to known issues

- TODO.md: Marked Phase 1 as completed, Phase 2 as active
  - Moved Phase 1 steps to completed section with checkmarks
  - Added detailed Phase 2 tasks (4 steps: Matches API, Ratings API, WebRTC Signaling, WebRTC File Transfer)
  - Reorganized future phases (removed Phase 2 from future, renumbered)

- COMPLETED.md: Added comprehensive Phase 1 completion record
  - All 4 steps documented with checkmarks
  - Test coverage statistics (81.19% overall)
  - Infrastructure updates
  - Bug fixes (OpenSSL for Prisma)
  - Git commit history for Phase 1
2025-11-12 22:51:11 +01:00

9.2 KiB

Session Context - spotlight.cam

Quick reference for resuming development sessions - optimized for minimal token usage


Project Overview

Name: spotlight.cam Purpose: P2P video exchange app for dance event participants Main Feature: WebRTC P2P video file transfer (no server storage) Tech Stack: React + Vite + Tailwind | Node.js + Express + Socket.IO | PostgreSQL 15 | Docker Compose


Current Status

Phase: 1 (Backend Foundation) - COMPLETED Progress: ~50% Next Goal: Phase 2 - Core Features (Matches API, Ratings, WebRTC signaling)

What Works Now

  • Docker Compose (nginx:8080 + frontend + backend + PostgreSQL)
  • All frontend views with mockups
  • Backend API (Node.js + Express)
  • PostgreSQL database with 6 tables (Prisma ORM)
  • Real authentication (JWT + bcrypt)
  • Real-time chat (Socket.IO for event & match rooms)
  • WebRTC P2P transfer UI mockup

What's Missing

  • Matches API (create/accept/list matches)
  • Ratings API (rate partner after collaboration)
  • WebRTC signaling (SDP/ICE exchange via Socket.IO)
  • Actual WebRTC P2P file transfer implementation

Tech Stack

Infrastructure:

  • Docker Compose (nginx, frontend, backend, PostgreSQL db)
  • nginx reverse proxy on port 8080 (API + WebSocket)

Frontend:

  • React 18 + Vite
  • Tailwind CSS v3.4.0 (NOT v4 - compatibility issues)
  • React Router
  • Context API for state
  • socket.io-client for real-time chat

Backend:

  • Node.js 20 + Express 4.18.2
  • Socket.IO 4.8.1 for WebSocket (real-time chat)
  • PostgreSQL 15 with Prisma ORM 5.8.0
  • bcrypt + JWT authentication
  • Jest + supertest for testing (81%+ coverage)

WebRTC:

  • RTCPeerConnection
  • RTCDataChannel (file transfer)
  • Chunking (16KB chunks)
  • STUN/TURN servers

Project Structure

/spotlightcam
├── docker-compose.yml          # nginx + frontend + backend + PostgreSQL
├── nginx/                      # Proxy config (API + WebSocket)
├── frontend/                   # React PWA
│   ├── src/
│   │   ├── pages/             # All views (Login, Register, Events, Chat, Match, Rate, History)
│   │   ├── contexts/          # AuthContext (JWT integration)
│   │   ├── components/        # Layout, Navbar
│   │   ├── services/          # API client, Socket.IO client
│   │   └── mocks/             # Mock data (events, users for UI)
├── backend/                    # Node.js + Express API
│   ├── src/
│   │   ├── controllers/       # Auth, users, events
│   │   ├── middleware/        # Authentication middleware
│   │   ├── routes/            # API routes
│   │   ├── socket/            # Socket.IO server
│   │   ├── utils/             # Auth utils, DB connection
│   │   └── __tests__/         # Jest unit tests
│   └── prisma/                # Database schema, migrations, seed
└── docs/
    ├── SESSION_CONTEXT.md     # This file
    ├── CONTEXT.md             # Full project description
    ├── TODO.md                # Task list
    ├── ARCHITECTURE.md        # Technical details
    ├── COMPLETED.md           # Completed tasks archive
    └── RESOURCES.md           # Learning resources

Key Files

Frontend:

  • frontend/src/pages/EventChatPage.jsx - Event chat with Socket.IO real-time messaging
  • frontend/src/pages/MatchChatPage.jsx - Private chat + WebRTC mockup
  • frontend/src/contexts/AuthContext.jsx - JWT authentication integration
  • frontend/src/services/api.js - API client (register, login, users)
  • frontend/src/services/socket.js - Socket.IO client connection manager

Backend:

  • backend/src/server.js - Express server with Socket.IO integration
  • backend/src/socket/index.js - Socket.IO server (event/match rooms, 89% coverage)
  • backend/src/controllers/auth.js - Register, login endpoints
  • backend/src/middleware/auth.js - JWT authentication middleware
  • backend/src/utils/auth.js - bcrypt + JWT utilities
  • backend/prisma/schema.prisma - Database schema (6 tables)

Config:

  • docker-compose.yml - nginx, frontend, backend, PostgreSQL
  • nginx/conf.d/default.conf - Proxy for /api and /socket.io
  • backend/.env - Database URL, JWT secret

Database Schema (Implemented - Prisma)

6 tables with relations:

  • users - id, username, email, password_hash, avatar, created_at
  • events - id, name, location, start_date, end_date, description, worldsdc_id
  • chat_rooms - id, event_id, match_id, type (event/private), created_at
  • messages - id, room_id, user_id, content, type, created_at
  • matches - id, user1_id, user2_id, event_id, room_id, status, created_at
  • ratings - id, match_id, rater_id, rated_id, score, comment, created_at

Migrations: Applied with Prisma Migrate Seed data: 3 events, 2 users, event chat rooms


User Flow

  1. Register/Login
  2. Choose event (from worldsdc.com list)
  3. Event chat - matchmaking
  4. Match confirmation → private 1:1 chat
  5. Select video from gallery (recorded outside app)
  6. WebRTC P2P transfer (direct, no server storage) OR link sharing fallback
  7. Rate partner (1-5 stars, comment)

Development Guidelines

Code Language

  • All code, strings, UI text, comments: ENGLISH
  • Variable/function names: ENGLISH
  • Communication with developer: POLISH

Git Commits

  • Standard format, NO mentions of AI/automatic generation
  • Good: feat: add WebRTC P2P video transfer
  • Bad: feat: add video transfer (generated by AI)

Important Decisions

  • Port 8080 (port 80 was occupied)
  • Tailwind CSS v3.4.0 (v4 has breaking changes with Vite)
  • Mock authentication uses localStorage
  • All UI text in English

Next Steps (Phase 2 - Core Features)

Priority: HIGH Estimated Time: 12-15 hours

Step 1: Matches API (3-4h)

  • POST /api/matches - Create match request
  • POST /api/matches/:id/accept - Accept match
  • GET /api/matches - List user's matches
  • Frontend integration (match request flow)
  • Tests

Step 2: Ratings API (2-3h)

  • POST /api/ratings - Submit rating after collaboration
  • GET /api/users/:id/ratings - Get user's ratings
  • Frontend integration (rating form)
  • Tests

Step 3: WebRTC Signaling (3-4h)

  • Socket.IO events for SDP/ICE exchange
  • Signaling flow (offer/answer/ice-candidate)
  • Frontend WebRTC setup (RTCPeerConnection)
  • Connection establishment tests

Step 4: WebRTC File Transfer (4-5h)

  • RTCDataChannel setup
  • File chunking (16KB chunks)
  • Progress monitoring (sender & receiver)
  • Error handling & reconnection
  • Complete P2P video transfer flow

Common Commands

Start project:

docker compose up --build

Access:

Rebuild after changes:

docker compose down
docker compose up --build

Git:

git status
git add .
git commit -m "feat: description"

Known Issues & Solutions

Issue: Tailwind v4 compatibility error

Solution: Downgraded to Tailwind v3.4.0

npm install -D tailwindcss@^3.4.0

Issue: Port 80 already allocated

Solution: Changed nginx port to 8080 in docker-compose.yml

Issue: Prisma OpenSSL error in Alpine Linux

Solution: Added OpenSSL to Dockerfile

RUN apk add --no-cache openssl

WebRTC Implementation Notes (Future)

Main functionality - P2P file transfer:

  • RTCPeerConnection for connection establishment
  • RTCDataChannel for binary data transfer
  • File chunking (16KB chunks recommended)
  • Progress monitoring (both sender and receiver)
  • Metadata exchange (filename, size, MIME type)
  • Error handling and reconnection logic
  • Fallback: link sharing (Google Drive, Dropbox)

Signaling:

  • WebSocket (Socket.IO) for SDP/ICE exchange
  • Server only for signaling, NOT for file storage

Security:

  • WebRTC native encryption (DTLS/SRTP)
  • Optional: additional chat encryption (WebCrypto API)

Quick Reference - Frontend Routes

  • /login - Login page
  • /register - Registration page
  • /events - Event list
  • /events/:id/chat - Event chat (public)
  • /matches/:id/chat - Private 1:1 chat + WebRTC mockup
  • /matches/:id/rate - Rate partner
  • /history - Match history

Quick Reference - Mock Data

Mock User (logged in):

Mock Events:

  • ID: 1 - Warsaw Dance Festival 2025
  • ID: 2 - Swing Camp Barcelona 2025
  • ID: 3 - Blues Week Herräng 2025

Files to Read for Full Context

Minimal (for quick start):

  • docs/SESSION_CONTEXT.md (this file)
  • docker-compose.yml
  • frontend/src/pages/MatchChatPage.jsx (WebRTC mockup)

Full context:

  • docs/CONTEXT.md (project description)
  • docs/TODO.md (task list)
  • docs/ARCHITECTURE.md (technical details)

Archives:

  • docs/COMPLETED.md (completed tasks)
  • docs/RESOURCES.md (learning resources)

Last Updated: 2025-11-12 Phase 1 Status: COMPLETED - Backend Foundation (Express + PostgreSQL + JWT + Socket.IO) Next Phase: Phase 2 - Core Features (Matches API + Ratings + WebRTC)