Files
spotlightcam/docs/SESSION_CONTEXT.md
Radosław Gierwiało 913d685721 docs: streamline README and update SESSION_CONTEXT, archive outdated docs
- 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
2025-11-30 20:17:27 +01:00

7.5 KiB

Session Context - spotlight.cam

Quick reference for resuming development sessions


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: MVP Complete - Production Ready Tests: 342/342 backend tests passing - 100% (72.5% coverage) Recent Work: Matching runs audit, ratings & stats system, comprehensive test suite

Core Features (All Implemented)

  • JWT authentication with email verification (AWS SES)
  • Real-time chat (Socket.IO) - event rooms + private 1:1
  • WebRTC P2P file transfer (RTCDataChannel, up to 700MB tested)
  • Competition heats system for matchmaking
  • Recording matching system with 3-tier account system (BASIC/SUPPORTER/COMFORT)
  • Fairness algorithm (karma tracking: recordingsDone vs recordingsReceived)
  • Dual buffer system (prep before + rest after dancing)
  • Matching runs audit with origin_run_id tracking
  • Incremental matching (preserves accepted/completed suggestions)
  • Scheduler integration (automated matching with cron)
  • Atomic stats updates with race condition prevention
  • Clickable usernames with @ prefix, country flags
  • Matches & ratings API
  • QR code event check-in
  • PWA (offline support, iOS compatible)
  • Security: CSRF, rate limiting, account lockout
  • Test bot for automated testing

Project Structure (Key Paths)

/spotlightcam
├── docker-compose.yml       # nginx:8080 + frontend + backend + db
├── frontend/src/
│   ├── pages/               # React pages
│   ├── components/          # Reusable components
│   ├── contexts/            # AuthContext
│   ├── services/            # api.js, socket.js
│   ├── hooks/               # useWebRTC.js
│   └── constants/           # MATCH_STATUS, SUGGESTION_STATUS, etc.
├── backend/src/
│   ├── routes/              # API endpoints (events.js, matches.js, admin.js)
│   ├── controllers/         # Business logic
│   ├── services/            # matching.js (auto-matching algorithm)
│   ├── socket/              # Socket.IO handlers
│   ├── constants/           # Status constants
│   └── __tests__/           # Jest tests (342 tests - 100% passing)
│       ├── matching-algorithm.test.js      # 19 tests
│       ├── ratings-stats-flow.test.js      # 9 tests
│       ├── matching-runs-audit.test.js     # 6 tests
│       ├── matching-incremental.test.js    # 5 tests
│       └── socket.test.js                  # 12 tests
└── docs/
    ├── SESSION_CONTEXT.md   # This file - quick context
    ├── TODO.md              # Current tasks & roadmap
    ├── ARCHITECTURE.md      # Technical details
    ├── DEPLOYMENT.md        # Deployment guide
    ├── MONITORING.md        # Operations guide
    ├── TESTING_MATCHING_RATINGS.md  # Comprehensive test documentation (45 tests)
    ├── WEBRTC_TESTING_GUIDE.md      # WebRTC testing guide
    └── archive/             # Archived documentation

Database Schema (11 tables)

Key models:

  • users - Auth, profile, social links, location, lockout fields
    • Account tiers: accountTier (BASIC/SUPPORTER/COMFORT), recordingsDone, recordingsReceived
  • events - Dance events with unique slugs
  • event_participants - User-event relationship, competitorNumber, recorderOptOut, accountTierOverride
  • divisions / competition_types / event_user_heats - Competition system
  • matches - User pairings with CUID slugs
  • ratings - 1-5 stars, comments, statsApplied flag
  • recording_suggestions - Auto-matching results with collision detection, originRunId tracking
  • matching_runs - Audit trail (manual/scheduler, status, stats)
  • chat_rooms / messages - Real-time chat persistence

Recent Changes (Last 2 Days)

Matching Runs Audit System

  • File: backend/src/__tests__/matching-runs-audit.test.js (6 tests)
  • Features:
    • origin_run_id assignment and tracking
    • Sequential runs create separate audit records
    • Accepted suggestions preserve origin_run_id across re-runs
    • Admin endpoints with filtering (onlyAssigned, includeNotFound)
    • Manual vs scheduler trigger differentiation

Ratings & Stats Integration

  • File: backend/src/__tests__/ratings-stats-flow.test.js (9 tests)
  • Features:
    • Atomic stats updates (recordingsDone, recordingsReceived)
    • Race condition prevention with statsApplied flag
    • Source filtering (only auto matches update stats)
    • Idempotency (double-rating prevention)
    • E2E double-rating completion flow

Documentation

  • Updated: README.md with current test statistics (342/342)
  • New: docs/TESTING_MATCHING_RATINGS.md (comprehensive 45-test overview)
  • Archived: Outdated quick start guides

Quick Commands

# Start development
docker compose --profile dev up

# Run all backend tests
docker compose exec backend npm test

# Run specific test suite
docker compose exec backend npm test -- matching-runs-audit.test.js

# Coverage report
docker compose exec backend npm run test:coverage

# Admin CLI
docker compose exec backend npm run cli -- users:list --limit 20

# Access
# Frontend: http://localhost:8080
# API: http://localhost:8080/api
# Health: http://localhost:8080/api/health

Development Guidelines

  • Code language: All code, strings, comments in ENGLISH
  • Communication: POLISH with developer
  • Git commits: Standard format, NO AI mentions
  • Port: 8080 (not 80)
  • Tailwind: v3.4.0 (v4 has breaking changes)

Key Constants

// frontend/src/constants/ & backend/src/constants/
MATCH_STATUS: pending | accepted | rejected | completed
SUGGESTION_STATUS: pending | accepted | rejected | not_found
CONNECTION_STATE: disconnected | connecting | connected | failed
ACCOUNT_TIER: BASIC | SUPPORTER | COMFORT

// Tier fairness penalties
FAIRNESS_SUPPORTER_PENALTY: 10
FAIRNESS_COMFORT_PENALTY: 50

// Matching config
MAX_RECORDINGS_PER_PERSON: 3
PREP_BUFFER_MINUTES: 30
REST_BUFFER_MINUTES: 60

Test Accounts (Seeded)

Username Email Password
john_dancer john@example.com Dance123!
sarah_swings sarah@example.com Swing456!
mike_blues mike@example.com Blues789!

Test Coverage Summary

Total: 342/342 tests passing (100% )

  • Matching Algorithm: 19 tests (TC1-TC19)
    • Fundamentals, collision detection, limits, fairness, edge cases
  • Ratings & Stats: 9 tests
    • Atomic updates, race prevention, idempotency
  • Matching Runs Audit: 6 tests
    • origin_run_id tracking, sequential runs, filtering
  • Incremental Matching: 5 tests
  • Recording Stats Integration: 6 tests
  • WebRTC Signaling: 12 tests
  • Socket.IO: 12 tests
  • API Routes: Full CRUD coverage (auth, events, matches, dashboard)

Code Coverage:

  • matching.js: 94.71% statements, 91.5% branches
  • routes/matches.js: 76.11% statements
  • routes/events.js: 78.2% statements

For More Details

  • docs/TODO.md - Active tasks, security audit, future improvements
  • docs/ARCHITECTURE.md - Technical implementation details
  • docs/TESTING_MATCHING_RATINGS.md - Comprehensive test documentation
  • docs/DEPLOYMENT.md - Production deployment guide
  • docs/MONITORING.md - Operations and monitoring
  • docs/archive/COMPLETED.md - Full history of completed features

Last Updated: 2025-11-30