منصوبے کے بارے میں

Tandem ایک پری ریلیز (0.1.0، ابھی تک کوئی ٹیگ شدہ ریلیز نہیں) سیلف ہوسٹڈ پروجیکٹ ہے جس کا مقصد واضح طور پر بیان کیا گیا ہے: کتاب پڑھیں، اسی کتاب کو سنیں، اور اپنی جگہ کبھی نہ کھوئیں۔ ایک سرور PostgreSQL اور ویب ایپ کے ساتھ Docker میں چلتا ہے، جبکہ ایک React PWA اور ایک Kotlin/Jetpack Compose Android ایپ تھن کلائنٹس کے طور پر کام کرتے ہیں۔ سرور تمام اسٹیٹ فل کاموں کا مالک ہے — یہ ای بک اور آڈیو بک والیمز کو اسکین کرتا ہے، میٹا ڈیٹا اور کورز نکالتا ہے، ایک ای بک کو اس کی آڈیو بک کے ساتھ جوڑتا ہے، ٹرانسکرپشن کیو چلاتا ہے، سنک میپس تیار کرتا ہے، اور ریڈنگ پوزیشن کا واحد رائٹر ہے۔ کلائنٹس JWT auth کے ساتھ REST اینڈ پوائنٹس کے ذریعے پوزیشن پڑھتے اور لکھتے ہیں اور صرف ڈیوائس لوکل کیشز رکھتے ہیں۔ اس کی نمایاں صلاحیت فارمیٹس کے درمیان جملہ کی سطح پر ہینڈ آف ہے۔ پڑھنے سے سننے (یا واپس) کی طرف سوئچ کرنے سے آپ اس جملے پر پہنچ جاتے ہیں جہاں آپ تھے، نہ کہ باب کے آغاز میں، اور یہ تمام ڈیوائسز پر کام کرتا ہے۔ اس کے لیے ایک ٹرانسکرپٹ کی ضرورت ہوتی ہے: آڈیو بک کی ٹرانسکرپشن کی جاتی ہے اور اسے EPUB متن کے ساتھ ہم آہنگ کیا جاتا ہے۔ Whisper مقامی طور پر ایک سرور امیج میں چل سکتا ہے جو اختیاری لوکل اسٹیک کے ساتھ بنایا گیا ہو، یا ڈیفالٹ طور پر، جابز ایک علیحدہ Jetson ورکر (faster-whisper؛ ایک Orin Nano 8 GB ریفرنس ڈیپلائمنٹ ہے، ڈیفالٹ طور پر میڈیم ماڈل) کو بھیجے جاتے ہیں۔ اس کے ساتھ ری ٹرائز، آف آورز ونڈو اور ایک ٹرانسکرپٹ ایڈیٹر کے ساتھ ایک ٹرانسکرپشن کیو موجود ہے؛ ٹرانسکرپشن اختیاری ہے، اور اس کے بغیر آپ کو لائبریری اور دو ریڈرز تو ملیں گے لیکن کراس فارمیٹ سنک نہیں ملے گا۔ دیگر بیان کردہ خصوصیات میں سیریز گروپنگ اور خودکار ای بک/آڈیو بک پیئرنگ کے ساتھ ایک لائبریری اسکینر، لاک اسکرین کنٹرولز کے ساتھ ایک PWA ویب ریڈر/پلیئر (آئی فون کے لیے، کیونکہ کوئی iOS ایپ نہیں ہے)، آف لائن ڈاؤن لوڈز، بیک گراؤنڈ پلے بیک اور Android Auto کے ساتھ ایک Android ریڈر/لسنر، رولز کے ساتھ ملٹی یوزر اکاؤنٹس اور ڈیفالٹ طور پر صرف دعوت نامے کے ذریعے رجسٹریشن، آپٹ ان انٹیگریشنز (Audiobookshelf، Google Books، Open Library میٹا ڈیٹا، اور ACSM/Audible امپورٹس جن کے لیے ایک خاص امیج بلڈ کی ضرورت ہوتی ہے)، اور نائٹلی Postgres ڈمپس پلس کور اسنیپ شاٹس شامل ہیں جنہیں UI سے بحال کیا جا سکتا ہے۔ ڈیپلائمنٹ Docker Compose کے ذریعے کی جاتی ہے۔ README میں غیر معمولی طور پر واضح کیا گیا ہے کہ سیکریٹس انوائرمنٹ ویری ایبلز کے بجائے فائلوں میں ہونے چاہئیں (JWT key، Postgres password، secrets/ کے تحت Fernet credential-encryption keys)، کہ سرور کو ایک سنگل پراسیس کے طور پر چلنا چاہیے کیونکہ کیو اور شیڈولرز پراسیس لوکل ہیں، اور یہ کہ ایک نئی انسٹالیشن ایک سپر ایڈمن بناتی ہے جس کا رینڈملی جنریٹڈ پاس ورڈ لاگ میں لکھا ہوتا ہے، جو پہلی لاگ ان پر اسے ری سیٹ کرنے پر مجبور کرتا ہے۔ ریورس پراکسی سیٹ اپ کے لیے FORWARDED_ALLOW_IPS سیٹ کرنے کی ضرورت ہوتی ہے اور ایک ہارڈنڈ Caddyfile مثال فراہم کی گئی ہے۔ وسیع انوائرمنٹ ویری ایبل ٹیبلز لازمی، اختیاری، auth-throttle، upload-limit اور sync-tunable سیٹنگز کا احاطہ کرتے ہیں؛ پروڈکشن میں API دستاویزات (/docs, /redoc) جان بوجھ کر غیر فعال کیے گئے ہیں۔ دستاویزی حدود واضح ہیں: سنک کے لیے صرف EPUB (PDFs جوڑ تو جاتے ہیں لیکن کبھی ہم آہنگ نہیں ہوتے؛ MOBI/AZW3 کو تبدیل کرنا ضروری ہے)، آڈیو بکس کا سنگل فائل ہونا ضروری ہے (ملٹی فائل رپس کو چھوڑ دیا جاتا ہے، پہلے .m4b میں مرج کریں)، ایک وقت میں ایک ٹرانسکرپشن، کوئی ہورائزنٹل اسکیلنگ نہیں، کوئی iOS ایپ نہیں، ہارڈ ویئر پر Android Auto غیر تجربہ شدہ ہے، کہیں بھی کریش رپورٹنگ نہیں ہے، حال ہی میں ڈاؤن لوڈ/اسٹریمنگ پاتھز شامل کیے گئے ہیں، اور کسی بھی ایپ اسٹور میں کچھ نہیں ہے۔ پروجیکٹ کو ایک سنگل مینٹینر کی کوشش کے طور پر بیان کیا گیا ہے جو روزانہ استعمال میں ہے اور جس میں ایک حقیقی ٹیسٹ سویٹ ہے لیکن مصنف کے اپنے ہارڈ ویئر اور لائبریری لے آؤٹ کے علاوہ محدود رسائی ہے۔