කලින් පෝස්ට් එකෙන් මම කිව්වනේ මේක හදන්න ගිහින් YouTube Security එක්ක මම කරපු හැප්පීම ගැන. අද මම කතා කරන්න යන්නේ මේ වැඩේට මම පාවිච්චි කරපු Tech Stack එක ගැන. පිටින් බලද්දි සරල Music App එකක් වුණාට, මේක stable දුවන්න යටින් වෙනමම architecture එකක් වැඩ කරනවා.
මගේ ප්ලෑන් එක වුණේ Frontend, Backend සහ Deployment කියන කොටස් තුනම හරිම පිළිවෙලට වෙන් කරලා හදාගන්න එකයි. මේ තියෙන්නේ මම ඒකට පාවිච්චි කරපු tools ටික:
1. Frontend එක සහ Offline Storage එක මේක ෆෝන් එකේ ඇප් එකක් විදියට පේන එක සහ සම්පූර්ණයෙන්ම offline වැඩ කරන එක තමයි මෙතන ප්රධානම දේ.
අමතර වාසියක් විදියට, මගේ server එකේ මේ හැම සින්දුවකම backup එකක් හැදෙන නිසා, ෆෝන් එකේ browser ඩේටා මැකුණත් ආයේ YouTube එකෙන් download කර කර ඉන්න ඕනෙත් නෑ.
ඉස්සරහට මේ App එක තවත් ටිකක් ලස්සන කරලා, තව features ටිකක් දාලා, ඕනම කෙනෙක්ට තමන්ගේම server එකක setup කරගන්න පුළුවන් වෙන්න Open Source Repo එකක් විදියට public කරන්න බලාපොරොත්තුවක් තියෙනවා.
මගේ ප්ලෑන් එක වුණේ Frontend, Backend සහ Deployment කියන කොටස් තුනම හරිම පිළිවෙලට වෙන් කරලා හදාගන්න එකයි. මේ තියෙන්නේ මම ඒකට පාවිච්චි කරපු tools ටික:
1. Frontend එක සහ Offline Storage එක මේක ෆෝන් එකේ ඇප් එකක් විදියට පේන එක සහ සම්පූර්ණයෙන්ම offline වැඩ කරන එක තමයි මෙතන ප්රධානම දේ.
- Next.js 16 (App Router) & React 19: මගේ ප්රධාන framework එක. Frontend UI එකයි, Backend API Routes ටිකයි දෙකම එකම repo එකකින් manage කරන්න මේක ගොඩක් ලේසි වුණා.
- Tailwind CSS 4: YouTube Music එකට සමාන Dark UI එකක් ඉක්මනින්ම design කරගන්න පාවිච්චි කළා.
- Zustand: Play වෙන සින්දුව මොකක්ද, library එකේ තියෙන්නේ මොනවාද කියලා App එකේ state එක manage කරන්න, Redux වගේ ලොකු දේවල් නැතුව හරිම සැහැල්ලු Zustand පාවිච්චි කළා.
- IndexedDB (idb හරහා): App එකේ offline වැඩ කරන ප්රධානම කොටස. සින්දුවක් download කළාම, ඒ Audio blob එකයි, metadata ටිකයි ෆෝන් එකේම save කරලා තියාගන්නේ මේකෙන්.
- Service Worker & Media Session API: Network එකක් නැතුව මුලින්ම load වෙන්න app shell එක cache කළා. ඒ වගේම ෆෝන් එක lock කරලා තියෙද්දි background playback සහ lock-screen controls හැදුවේ මේකෙන්.
- yt-dlp & ffmpeg: YouTube එකෙන් අදාළ media එක fetch කරන්නේ yt-dlp වලින්. ඊටපස්සේ ඒක ගොඩක් ඉඩ යන්නේ නැති වෙන්න m4a/AAC format එකට transcode කරන්නේ ffmpeg හරහා.
- Deno: YouTube එකෙන් දෙන JavaScript Challenge එක solve කරන script එක run කරන්න yt-dlp එකට JS runtime එකක් ඕනේ. ඒකට තමයි server එක ඇතුළේ Deno run කළේ.
- Cloudflare WARP & PO-token provider: Server IP එක datacenter IP එකක් නිසා YouTube එකෙන් bot block එකක් එන එක නවත්තන්න, egress IP එක විදියට Cloudflare WARP පාවිච්චි කළා (SOCKS5 proxy එකක් විදියට). ඒ වගේම authentication handshakes වලට PO-tokens generate කරන්න වෙනම sidecar එකක් run කළා.
- Docker Compose: Main App එක, Deno පැත්ත, WARP සහ potoken කියන ඔක්කොම වෙන වෙනම containers විදියට හදලා එකම network එකක connect කළේ Docker Compose හරහා. මේක නිසා මුළු system එකම අලුත් server එකක වුණත් deploy කරන්න මාරම ලේසියි.
අමතර වාසියක් විදියට, මගේ server එකේ මේ හැම සින්දුවකම backup එකක් හැදෙන නිසා, ෆෝන් එකේ browser ඩේටා මැකුණත් ආයේ YouTube එකෙන් download කර කර ඉන්න ඕනෙත් නෑ.
ඉස්සරහට මේ App එක තවත් ටිකක් ලස්සන කරලා, තව features ටිකක් දාලා, ඕනම කෙනෙක්ට තමන්ගේම server එකක setup කරගන්න පුළුවන් වෙන්න Open Source Repo එකක් විදියට public කරන්න බලාපොරොත්තුවක් තියෙනවා.