🎵 جورنال پروژه — پلتفرم موزیک

نوشته شده: خرداد ۱۴۰۴
وضعیت: در حال برنامه‌ریزی و جمع‌آوری داده


چرا این پروژه؟ — موزیک برای من

موزیک برام فقط یه سرگرمی نیست. یه نیاز واقعیه.

مشکل اینه که هر بار می‌خوام یه آهنگ پیدا کنم، باید بین ۵-۶ سایت مختلف دنبالش بگردم. یکی لینک خرابه، یکی کیفیتش پایینه، یکی اصلاً پیداش نیست. سرویس‌های خارجی مثل اسپاتیفای هم که یا فیلترن یا تحریم و بدتر یا اینترنت اکسزه.

این پروژه برام یه راه‌حل شخصیه که تبدیل شده به یه ایده بزرگ‌تر — یه پلتفرم که کاش وجود داشت.


📋 برنامه کلی — چی قراره بسازیم؟

تعریف ساده

یه پلتفرم موزیک ایرانی که:

  • آهنگ رو از دیتابیس خودش پیدا می‌کنه
  • برای پخش، بهترین منبع رو از بین ۱۷ سایت ایرانی انتخاب می‌کنه
  • پلی‌لیست محوره، نه فقط پخش ساده
  • هوشمنده — پیشنهاد می‌ده، یاد می‌گیره

ویژگی‌های اصلی

هسته:

  • موتور سرچ فوق‌العاده (فارسی + انگلیسی، fuzzy، معنایی)
  • Stream Resolver — جستجوی موازی در ۱۷ سایت برای پخش
  • دیتابیس متادیتا (عنوان، خواننده، آلبوم، لیریک، کاور)
  • پلیر با لیریک سینک‌شده و جلوه‌های بصری

اجتماعی:

  • پلی‌لیست شخصی، عمومی، مشترک
  • Import پلی‌لیست اسپاتیفای با لینک
  • Import فایل M3U8
  • آپلود آهنگ توسط کاربر

هوش مصنوعی:

  • ساخت پلی‌لیست با prompt فارسی
  • پیشنهاد آهنگ هوشمند
  • Radio Mode (بی‌نهایت موزیک مشابه)
  • تشخیص mood آهنگ از روی صدا

محتوای غنی:

  • لیریک تعاملی
  • بیوگرافی خواننده‌ها
  • موزیک مناطق ایران (کردی، لری، گیلکی...)
  • موزیک کلاسیک ایرانی و ردیف

🛠️ چه چیزهایی نیاز دارم؟

سخت‌افزار

مرحله سرور ایران سرور خارج
آلفا (۵۰۰ کاربر) VPS 8GB RAM / 4 core VPS ارزون 1GB (3-4 یورو)
بتا (۲۰,۰۰۰ کاربر) چند سرور جداگانه همان + CDN

نرم‌افزار و ابزارها

بک‌اند:

  • Python + FastAPI (async، سریع)
  • PostgreSQL (دیتابیس اصلی)
  • Redis (کش و صف)
  • Celery (وظایف پس‌زمینه)

سرچ:

  • MeiliSearch (سبک، سریع، فارسی‌دوست)

هوش مصنوعی (نیاز به سرور GPU):

  • Ollama + Phi-3-mini (پلی‌لیست با prompt)
  • sentence-transformers (سرچ معنایی)
  • librosa (تحلیل صدا، BPM، mood)

فرانت:

  • Next.js 14
  • Tailwind CSS
  • Howler.js (پخش صدا)
  • Zustand (مدیریت state)

زیرساخت:

  • Docker Compose (همه سرویس‌ها یکجا)
  • Nginx (reverse proxy)
  • Cloudflare Tunnel (ارتباط ایران-خارج)

مهارت‌های مورد نیاز

  • Python (متوسط تا پیشرفته)
  • SQL و طراحی دیتابیس
  • آشنایی با Docker
  • JavaScript / React پایه
  • آشنایی با web scraping

هزینه تقریبی ماهانه (آلفا)

آیتم هزینه
سرور ایران (8GB) ~700 هزار تومان
سرور ایران (GPU) ~خیلی دنبال زیرساخت ارزونم
سرور خارج (Hetzner) ~1 میلیون تومان
دامنه ~100 هزار تومان/سال
جمع ~1.8 میلیون تومان/ماه و یک خیلی

⚠️ مشکلات پیش رو

مشکلات فنی

