I achieved 8th place in the "100 Commits" competition organized by DevMentors. Over 100 days, I developed the "YoutubeLinks" application, which allows users to create playlists from YouTube links and download those playlists as MP3 and MP4 files.
Downloading playlists as MP3 and MP4 files, tested successfully on over 3000 links.
Max downloaded mp3 file: length - 03:31:45, size - 391 MB
Max downloaded mp4 file: length - 25:44, size - 973 MB
Larger files not tested or can not work correctly.
- Youtube video
- Launch
- Presentation
- Technologies
- Architecture
- Project types and references
- Packages
- Features
- Roles
- Project status
Run application with one command (setup all docker containers, create database, apply migrations):
cd C:\Users\bartl\source\repos\YoutubeLinks
docker compose up --build -d
Created containers:
- C# Web API backend:
http://localhost:5000
- Blazor WASM frontend:
http://localhost:7000
- MSSQL database:
Host: localhost
Port: 1433
Database/Schema: YoutubeLinks
Username: sa
Password: Password1!
Server: youtubelinks.database
- Seq Api logs:
http://localhost:8081
Login credentials:
Admin:
- Email: [email protected]
- Password: Asd123!
User:
- Email: [email protected]
- Password: Asd123!
If You have any problems check issue below or ask me in GitHub issues: #52
- C# 12
- .NET 9.0
- Blazor WebAssembly
- Vue 3.4.21
Blazor WebAssembly frontend with .NET Minimal API backend connecting to the MSSQL database. Monolithic architecture with Vertical Slices. Code separated by feature.
- YoutubeLinks.Api - ASP .NET Core Web API (Backend)
- YoutubeLinks.Blazor - Blazor WebAssembly Standalone App (Frontend)
- YoutubeLinks.Shared - Class Library (Backend and Frontend shared code)
- YoutubeLinks.UnitTests - xUnit Test Project (Unit Tests)
- YoutubeLinks.E2E - NUnit Test Project (E2E Tests)
- youtube-links - Vue Project (Frontend 2)
Nuget packages and libraries used in projects.
- Api
- EntityFrameworkCore - ORM for connecting to the database
- MediatR - CQRS, Vertical Slices (code separated by Features)
- FluentValidation - Commands, Queries and server side logic validation
- FluentEmail - Sending registration confirmation email and registration succeeded email
- Serilog - Logging to console and file
- JwtBearer - Jwt Token Authentication
- Swagger - Manual Api testing
- YoutubeDLSharp - Get YouTube videos titles, download videos as .mp3 and .mp4 files
- Blazor
- MudBlazor - Blazor UI library
- Blazored.FluentValidation - Frontend validation + Backend validation
- Blazored.LocalStorage - store Jwt Token in local storage
- Users
- Register new user and send confirmation email
- Resend confirmation email
- Confirm user registration and send registration success email
- Login user if email is confirmed
- Refresh Jwt Token
- Forgot password
- Update user color theme
- Get all users (paginated, sorted and filtered)
- Get selected user
- Playlist
- Create playlist
- Delete playlist
- Update playlist (set playlist as public / private)
- Export playlist (.json, .txt)
- Import playlist (.json, .txt)
- Download playlist (only undownloaded links)
- Mark all playlist links as downloaded / undownloaded
- Get all public playlists (paginated, sorted and filtered)
- Get all user playlists (paginated, sorted and filtered)
- Get selected playlist
- Link
- Create link
- Delete link
- Update link (mark as downloaded, change title)
- Set link downloaded flag
- Download link (.mp3, .mp4)
- Download single link (no need to add link to the playlist)
- Get all playlist links (paginated, sorted and filtered)
- Get selected link
- Links grid / table view
- Admin - ony one user have Admin role
- User - can view website data, can do CRUD operations on owned playlists and links
- Anonymous - can view website data (public playlists / links)
Project created as part of the "100 Commits" competition. The challenge is to add changes to the repository every day for 100 days.
I achieved 8th place in the "100 Commits" competition organized by "DevMentors.io". Over 100 days, I developed the "YoutubeLinks" application, which allows users to create playlists from YouTube links and download those playlists as MP3 and MP4 files.
This project was a significant adventure that taught me perseverance and systematic work to achieve my project goals within the given timeframe. The "100 Commits" gala was a fantastic event, well-organized with engaging talks. I look forward to a potential second edition of the competition in the future.