همه‌ی کارها

تحقیق، طراحی و ساخت یک اپ آشنایی و شخصیت‌شناسی فارسی، تنها، از بک‌اند تا ۳۶ صفحه، در شش هفته

الاراژوئیه تا سپتامبر ۲۰۲۶تحقیق · طراحی · UX · بیلد کامل · تک‌نفره
۳۶
صفحه که ساختم؛ اپ به‌علاوه‌ی پنل مدیریت ۱۴صفحه‌ای
۱۸
ابزار شخصیت‌شناسی، ۸۶۱ گویه، همه به فارسی
۷۷۳ تست
۲۱۹ کامیت، تنها، در شش هفته
زنده
elaraa.ir · @Elaradate_bot، روی سرور واقعی

زمینه

الارا یک مینی‌اپ تلگرامی آشنایی و شخصیت‌شناسی فارسی است، و تحقیق، طراحی و کل ساختش را تنها خودم انجام دادم. از یک بررسی بازار شروع کردم، نه از یک ایده‌ای که خوشم آمده باشد. تنها پلتفرم همسریابی دارای مجوز در ایران، قبل از اینکه کاربر حتی یک پروفایل ببیند، مجبورش می‌کند احراز هویت کند و یک آزمون روان‌شناسی اجباری بدهد؛ در حالی که بیشتر آشنایی آنلاینی که واقعا در ایران اتفاق می‌افتد، داخل بات‌های تلگرامی بدون احراز هویت است: یک عکس، یک بایوی کوتاه، بدون هیچ نشانه‌ی اعتمادی. هم‌زمان، آمار جهانی کلاهبرداری عاطفی هم بالا می‌رفت؛ فقط در آمریکا ۸۲۳ میلیون دلار خسارت گزارش‌شده به FTC در سال ۲۰۲۴. تقریبا همه‌ی اپ‌های بزرگ آشنایی‌ای هم که بررسی کردم، نسبت جنسیتی کج‌شده داشتند؛ چیزی که دیر یا زود تجربه را برای هر دو طرف خراب می‌کند. خود تلگرام هم بی‌سروصدا تنها اصطکاک واقعی ورود را برداشته بود: تا سال ۲۰۲۴، ۵۰۰ میلیون نفر از قبل از مینی‌اپ‌ها استفاده می‌کردند، بدون هیچ حجم نصبی، داخل همان پلتفرمی که حدود ۴۵ میلیون ایرانی با وجود فیلترینگ استفاده‌اش می‌کنند. هیچ‌کس محصولی که واقعا روی همین تقاطع بنشیند نساخته بود.

بازقاب‌بندی

تحقیق مدام به یک جمله می‌رسید: امنیت، اعتبار و تجربه‌ی خوب هیچ‌وقت هم‌زمان در یک محصول دیده نمی‌شد. رقیب دارای مجوز ایران سر مشروعیت برنده بود ولی کاربر را همان دم در از دست می‌داد، چون احراز هویت و آزمون اجباری هر دو پیش از دیدن ارزش محصول می‌آمدند. بات‌های تلگرامی بدون احراز هم سر راحتی برنده بودند ولی هیچ لایه‌ی اعتمادی نداشتند. پس بازقاب‌بندی این نبود که «یک اپ آشنایی بهتر بسازم»؛ این بود که همان سه چیز کارآمد را نگه دارم: قاب آشنایی جدی، احراز هویت، و شخصیت‌شناسی به‌عنوان هسته نه یک آزمون جانبی؛ و همان نقطه‌ای را حذف کنم که هرکدام الان کاربر را قبل از دیدن چیزی از دست می‌دهد. احراز هویت و ابزارهای شخصیت‌شناسی ماندند؛ فقط هر دو را از همان صفحه‌ی اول رایگان و اختیاری کردم، همراه با پاداش برای تکمیلشان، به‌جای یک دیوار جلوی‌شان.

چه ساختم

پیش از نوشتن اولین خط کد، ده تصمیم را قفل کردم تا هر روز دوباره درباره‌شان بحث نکنم، بعد کل استک را تنها ساختم: تحقیق بازار، یک سیستم طراحی از پایه راست‌چین، بک‌اندی با NestJS و مدل داده روی Postgres، فرانت‌اندی با Next.js در ۳۶ صفحه، و یک پنل مدیریت ۱۴صفحه‌ای تا یک نفر دیگر هم بتواند بدون دست‌زدن به کد، احراز هویت و مودریشن و قیمت‌گذاری را اداره کند. تصمیمی که بیشتر از همه در محصول دیده می‌شود این بود: سوایپ قبلا یعنی قضاوت بود، چپ یعنی «نه». تغییرش دادم که سوایپ فقط ناوبری باشد؛ هر دو طرف حلقه‌اند تا بشود برگشت، و رد کردن به یک دکمه‌ی صریح منتقل شد که بلافاصله قابل برگشت است و برای طرف مقابل هیچ اثری ندارد، چون محصولی که قابش آشنایی جدی است نباید ورق‌زدن ساده را حس ردکردن آدم‌ها بدهد. شخصیت‌شناسی هم از یک جای‌نگه‌دار دوسوالی به دومین موتور محصول رشد کرد: ۱۸ ابزار، ۸۶۱ گویه، همه از پایه به فارسی نوشته‌شده نه ترجمه، و نتیجه‌ای که بدون ۸۰٪ پاسخ صادر نمی‌شود تا تطابق هیچ‌وقت روی حدس حساب نشود. بازگشت کاربر روی همین ایده در ثبت دیگری می‌چرخد: هفت بازی دونفره داخل خود گفتگو، فال حافظ روزانه با تعبیر نوشته‌شده برای هر ۴۹۵ غزل، و یک ارز غیرپولی به اسم استار که فقط با احراز هویت، دعوت و کامل‌کردن پروفایل به دست می‌آید؛ همان رفتارهایی که شبکه را قابل‌اعتمادتر می‌کنند. دوز را هم طوری بازطراحی کردم که هیچ‌وقت مساوی نشود، چون یک بازی حل‌شده خیلی زود دو بازیکن باتجربه را خسته می‌کند. در نسخه‌ی اول هیچ درگاه پرداختی منتشر نشد؛ گرفتن درگاه در ایران نماد اعتماد می‌خواهد که خودش یک پروژه‌ی جداست، پس به‌جایش منطق قیمت‌گذاری را از روز اول قابل تنظیم از پنل ساختم.

