مطالعه موردی
Riora
برنامهریز جامع و محلی زندگی

نگاه کلی
Riora یک اپلیکیشن آرام اندرویدی است که برنامهریزی، عادتها، ژورنال، سلامت، کتابها، رسانه، اهداف و بینشهای شخصی را به هم متصل میکند. معماری Local-first باعث میشود جریانهای اصلی بدون اینترنت هم خصوصی و کاربردی بمانند.
مسئله
یک اپ جامع زندگی بهراحتی میتواند شلوغ، قضاوتگر یا شکننده شود. چالش اصلی پشتیبانی از دنیاهای متعدد و مرتبط بود؛ بدون شلوغ کردن صفحه خانه، از دست دادن دادههای قبلی هنگام تکامل دیتابیس یا ایجاد خطاهای RTL روی اندروید واقعی.
راهحل
اپ را با Expo Router، لایههای تایپشده React Native، مایگریشنهای نسخهبندیشده SQLite، Repositoryهای داده و تنظیمات سبک Zustand ساختم. Supabase احراز هویت تلفنی و بکاپ ابری مالکمحور اختیاری را اضافه میکند، بدون اینکه منبع اصلی آفلاین را جایگزین کند.
نقش من
- تعریف مشخصات محصول، معماری اطلاعات، زبان بصری و تجربه دوزبانه
- پیادهسازی ۴۰ مسیر برای پلنر، ژورنال، عادتها، بینشها، سلامت، رسانه، اهداف، تمرکز و تنظیمات
- طراحی موجودیتهای SQLite، مایگریشنهای روبهجلو، Repositoryهای تایپشده و فرایند بکاپ و بازیابی
- پیادهسازی واقعی RTL و LTR، نمایش جلالی و میلادی، دسترسپذیری و تم
- تنظیم مجوزها، اعلانها، احراز هویت، امضای نسخه اندروید، QA خودکار و تست دستگاه واقعی
چالشها
تکامل امن دادههای Local-first
تاریخچه ساختاریافته باید بدون حذف دادههای موجود از Storeهای موقت به SQLite منتقل میشد. مایگریشنهای Idempotent، Checkpoint، Repositoryهای تایپشده و تست بازگشایی و فشار، این انتقال را بازیابیپذیر کردند.
RTL واقعی فارسی روی اندروید
Mirroring اندروید میتواند هندسه را دوبار معکوس و لیستهای افقی را جابهجا کند. قراردادهای صریح جهت و کامپوننت مشترک اسکرول RTL روی تمام صفحات و دستگاه واقعی بررسی شدند.
ابر اختیاری بدون از دست دادن حریم خصوصی
تغییرات کاربران واردشده Snapshotهای Debounceشده و مالکمحور میسازند، داده معلق هنگام Background یا خروج Flush میشود و دستگاه جدید میتواند آخرین بکاپ را بازیابی کند؛ در حالی که داده محلی همچنان منبع اصلی است.
نتیجه
Riora به مرحله Release Candidate امضاشده اندروید رسید: ۴۰ مسیر و ۳۹ صفحه قابلیت ممیزی شد، ۴۲۰ تست خودکار و کامپوننتی موفق بود و APK عمومی و AAB چهارتایی روی Android 16 و دستگاه واقعی تست شدند. انتشار عمومی احراز هویت تلفنی تا پایدار شدن ارسال OTP متوقف مانده است.
درسهای آموخته
- Local-first فقط ذخیره آفلاین نیست و به برنامه روشن مهاجرت و بازیابی نیاز دارد
- درستی RTL باید روی دستگاه واقعی و در جریان کامل ناوبری بررسی شود
- محصول بزرگ وقتی قابل فهم میماند که مالکیت داده هر قابلیت مشخص باشد
- امضا، مجوزها، بازیابی و مهندسی انتشار بخشی از تجربه محصولاند