Stream Resolver — بزرگ‌ترین چالش:
سایت‌های ایرانی لینک‌هاشون expire می‌شن. باید یه سیستم کش هوشمند بسازم که:

  • لینک‌ها رو با TTL کوتاه نگه داره
  • موقع پخش، لینک رو تازه‌سازی کنه
  • اگه سایت down بود، بدون تأخیر fallback کنه

سرچ فارسی:

  • نوشتار فارسی و عربی شبیه هم‌ان (ک و ک، ی و ی)
  • یه آهنگ ممکنه با ۵ شکل مختلف نوشته شده باشه
  • باید normalization قوی بسازم

جمع‌آوری داده:

  • سایت‌ها ساختارشون رو تغییر می‌دن → crawler می‌شکنه
  • باید سیستم مانیتورینگ داشته باشم

کانکشن خارجی:

  • تحریم‌ها — نمی‌تونم مستقیم از API های اسپاتیفای و... استفاده کنم
  • راه‌حل: VPS خارجی به عنوان proxy

مشکلات حقوقی

  • کپی‌رایت موزیک‌ها — چون فقط استریم می‌کنیم (نه host) ریسک کمتره
  • باید Terms of Service واضح داشته باشم

مشکلات رشد

  • اگه محبوب بشه، سرور ایران باید scale کنه
  • هزینه‌ها بالا می‌ره قبل از اینکه درآمد داشته باشم
  • نیاز به تیم خواهم داشت (به تنهایی نمی‌شه همه چیز رو ساخت)

مشکلات محتوا

  • دیتابیس اولیه خالیه — باید از جایی شروع کنم
  • لیریک‌ها باید دستی یا نیمه‌خودکار اضافه بشن
  • کیفیت متادیتای سایت‌های ایرانی پایینه

📍 تا کجا رسیدیم؟

✅ انجام شده — مرحله برنامه‌ریزی

این مرحله تموم شده:

  • معماری کلی سیستم طراحی شد
  • stack فنی انتخاب شد
  • نقشه راه مشخص شد
  • زیرساخت مورد نیاز برآورد شد

🔄 در حال انجام — جمع‌آوری داده

اتوماسیون ۱۷ سایت موزیک ایرانی:

هدف: ساخت دیتابیس متادیتا از آهنگ‌های ایرانی

سایت‌هایی که داریم crawl می‌کنیم:
  ├── سایت‌های موزیک ایرانی خارج از کشور
  │     (جایمی، نیوموزیک، ایران‌سانگ و...)
  └── آرشیوهای قدیمی‌تر

داده‌ای که جمع می‌کنیم:
  ├── عنوان آهنگ
  ├── نام خواننده
  ├── نام آلبوم
  ├── سال انتشار
  ├── ژانر
  ├── لینک کاور
  └── لینک‌های منبع برای استریم

وضعیت فعلی:

  • اتوماسیون در حال توسعه
  • هدف اولیه: ۱۰۰,۰۰۰ آهنگ برای لانچ آلفا
  • لیریک‌ها در مرحله بعد اضافه می‌شن

⏳ مراحل بعدی

[ ] راه‌اندازی PostgreSQL + MeiliSearch
[ ] ایندکس‌گذاری داده‌های جمع‌آوری شده
[ ] ساخت Stream Resolver (۵ سایت اول)
[ ] API پایه (سرچ + استریم)
[ ] فرانت MVP (پلیر ساده)
[ ] تست با ۵۰ کاربر اول

🗺️ نقشه راه کلی

الان ←──────────────────────────────────→ آینده

[جمع‌آوری داده] → [MVP] → [آلفا] → [بتا] → [عمومی]
     |               |        |         |          |
  ۱-۲ ماه        ۱ ماه    ۲ ماه    ۳ ماه    ۶+ ماه

💭 یادداشت شخصی

این پروژه بزرگه. شاید بزرگ‌تر از اونچه اول فکر می‌کردم.

ولی هر بار که یه سایت موزیک ایرانی باز می‌کنم و می‌بینم UX چقدر بده، یا لینک‌ها خرابن، یا آهنگی که دنبالش می‌گردم اصلاً نیست — انگیزه‌ام بیشتر می‌شه.

خلأ بازار واقعیه. محتوای غنی (لیریک، بیوگرافی، موسیقی منطقه‌ای) اصلاً در هیچ سرویس ایرانی درست نیست. اگه این رو درست بسازم، جای خودش رو پیدا می‌کنه.

قدم به قدم.


آخرین بروزرسانی: خرداد ۱۴۰۴