2025-11-12 17:50:44 +01:00
# spotlight.cam 🎥
2025-11-30 20:17:27 +01:00
**P2P video exchange app for the dance community** - matchmaking, chat, and WebRTC file transfer directly between users.
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
---
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
## 🎯 What is this?
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
Web application (PWA) enabling dance event participants to:
- Find recording partners via smart auto-matching
- Exchange competition videos peer-to-peer using WebRTC
- Rate collaborations and track partnership history
- Chat in real-time (event rooms + private 1:1 messages)
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
**Key Feature:** Direct browser-to-browser video file transfer using WebRTC DataChannel - no files stored on server, end-to-end encrypted (DTLS), tested up to 700MB+.
---
## ✅ Core Features
### Authentication & Security
- JWT authentication with bcrypt password hashing
- Email verification via AWS SES (link + PIN code)
- Password reset workflow
- WSDC integration (auto-fill profile data from worldsdc.com)
- Event slugs (alphanumeric IDs preventing enumeration attacks)
2025-12-05 21:30:58 +01:00
- Cloudflare Turnstile CAPTCHA (bot protection on registration & contact form)
2025-11-30 20:17:27 +01:00
- Security: CORS, CSRF, Helmet.js, rate limiting, account lockout
2025-12-05 21:30:58 +01:00
- Trust proxy for correct client IP detection behind nginx
2025-11-30 20:17:27 +01:00
### Events & Chat
- Event list from worldsdc.com
- Real-time event chat (Socket.IO) with active users sidebar
2025-12-03 00:03:37 +01:00
- Real-time active users list (instant updates when users join/leave)
2025-11-30 20:17:27 +01:00
- Infinite scroll message history
- Clickable usernames (/@{username}) with country flags
- Competitor numbers (bib numbers) display
2025-12-03 00:03:37 +01:00
- Message validation: 2000 character limit with visual counter
- Spam protection: rate limiting (10 msg/min), duplicate detection, profanity filter
- Polish + English profanity filtering
2025-11-30 20:17:27 +01:00
### Auto-matching & Fairness System
- Smart recording assignment for competition heats
- 3-tier account system (BASIC/SUPPORTER/COMFORT) with fairness algorithm
- Karma tracking (recordingsDone vs recordingsReceived)
- Dual buffer system (prep time before + rest time after dancing)
- Collision detection (schedule conflicts, max recordings limit)
- Matching runs audit with origin_run_id tracking
- Incremental matching (preserves accepted/completed suggestions)
- Automated scheduler (cron-based)
### Matchmaking & Private Chat
- Manual match requests with real-time notifications
- Private 1:1 chat for matched users
- Match slugs (CUID) preventing ID enumeration
### WebRTC P2P File Transfer
- Browser-to-browser video file exchange (RTCDataChannel)
- 16KB chunking with progress monitoring
2025-12-05 21:30:58 +01:00
- Cloudflare TURN/STUN servers for reliable NAT traversal
- Dynamic ICE server configuration with fallback to public STUN
2025-11-30 20:17:27 +01:00
- E2E encryption (DTLS/SRTP)
- WebRTC capability detection
- User-friendly fallback when WebRTC blocked
- Tested up to 700MB+ file transfers
### Ratings & Stats
- Partner ratings (1-5 stars, comments)
- "Would collaborate again" indicator
- Public rating display on user profiles
- Atomic stats updates (race condition prevention)
- Source filtering (auto vs manual matches)
- Auto-completion when both partners rated
2025-12-05 21:30:58 +01:00
### User Profiles & Public Pages
- Public profiles (/u/{username}) accessible without authentication
- Clickable usernames in navbar linking to profile
2025-11-30 20:17:27 +01:00
- Social media links (YouTube, Instagram, Facebook, TikTok)
- Location (country + city with 195 countries)
2025-12-05 21:30:58 +01:00
- Profile statistics (average rating, reviews)
- Responsive mobile layout
- 404 page with activity logging for invalid routes
2025-12-06 12:33:01 +01:00
- Static content pages (About Us, How It Works, Privacy Policy) - HTML-based
- Dedicated Footer component for authenticated users
- GDPR/RODO compliant cookie consent banner
- Google Analytics 4 integration with privacy controls
2025-11-30 20:17:27 +01:00
2025-12-02 23:24:38 +01:00
### Admin & Monitoring
- Activity Log System with real-time streaming dashboard
- Comprehensive audit trail (auth, events, matches, chat, admin actions)
- Filter logs by date range, action type, category, username, success/failure
- Real-time Socket.IO streaming (like `tail -f` )
- Admin-only access with requireAdmin middleware
- Statistics dashboard (total logs, failures, 24h activity)
2025-12-05 21:30:58 +01:00
- Contact form submissions with admin panel
- Admin dropdown menu in navbar (Activity Logs, Contact Messages)
2025-12-02 23:24:38 +01:00
2025-11-30 20:17:27 +01:00
### PWA & Infrastructure
- Progressive Web App (offline support, iOS compatible)
- Docker Compose orchestration (nginx, frontend, backend, PostgreSQL)
2025-12-06 12:33:01 +01:00
- Development profile: No resource limits
- Production profile: Optimized for 4 CPU / 8GB server (3.5 CPU / 6GB allocated)
2025-12-02 23:24:38 +01:00
- PostgreSQL 15 with Prisma ORM (12 tables)
2025-11-30 20:17:27 +01:00
- Admin CLI with REPL for operations
2025-12-06 12:33:01 +01:00
- Makefile commands for streamlined development
- Split seed scripts (development vs production data)
- Environment-based configuration (.env.development, .env.production)
- Beta testing mode with account tier auto-assignment
2025-11-30 20:17:27 +01:00
---
## 🛠️ Tech Stack
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
**Frontend:** React 18 + Vite + Tailwind CSS v3.4.0 + Socket.IO Client + WebRTC
**Backend:** Node.js 20 + Express 4.18 + Socket.IO 4.8 + JWT + bcrypt
**Database:** PostgreSQL 15 + Prisma ORM 5.22
**Infrastructure:** Docker Compose + Nginx + Alpine Linux
2025-12-05 21:30:58 +01:00
**Testing:** Jest + Supertest (351 tests, 73% coverage, 100% passing ✅)
**External Services:** AWS SES (email), Cloudflare Turnstile (CAPTCHA), Cloudflare TURN (WebRTC)
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
---
## 🚀 Quick Start
### Prerequisites
2025-11-13 21:53:53 +01:00
- Docker and Docker Compose
2025-11-12 17:50:44 +01:00
2025-12-06 18:27:54 +01:00
### 1. Setup production volumes (one-time setup)
Production environment requires persistent external Docker volumes for database and logs:
```bash
# Create production database volume
docker volume create slc_postgres_prod_data
# Create production logs volume
docker volume create slc_logs_prod
```
These volumes persist data across container restarts and are used by:
- `slc_postgres_prod_data` - PostgreSQL database files
- `slc_logs_prod` - Application and nginx logs (accessible at `/var/log/app/` and `/var/log/nginx-app/` )
**Note:** Development profile uses auto-created volumes (no manual setup needed).
### 2. Start the application
2025-11-12 17:50:44 +01:00
```bash
2025-11-30 20:17:27 +01:00
# Clone repository
2025-11-12 17:50:44 +01:00
git clone < repo-url >
cd spotlightcam
2025-11-30 20:17:27 +01:00
# Copy environment file
2025-11-13 21:51:11 +01:00
cp backend/.env.example backend/.env
2025-11-30 20:17:27 +01:00
# Start development mode
2025-11-13 21:51:11 +01:00
docker compose --profile dev up
2025-11-12 17:50:44 +01:00
2025-12-06 18:27:54 +01:00
# Start production mode (requires volumes from step 1)
docker compose --profile prod up
2025-11-30 20:17:27 +01:00
# Open browser
2025-12-06 18:27:54 +01:00
http://localhost:8080 # Development
http://localhost # Production
2025-11-12 17:50:44 +01:00
```
2025-12-06 18:27:54 +01:00
### 3. Seed the database
2025-12-06 12:33:01 +01:00
```bash
# Seed with development data (includes test users, events, heats)
make seed-dev
# Or use npm directly
docker compose exec backend npm run prisma:seed:dev
```
2025-12-06 18:27:54 +01:00
### 4. Test the application
2025-11-30 20:17:27 +01:00
Use seeded accounts:
2025-12-06 12:33:01 +01:00
- **Admin:** admin@spotlight .cam / [password set during seed]
- **Test users:**
- john@spotlight .cam / Dance123! (SUPPORTER tier)
- sarah@spotlight .cam / Swing456! (SUPPORTER tier)
- mike@spotlight .cam / Blues789! (SUPPORTER tier)
2025-11-30 20:17:27 +01:00
**Flow:**
1. Login → Select event → Join chat
2. Request match with another user → Accept
3. Send video via WebRTC (P2P transfer)
4. Rate partner after exchange
### Commands
2025-11-13 21:51:11 +01:00
```bash
2025-11-30 20:17:27 +01:00
# Stop services
docker compose --profile dev down
# Rebuild after changes
docker compose --profile dev up --build
2025-12-06 12:33:01 +01:00
# Database seeding
make seed-dev # Development data (admin + test users + events)
make seed-prod # Production data (admin + divisions + competition types only)
2025-11-30 20:17:27 +01:00
# Run tests
2025-12-06 12:33:01 +01:00
make test # Run all tests
make test-watch # Run tests in watch mode
make test-coverage # Run tests with coverage report
2025-11-30 20:17:27 +01:00
2025-12-06 12:33:01 +01:00
# Or use docker compose directly
docker compose exec backend npm test
2025-11-30 20:17:27 +01:00
docker compose exec backend npm test -- matching-algorithm.test.js
# Admin CLI
2025-12-06 12:33:01 +01:00
make dev-cli # Interactive REPL
2025-11-30 20:17:27 +01:00
docker compose exec backend npm run cli -- users:list --limit 20
2025-12-06 18:27:54 +01:00
# Production logs (persistent across restarts)
docker exec slc-backend-prod tail -f /var/log/app/backend.log
docker exec slc-proxy-prod tail -f /var/log/nginx-app/nginx.log
2025-11-13 21:51:11 +01:00
```
2025-11-30 20:17:27 +01:00
---
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
## 📊 Test Coverage
2025-11-13 21:51:11 +01:00
2025-12-06 14:45:21 +01:00
**Backend: ~348-349 passing, ~5-6 flaky, 11 skipped** (365 total tests)
2025-11-12 17:50:44 +01:00
2025-12-06 14:45:21 +01:00
### Test Status
- ✅ **20/23 test suites stable** - Consistently passing
- ⚠️ **3/23 test suites flaky** - Pass individually, may fail in full suite (race conditions)
- ⏭️ **11 tests skipped** - Socket.IO server setup required (3), outdated auth tests (2), rate limiting (1)
### Stable Test Suites
- **Matching Algorithm**: 19/19 tests (flaky in full suite - run individually)
- **Ratings & Stats Flow**: 9/9 tests (flaky in full suite - run individually)
2025-11-30 20:17:27 +01:00
- **Matching Runs Audit**: 6/6 tests
- **Incremental Matching**: 5/5 tests
- **Recording Stats Integration**: 6/6 tests
- **WebRTC Signaling**: 12/12 tests
2025-12-06 14:45:21 +01:00
- **WebRTC API**: 9/9 tests
2025-11-30 20:17:27 +01:00
- **Socket.IO**: 12/12 tests
2025-12-06 14:45:21 +01:00
- **Authentication**: 24/24 tests
- **Dashboard**: 12/12 tests
- **Users**: 23/25 tests (2 skipped - endpoints are public)
- **Matches**: 24/24 tests
- **Events**: 55/55 tests (flaky in full suite - run individually)
- **And 7 more...**
### Flaky Tests (Known Issues)
See [docs/TESTING.md ](docs/TESTING.md ) for detailed analysis of:
- `matching-algorithm.test.js` - Race conditions in concurrent runs
- `ratings-stats-flow.test.js` - Database state dependencies
- `events.test.js` - Cleanup interference between tests
**Workaround:** Run flaky tests individually when needed:
```bash
docker compose exec backend npm test -- matching-algorithm.test.js # ✅ 19/19
docker compose exec backend npm test -- ratings-stats-flow.test.js # ✅ 9/9
docker compose exec backend npm test -- events.test.js # ✅ 55/55
```
**Documentation:** See [docs/TESTING.md ](docs/TESTING.md ) for comprehensive testing guide
2025-12-05 21:30:58 +01:00
- **API Routes**: Full CRUD coverage (auth, events, matches, dashboard, webrtc)
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
### Code Coverage Highlights
- matching.js: 94.71% statements, 91.5% branches
- routes/matches.js: 76.11% statements
- routes/events.js: 78.2% statements
2025-12-05 21:30:58 +01:00
- routes/webrtc.js: 100% coverage (9 comprehensive tests)
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**Comprehensive test documentation:** See `docs/TESTING_MATCHING_RATINGS.md` for detailed breakdown of all 45 matching/ratings tests.
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
---
## 📁 Project Structure
2025-11-13 21:51:11 +01:00
2025-11-12 17:50:44 +01:00
```
2025-11-30 20:17:27 +01:00
spotlightcam/
2025-12-06 12:33:01 +01:00
├── Makefile # Development commands (dev-up, seed-dev, test, etc.)
2025-11-30 20:17:27 +01:00
├── docker-compose.yml # Container orchestration (dev + prod profiles)
├── nginx/ # Nginx reverse proxy config
├── frontend/ # React PWA
2025-12-06 12:33:01 +01:00
│ ├── .env.development # Frontend environment variables (dev)
│ ├── .env.production # Frontend environment variables (prod)
│ ├── public/content/ # Static HTML content (About Us, How It Works, Privacy)
2025-11-30 20:17:27 +01:00
│ ├── src/
│ │ ├── components/ # React components
2025-12-06 12:33:01 +01:00
│ │ │ ├── common/ # TierBadge, Footer, CookieConsent, BetaBanner
│ │ │ ├── layout/ # Navbar, Layout, PublicLayout, Footer
│ │ │ └── events/ # ParticipantsSidebar with status grouping
2025-12-05 21:30:58 +01:00
│ │ ├── pages/ # Application pages (Home, Profile, Contact, 404)
│ │ │ └── admin/ # Admin pages (ActivityLogsPage, ContactMessages)
2025-12-06 12:33:01 +01:00
│ │ ├── hooks/ # Custom hooks (useWebRTC, usePageTracking)
2025-11-30 20:17:27 +01:00
│ │ ├── contexts/ # AuthContext
2025-12-05 21:30:58 +01:00
│ │ ├── services/ # API client, Socket.IO client, WebRTC API
2025-12-06 12:33:01 +01:00
│ │ ├── utils/ # Analytics (GA4 integration)
2025-11-30 20:17:27 +01:00
│ │ └── constants/ # Status constants
│ ├── Dockerfile # Development container
│ └── Dockerfile.prod # Production build
├── backend/ # Node.js + Express API
2025-12-06 12:33:01 +01:00
│ ├── .env.development # Backend environment variables (dev)
│ ├── .env.production # Backend environment variables (prod)
2025-11-30 20:17:27 +01:00
│ ├── src/
2025-12-06 12:33:01 +01:00
│ │ ├── controllers/ # Auth (with beta auto-tier), users, events, WSDC
2025-12-05 21:30:58 +01:00
│ │ ├── routes/ # API routes (events, matches, admin, webrtc, public)
2025-12-02 23:24:38 +01:00
│ │ ├── services/ # Matching algorithm, activity logging
2025-12-03 00:03:37 +01:00
│ │ ├── middleware/ # Auth, admin access, message validation (spam protection)
2025-12-02 23:24:38 +01:00
│ │ ├── socket/ # Socket.IO handlers (chat, WebRTC signaling, admin logs)
2025-12-05 21:30:58 +01:00
│ │ └── __tests__ / # Jest tests (351 tests, 100% passing)
2025-11-30 20:17:27 +01:00
│ ├── prisma/
2025-12-02 23:24:38 +01:00
│ │ ├── schema.prisma # Database schema (12 tables)
2025-12-06 12:33:01 +01:00
│ │ ├── migrations/ # Database migrations
│ │ ├── seed.development.js # Development seed (admin + test users + events)
│ │ └── seed.production.js # Production seed (admin + basic data only)
2025-11-30 20:17:27 +01:00
│ ├── Dockerfile # Development container
│ └── Dockerfile.prod # Production build
└── docs/ # Documentation
├── SESSION_CONTEXT.md # Quick session context (for resuming work)
├── TODO.md # Active tasks & roadmap
├── ARCHITECTURE.md # Technical implementation details
├── DEPLOYMENT.md # Production deployment guide
├── MONITORING.md # Operations & monitoring
2025-12-06 14:45:21 +01:00
├── TESTING.md # Testing guide & flaky test documentation
2025-11-30 20:17:27 +01:00
├── TESTING_MATCHING_RATINGS.md # Comprehensive test documentation
├── WEBRTC_TESTING_GUIDE.md # WebRTC testing guide
2025-12-06 12:33:01 +01:00
├── GOOGLE_ANALYTICS_SETUP.md # GA4 integration guide
2025-11-30 20:17:27 +01:00
└── archive/ # Archived documentation
```
---
2025-11-12 17:50:44 +01:00
2025-11-13 21:51:11 +01:00
## 🗄️ Database Schema
2025-11-12 17:50:44 +01:00
2025-12-02 23:24:38 +01:00
12 tables with relations (Prisma ORM):
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**Core Tables:**
2025-12-02 23:24:38 +01:00
- `users` - Authentication, profile, social links, location, account tiers, isAdmin flag
2025-11-30 20:17:27 +01:00
- `events` - Dance events with unique slugs
- `event_participants` - User-event relationship, competitor numbers
- `matches` - User pairings with CUID slugs
- `ratings` - 1-5 stars, comments, statsApplied flag
- `chat_rooms` / `messages` - Real-time chat persistence
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**Matching System:**
- `divisions` / `competition_types` / `event_user_heats` - Competition heats
- `recording_suggestions` - Auto-matching results with collision detection, originRunId
- `matching_runs` - Audit trail (manual/scheduler, status, stats)
2025-11-13 21:51:11 +01:00
2025-12-02 23:24:38 +01:00
**Admin & Monitoring:**
- `activity_logs` - Comprehensive audit trail with 18 action types, indexed for performance
2025-11-30 20:17:27 +01:00
**Other:**
- `event_checkin_tokens` - QR code check-in
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
See `docs/ARCHITECTURE.md` for detailed schema documentation.
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
---
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
## 🧰 Admin CLI
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
Quick operations via REPL or command mode:
2025-11-20 22:47:25 +01:00
2025-11-30 20:17:27 +01:00
```bash
# Start REPL
docker compose exec backend npm run cli
2025-11-20 22:47:25 +01:00
2025-11-30 20:17:27 +01:00
# List users
docker compose exec backend npm run cli -- users:list --limit 20
2025-11-20 22:47:25 +01:00
2025-11-30 20:17:27 +01:00
# Create user
docker compose exec backend npm run cli -- users:create --email admin@example .com --username admin --password 'Secret123!'
2025-11-20 22:47:25 +01:00
2025-11-30 20:17:27 +01:00
# Verify email
docker compose exec backend npm run cli -- users:verify --email admin@example .com
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
# List events
docker compose exec backend npm run cli -- events:list --limit 10
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
# Import WSDC events
docker compose exec backend npm run cli -- events:import:wsdc --dry-run --since 2024-01-01 --until 2024-12-31
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
# Event details
docker compose exec backend npm run cli -- events:details --slug warsaw-dance-2025
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
# Check-in user to event
docker compose exec backend npm run cli -- events:checkin --username john_doe --slug warsaw-dance-2025
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
# List matches
docker compose exec backend npm run cli -- matches:list --limit 20 --status accepted
2025-11-13 21:51:11 +01:00
```
2025-11-30 20:17:27 +01:00
**REPL mode:** Top-level await works for Prisma queries, e.g., `await prisma.user.findMany({ take: 5 })`
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
---
## 🔐 Security Features
2025-11-15 20:51:24 +01:00
2025-11-30 20:17:27 +01:00
**Implemented:**
2025-11-13 21:51:11 +01:00
- bcrypt password hashing (10 salt rounds)
2025-11-30 20:17:27 +01:00
- JWT authentication (httpOnly cookies in production)
2025-11-13 21:51:11 +01:00
- Email verification required
2025-11-30 20:17:27 +01:00
- Input validation (express-validator)
2025-11-13 21:51:11 +01:00
- SQL injection prevention (Prisma parameterized queries)
- XSS protection (input sanitization)
2025-11-30 20:17:27 +01:00
- Rate limiting (login: 5/15min, registration: 3/hour, email: 3/hour)
- CORS configuration
- CSRF protection
- Helmet.js security headers
- Account lockout after failed attempts
- Content Security Policy
- Unique slugs preventing ID enumeration
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
---
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
## 📖 Documentation
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**For quick start:**
- `docs/SESSION_CONTEXT.md` - Quick context for resuming sessions (recommended for AI assistants)
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**Main documentation:**
- `docs/TODO.md` - Active tasks, security audit, roadmap
- `docs/ARCHITECTURE.md` - Technical details, WebRTC flow, API endpoints
2025-12-06 14:45:21 +01:00
- `docs/TESTING.md` - **Testing guide & flaky test troubleshooting** ⭐
2025-11-30 20:17:27 +01:00
- `docs/TESTING_MATCHING_RATINGS.md` - Comprehensive test documentation (45 tests)
- `docs/DEPLOYMENT.md` - Production deployment guide
- `docs/MONITORING.md` - Operations and monitoring
2025-11-15 16:46:19 +01:00
2025-11-30 20:17:27 +01:00
**Testing guides:**
- `docs/WEBRTC_TESTING_GUIDE.md` - WebRTC P2P testing
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**Archived:**
- `docs/archive/COMPLETED.md` - Full history of completed features
- `docs/archive/PHASE_1.5.md` - Phase 1.5 documentation
- `docs/archive/SECURITY_AUDIT.md` - Security audit & fixes
2025-11-15 16:46:19 +01:00
2025-11-30 20:17:27 +01:00
---
2025-11-13 21:51:11 +01:00
## 🎯 Roadmap
2025-11-30 20:17:27 +01:00
### ✅ Completed Phases
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**Phase 0:** Frontend mockup with routing
**Phase 1:** Backend foundation (Node.js, Express, PostgreSQL, Socket.IO)
**Phase 1.5:** Email verification (AWS SES), WSDC integration, profiles
**Phase 2:** Matches & ratings API, message history
**Phase 2.5:** WebRTC P2P file transfer with fallback UX
**Phase 3:** MVP finalization (landing page, dashboard, security hardening, PWA, auto-matching)
2025-12-02 23:24:38 +01:00
**Phase 3.5:** Activity Log System (admin monitoring, real-time streaming dashboard, 18 action types)
2025-12-05 21:30:58 +01:00
**Phase 3.6:** Public enhancements (Cloudflare CAPTCHA, public profiles, static pages, responsive design, Cloudflare TURN)
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
### ⏳ Future Extensions (Phase 4)
2025-11-13 21:51:11 +01:00
- User badges & trust system
- Push notifications
- Video compression
- Multi-file transfer
2025-11-30 20:17:27 +01:00
- Block users
2025-11-12 17:50:44 +01:00
2025-11-30 20:17:27 +01:00
---
2025-11-12 17:50:44 +01:00
## 🤝 Contributing
2025-11-30 20:17:27 +01:00
**Development Guidelines:**
- **Code language:** All code, strings, comments in ENGLISH
- **Communication:** POLISH with team
- **Git commits:** Standard format WITHOUT AI mentions
- **Port:** 8080 (not 80 in dev)
- **Tailwind:** v3.4.0 (NOT v4 - breaking changes)
2025-11-13 21:51:11 +01:00
2025-11-30 20:17:27 +01:00
**Git workflow:**
2025-11-13 21:51:11 +01:00
```bash
git status
git add .
git commit -m "feat: description"
```
2025-11-30 20:17:27 +01:00
---
2025-11-12 17:50:44 +01:00
## 📄 License
TBD
---
2025-12-05 21:30:58 +01:00
**Status:** MVP Complete ✅ | 351/351 tests passing (100%) | Production Ready
2025-12-06 12:33:01 +01:00
**Last Updated:** 2025-12-06