কেন আপনার ক্যালোরি ট্র্যাকার আপনার ইমেল চায় না
MyFitnessPal, Cronometer, MacroFactor, Lose It!. আপনার ইমেইল, পাসওয়ার্ড, কখনও কখনও জন্মতারিখ আর লিঙ্গ চায়। তারপরই আপনি একটি চিকেন ব্রেস্টও লগ করতে পারেন।
আমরা Onyx Tenet বানিয়েছি এই শর্ত ছাড়াই। ডাউনলোড করুন, খুলুন, লগ করুন। আপনার আর আপনার খাবারের ডায়েরির মাঝে কোনো সার্ভার নেই।
এটাই ছিল আমাদের প্রথম আর্কিটেকচারাল সিদ্ধান্ত, আর বাকি সবকিছুকে সেটাই প্রভাবিত করেছে।
তারা কেন চায়
একটি ক্যালোরি ট্র্যাকার অ্যাকাউন্ট চায় তিনটি কারণে, আর সেগুলোর কোনোটিই "অ্যাপ চালানোর জন্য" নয়।
1. বিজ্ঞাপন টার্গেটিং
MyFitnessPal আর Lose It! বিজ্ঞাপন-সমর্থিত ফ্রি টিয়ার দেয়। একটি ইমেইল ঠিকানা আপনার ব্যবহার-ডেটাকে এমন এক পরিচয়ের সঙ্গে জুড়ে দেয়, যাকে বিজ্ঞাপন নেটওয়ার্ক টার্গেট করতে পারে। আপনার খাবারের লগ হয়ে যায় আচরণগত সংকেত। আপনি কী খান, কখন খান, কত ধারাবাহিকভাবে ট্র্যাক করেন। সেই সংকেতের মূল্য আছে।
MyFitnessPal-এর নিজস্ব privacy policy-তেই বলা আছে যে তারা ব্যবহারকারীর তথ্য "marketing and advertising partners"-এর সঙ্গে ভাগ করে, এবং tracking cookies-এর কিছু ব্যবহার প্রযোজ্য গোপনীয়তা আইনের অধীনে "personal information-এর sales or sharing" হিসেবে গণ্য হতে পারে। এটা অনুমান নয়। এটা তাদের প্রকাশ।
2. লক-ইন
একবার আপনার খাবারের লগ যদি অন্য কারও সার্ভারে, তাদের লগইনের পেছনে থাকে, তাহলে বেরোতে মানে আপনার ডেটা হারানো। বছরের পর বছর খাবার, ওজনের ইতিহাস, কাস্টম খাবার, রেসিপি। অ্যাকাউন্ট কোনো ফিচার নয়। এটা একটা দুর্গপ্রাচীর।
MyFitnessPal এটা কাঠামোগতভাবে করে: CSV export Premium-এ $80/year এর পেছনে লক করা। ফ্রি ব্যবহারকারীরা নিজেদের ডেটা export করতে পারেন না। আপনি ডেটা ঢোকাতে পারেন, কিন্তু টাকা না দিলে বের করতে পারেন না।
3. এঙ্গেজমেন্ট মেট্রিক্স
DAU/MAU অনুপাত, retention cohort, funnel conversion rate। এগুলোই বিনিয়োগকারী আর বিজ্ঞাপনদাতাদের কাছে গুরুত্বপূর্ণ সংখ্যা, আর এগুলোর জন্য চিহ্নিত ব্যবহারকারী লাগে। যে ব্যবহারকারী প্রতিদিন অ্যাপ খুললেও anonymous, সে এই মেট্রিক্সে অদৃশ্য। অ্যাকাউন্ট সেই মানুষটিকে একটা data point-এ বদলে দেয়।
MacroFactor তো free tier-ই দেয় না। Cronometer-এর free tier-এ বিজ্ঞাপন দেখায়। বড় ট্র্যাকারগুলোর প্রত্যেকেই তাদের ব্যবসায়িক মডেল দাঁড় করিয়েছে এই ধারণার ওপর যে ব্যবহারকারীরা অ্যাকাউন্ট তৈরি করবে। অ্যাকাউন্ট ব্যবসার কাজে লাগে। অ্যাপটি ছাড়াও ঠিকই চলত।
যখন সব উল্টে যায়
ডেটা যদি নিরাপদ থাকত, বিষয়টা এত বড় হতো না। থাকে না।
২০১৮ সালের ফেব্রুয়ারিতে, MyFitnessPal জানায় যে ১৫ কোটি ব্যবহারকারী অ্যাকাউন্টে অননুমোদিত প্রবেশ ঘটেছিল: username, email address, আর hashed password। তখন এটি ছিল নথিভুক্ত সবচেয়ে বড় data breach-গুলোর একটি।
২০২৬ সালের মার্চে, Cal AI (যা MyFitnessPal অধিগ্রহণ করেছিল) দ্বিতীয় একটি breach-এর শিকার হয়। security researcher-রা একটি unauthenticated Firebase backend খুঁজে পান, যা কোনো credentials ছাড়াই পড়া যেত। প্রকাশিত ডেটায় ছিল নাম, email, জন্মতারিখ, লিঙ্গ, উচ্চতা, ওজন, স্বাস্থ্য-লক্ষ্য, macro target, আর meal log with timestamps. ৩.২ মিলিয়ন ব্যবহারকারী রেকর্ড, মোট ১৪.৫৯ GB ডেটা জুড়ে। একটি রেকর্ড ছিল ২০১৪ সালে জন্মানো এক শিশুর।
এগুলো বিচ্ছিন্ন ঘটনা নয়। ২০২১ সালে, GetHealth নামে একটি fitness data aggregator ৬.১ কোটি রেকর্ড প্রকাশ করে রাখা এক অনিরাপদ database ফেলে রেখেছিল। ডেটাগুলো Fitbit, Strava, আর Google Fit থেকে টানা। সার্ভারে কোনো password ছিল না।
আপনার খাবারের লগ, ওজনের ইতিহাস, আর ইমেইল এখন breach database-এ আছে। শুরুতেই এগুলো অন্য কারও সার্ভারে থাকার কোনো স্থাপত্যগত কারণ ছিল না।
অ্যাকাউন্টবিহীন আর্কিটেকচার দেখতে কেমন
আমরা এর বদলে যা বানিয়েছি, তা হলো এটি।
Local-first database. আপনার খাবারের লগ, ওজনের ইতিহাস, আর কাস্টম খাবার আপনার ডিভাইসের local database-এ থাকে (iOS-এ SwiftData, Android-এ Room)। ডিফল্টভাবে কিছুই upload হয় না। ইন্টারনেট সংযোগের দরকার নেই। অ্যাপটি পুরোপুরি offline-এ কাজ করে।
মূল ফাংশনের জন্য সার্ভারের ওপর নির্ভরতা নেই। খাবার লগ করা, barcode স্ক্যান করা, ইতিহাস দেখা, আপনার adaptive TDEE পরীক্ষা করা। এগুলোর কোনোটির জন্যই network connection বা user account লাগে না। সার্ভার critical path-এ নেই।
পাবলিক API দিয়ে barcode scanning। barcode lookup-এর জন্য OpenFoodFacts ব্যবহার করা হয়, যা community-maintained open database। তাদের দিক থেকেও আমাদের দিক থেকেও কোনো অ্যাকাউন্ট লাগে না।
পূর্ণ data portability. Settings-এর যেকোনো স্ক্রিন থেকে যেকোনো সময় আপনার ডেটা JSON ফাইল হিসেবে export করা যায়। এটা সীমিত weekly CSV নয়, বা Premium-only ফিচার নয়। এটা আপনার ডেটা। এটা একটা ফাইল। নিয়ন্ত্রণ আপনার।
Anonymous analytics. আমরা usage analytics-এর জন্য PostHog ব্যবহার করি, কঠোর নীতিসহ: কোনো PII নয়, খাবারের লগের ডেটা নয়, ওজনের ডেটা নয়। Settings-এর analytics toggle দিয়ে আপনি পুরোপুরি opt out করতে পারেন। যারা cloud backup চালু করেন, continuity বজায় রাখতে আমরা pseudonymous Firebase UID ব্যবহার করি analytics-এর জন্য। আপনার ইমেইল নয়। আপনার নাম নয়।
"কিন্তু ফোন হারালে কী হবে?"
এটাই সৎ counterargument, আর আমরা এটাকে গুরুত্ব দিই। আপনার ডেটা যদি শুধু আপনার ডিভাইসেই থাকে, ডিভাইস হারালে ডেটাও হারাবে।
রক্ষার তিনটি স্তর:
JSON export. আপনার ডেটা Files, iCloud Drive, Google Drive, বা যেখানে ফাইল রাখেন সেখানে export করুন। Settings-এ এটা এক ট্যাপ। export-এ সম্পূর্ণ snapshot থাকে: খাবারের লগ, ওজনের ইতিহাস, custom foods, recipes, settings.
Platform backup. iOS আর Android দুটোই যথাক্রমে iCloud আর Google-এ স্বয়ংক্রিয়ভাবে app data backup করে, যদি আপনি তা বন্ধ না করে থাকেন। অধিকাংশ ব্যবহারকারীর ক্ষেত্রে, কোনো পদক্ষেপ ছাড়াই তাদের ডেটা আগেই backup থাকে।
ঐচ্ছিক cloud backup. আপনি যদি স্পষ্ট cloud backup চান, আর যেকোনো ডিভাইসে restore করতে চান, Onyx Tenet তা দেয়। আপনি email link দিয়ে sign in করেন। সেই email আমরা এক জিনিসের জন্যই ব্যবহার করি: আপনাকে আপনার নিজের backup-এ পৌঁছাতে দিতে। password নয়। profile নয়। প্রচলিত অর্থে account নয়। ভবিষ্যতে আমরা যদি পূর্ণ account বানাই, সেগুলো opt-in হবে, আর সেগুলো এমন কারণে থাকবে যা আপনার কাজে লাগবে, আমাদের নয়।
কথা backup অপ্রয়োজনীয়, তা নয়। কথা হলো backup একটি সচেতন পছন্দ হওয়া উচিত, বাধ্যতামূলক account creation নয় যা একই সঙ্গে data collection mechanism-ও বটে।
পরিস্থিতি তুলনামূলকভাবে কেমন
| MyFitnessPal | Cronometer | MacroFactor | Lose It! | Onyx Tenet | |
|---|---|---|---|---|---|
| Account required | Yes | Yes | Yes | Yes | No |
| Food log stored | Their servers | Their servers | Their servers | Their servers | Your device |
| Free tier ads | Yes | Yes | No free tier | Yes | No ads. Ever. |
| Ad network sharing | Yes | Yes (free tier) | No | Ad identifiers | No |
| Data export | CSV (Premium only) | CSV (all tiers) | Spreadsheet (subscribers) | CSV (weekly, web only) | JSON (full, anytime) |
| Annual price | $80/yr Premium | Gold (paid) | $72/yr | $40/yr | Free core |
Sources: each company's current privacy policy and App Store listing. All claims are publicly verifiable.
সমঝোতাগুলো
Local-first মানে বাস্তব সমঝোতা। আমরা অন্য কিছু ভান করব না।
ডিফল্টভাবে automatic cross-device sync নেই। আপনার ডেটা যেখানে লগ করেছেন, সেখানকার ডিভাইসেই থাকে। Cloud backup (opt-in) যেকোনো ডিভাইসে restore করার সুবিধা দেয়, কিন্তু multiple device জুড়ে real-time sync নয়। এটা আমরা পরে যোগ করতে পারি, এবং তা ঐচ্ছিক ও encrypted হবে।
Local data-এর জন্য password recovery নেই। আপনি export বা backup না করে অ্যাপ মুছে ফেললে, আপনার ডেটা হারিয়ে যাবে। JSON export-ই আপনার insurance policy।
নিজের backup-এর দায়িত্ব আপনার। আমরা আপনাকে টুল দিই (export, platform backup, cloud backup), কিন্তু ডিফল্ট হলো আপনার ডেটা local-এ থাকবে। এটাই মূল উদ্দেশ্য।
এগুলো সচেতন নকশাগত সিদ্ধান্ত, কোনো ত্রুটি নয়। বিকল্পটা হলো যা অন্য সব tracker করে: প্রথম দিনেই account বাধ্যতামূলক করা, আপনার ডেটা তাদের সার্ভারে রাখা, আর সেটাকে ফিচার বলা।
Onyx Tenet আপনার ইমেইল চায় না। ডাউনলোড করুন, খুলুন, লগ করুন। আপনি আলাদা কিছু না চাইলে আপনার ডেটা আপনার ডিভাইসেই থাকবে।
Onyx Tenet বিনামূল্যে। কোনো account লাগবে না।