چه چیزی را کنار گذاشتم

چیزی که کنار گذاشتم این ایده بود که سوایپ باید حکم صادر کند. نسخه‌ی اول دقیقا مثل بزرگ‌ترین بازیگرهای این دسته با هر کارت رفتار می‌کرد: چپ یعنی رد، و اپ بی‌سروصدا آن را به‌عنوان یک داده ثبت می‌کرد. وقتی دیدم این برای محصولی که قابش صراحتا آشنایی جدی است، نه ورق‌زدن سرگرم‌کننده، چه معنایی دارد، حس درستی نداشت؛ ورق‌زدن یک دک نباید حس رد‌کردن پی‌درپی آدم‌ها را بدهد. کنش واقعی «دیگر نشانم نده» را به دکمه‌ی صریح خودش منتقل کردم، کاری کردم بلافاصله قابل برگشت باشد، و مطمئن شدم برای طرف مقابل هیچ سیگنالی نمی‌فرستد. سوایپ دوباره شد فقط ناوبری، نه چیز بیشتر.

نتیجه

عدد رشد کاربر برای گزارش‌کردن ندارم، و پرونده‌ای که برای این پروژه نوشتم عمدا هیچ داده‌ی واقعی کاربر، جزئیات زیرساخت یا سازوکار امنیتی را شرح نمی‌دهد؛ این خط در یک محصول آشنایی از تقریبا هرجای دیگری مهم‌تر است. چیزی که می‌توانم پشتش بایستم این است که کار تمام شده و در حال اجراست: ۳۶ صفحه بین اپ کاربر و پنل مدیریت، یک سیستم واقعی تطابق و گفتگو روی Postgres، ۷۷۳ تست خودکار که روی هر تغییر پاس می‌شوند، و همین حالا روی elaraa.ir و داخل @Elaradate_bot زنده است؛ نه یک نمونه‌ی نیمه‌کاره که توی یک ریپازیتوری خوابیده باشد.

کجا نقش من تمام شد

اینجا کد کس دیگری یا قضاوت کس دیگری برای اعتباردادن نیست؛ تحقیق، تصمیم‌های محصولی، طراحی بصری، بک‌اند، فرانت‌اند و ابزار ادمین را خودم تنها انجام دادم، و دقیقا برای همین مراقبم چه چیزی فراتر از آن ادعا می‌کنم. اسکرین‌شات‌های خود پرونده از یک حساب آزمایشی داخل اپ زنده گرفته شده‌اند؛ پرتره‌های نشان‌داده‌شده برای همان ارائه ساخته‌شده‌اند و به هیچ کاربر واقعی تعلق ندارند. نسخه‌ی اول هم عمدا بدون درگاه پرداخت منتشر شد؛ ایران برای بازکردن درگاه نماد اعتماد می‌خواهد که در حجم این پروژه نمی‌گنجید، پس اقتصاد روی یک ارز درون‌اپی کسب‌شده می‌چرخد، طبق طراحی، نه یک راه‌حل موقت به‌خاطر کمبود وقت.

الان چه می‌دانم

نوشتن ده تصمیم پیش از دست‌زدن به کد چیزی است که اول از همه تکرارش می‌کنم: بیشتر اختلاف‌نظرهای با خودم را تبدیل کرد به «آیا واقعا شواهد تازه‌ای آمده»، نه یک بحث تازه هر صبح. درس بزرگ‌تر این بود که یک محدودیت می‌تواند خود ایده شود، نه فقط قیدی رویش؛ نبود عکس در گفتگو و نبود درگاه پرداخت روز اول فقط محدودیت به نظر می‌رسیدند و در نهایت به بازی‌های دونفره و اقتصاد استار تبدیل شدند. محلی‌سازی هم ساختاری از آب درآمد، نه تزئینی: ارقام فارسی در همه‌جا، فاصله‌ای که از مرکز استان حساب می‌شود نه GPS لحظه‌ای، فال حافظ، بازی‌هایی که از قبل آشنا بودند؛ هیچ‌کدام ترجمه نیستند، و همه‌شان چیزی را که محصول واقعا انجام می‌دهد عوض کردند، نه فقط چیزی که چطور خوانده می‌شود.