A full-stack video streaming platform with secure authentication, media streaming, admin control, and a rich client experience.
Backend: Spring Boot Frontend: Angular 20
- Java 21
- Spring Boot (Web, Security, Data JPA, Validation)
- JWT (jjwt)
- MySQL (H2 for development)
- Java Mail (SMTP – Gmail)
- Lombok
- Tomcat (large file & streaming support)
- Angular 20
- Angular Material
- RxJS
- CSS (custom styling)
- UUID-based file storage
- HTTP Range streaming (206)
- Multipart upload handling
- Role-based access control
flowchart LR
subgraph Frontend
Client[Angular Client]
end
subgraph Backend
API[Spring Boot API]
Auth[Auth & Security]
Users[Users & Roles]
Videos[Videos]
Watchlist[Watchlist]
end
subgraph Data
DB[MySQL Database]
FS[File Storage]
end
Client -->|HTTP + JWT| API
API --> Auth
API --> Users
API --> Videos
API --> Watchlist
API --> DB
API --> FS
- Signup with email verification
- JWT-based login
- Password reset and change
- Resend verification
- Auth state restoration on frontend
- Role-based access (ADMIN / USER)
- Protected admin endpoints
- Last-admin safety guarantees
- Video upload with metadata
- HTTP range-based streaming
- Custom video player
- Featured and published videos
- Infinite scrolling & search
- User management
- Video management
- Publish control
- Platform statistics
- Safe admin constraints
- Watchlist
- Personalized video listings
- Debounced search
- Scroll position restore
- Keyboard-controlled player
All endpoints are RESTful, stateless, and JWT-secured where required.
POST /api/auth/signup
POST /api/auth/login
GET /api/auth/current-user
GET /api/auth/verify-email
GET /api/auth/validate-email
POST /api/auth/resend-verification
POST /api/auth/forgot-password
POST /api/auth/reset-password
POST /api/auth/change-password
Purpose:
- Account lifecycle
- Email verification
- Password security
- JWT session handling
GET /api/users
POST /api/users
PUT /api/users/{id}
DELETE /api/users/{id}
PUT /api/users/{id}/toggle-status
PUT /api/users/{id}/change-role
Rules enforced:
- Last admin protection
- Self-modification prevention
- Active admin guarantee
GET /api/videos/admin
POST /api/videos/admin
PUT /api/videos/admin/{id}
DELETE /api/videos/admin/{id}
PATCH /api/videos/admin/{id}/publish
GET /api/videos/admin/stats
GET /api/videos/published
GET /api/videos/featured
Features:
- Pagination & search
- Publish control
- Admin statistics
- User discovery
POST /api/files/upload/video
POST /api/files/upload/image
GET /api/files/video/{uuid}
GET /api/files/image/{uuid}
Streaming:
- Full content delivery
- HTTP Range support (206)
- Large file optimized
GET /api/watchlist
POST /api/watchlist/{videoId}
DELETE /api/watchlist/{videoId}
Behavior:
- User-specific
- Integrated with video listings
- Fast toggle operations
Request Video
|
JWT Validation
|
Range Parsing
|
206 Partial OR 200 Full
|
Stream File
- Auth guards & admin guards
- Lazy-loaded admin module
- Infinite scrolling
- Debounced search
- Media upload with progress
- Custom video player dialog
- Stateless backend
- Secure by default
- Explicit role control
- Scalable streaming
- Clean separation of concerns