به عنوان یک توسعه دهنده بازی های ویدئویی علاقهمند به فناوری سلامت، متوجه شکافی در بازار شدم. در حالی که سابوی اطلاعات تغذیهای را ارائه میدهد، مشتریان فاقد ابزاری تعاملی برای سفارشیسازی ترکیبهای دقیق وعدههای غذایی خود هستند. میخواستم چیزی بسازم که به مردم بینشهای بلادرنگ درباره انتخابهای غذاییشان بدهد، تا آخرین کالری.
چالش واضح بود: ساخت یک ماشین حساب جامع که بتواند تنوع عظیم منوی سابوی را مدیریت کند - از انتخابهای نان و پروتئین گرفته تا هر سبزیجات و چاشنی، همه در حالی که دقت با دادههای تغذیهای رسمی حفظ شود.
ابزاری توسط nutritionix پیدا کردم که همین کار را انجام میدهد، که خوب است، اما میخواستم چیزی بسازم که کاربرپسندتر باشد.
اولین وظیفه من جمعآوری و ساختاردهی دادههای تغذیهای بود. هفتهها را صرف جمعآوری نمودارهای تغذیه رسمی سابوی، استانداردسازی اندازهگیریها و ایجاد یک پایگاه داده JSON جامع کردم.
ساختار باید هم جامع و هم کارآمد میبود:
const subwayMenu = { breads: [ { id: 'artisan-italian', name: '6" Artisan Italian Bread', calories: 210, totalFat: 2, saturatedFat: 1, // ... 14 additional nutritional fields }, // ... 10 more bread options ], // ... 9 additional categories };
\ هر آیتم منو شامل 19 معیار تغذیهای است، که اطمینان میدهد میتوانیم یک برچسب تغذیهای کامل به سبک FDA نمایش دهیم، نه فقط کالری.
پیچیدگی اصلی در مدیریت وضعیت انتخاب کاربر بود. یک سفارش سابوی یک انتخاب ساده نیست - یک ترکیب چند بعدی است:
let currentSelection = { sandwichSize: '6inch', bread: null, proteins: {}, cheeses: {}, vegetables: {}, condiments: {}, // ... with quantities for each };
\ من یک سیستم مبتنی بر مقدار پیادهسازی کردم که در آن کاربران میتوانستند چندین بخش از پروتئینها، پنیرها یا سبزیجات اضافه کنند. ضریب "فوتلانگ" باید به طور خودکار اجزای مناسب را دو برابر میکرد در حالی که دیگران (مانند سالادها) بدون تغییر میماندند.
برای اطمینان از اینکه ماشین حساب بدون تداخل CSS در هر وبسایتی کار میکند، از یک رویکرد محدود استفاده کردم:
#subway-calculator-isolated { all: initial; display: block; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', ...; } #subway-calculator-isolated * { box-sizing: border-box; margin: 0; padding: 0; }
\ بازنشانی all: initial و z-index بالا (99999) اطمینان میداد که ماشین حساب بدون توجه به استایل سایت میزبان به طور یکنواخت رندر میشود.
این ابزار از اطلاعات تغذیهای رسمی سابوی 2025 استفاده میکند، از جمله افزودنیهای اخیر مانند نان فلفل روح و فرمولهای بهروزشده سالاد. هر نقطه داده با راهنماهای تغذیهای PDF سابوی و دادههای وبسایت تأیید شد.
پایگاه داده شامل نه تنها کالری بلکه:
موتور محاسبه باید سناریوهای پیچیده را مدیریت میکرد:
function calculateTotalNutrition() { let total = { calories: 0, totalFat: 0, /* ... */ }; const sizeMultiplier = currentSelection.sandwichSize === 'footlong' ? 2 : 1; // Bread calculation (size-dependent) if (currentSelection.bread) { addItemNutrition(total, bread, currentSelection.bread.quantity * sizeMultiplier); } // Proteins, cheeses, vegetables (size-dependent) ['proteins', 'cheeses', 'vegetables'].forEach(category => { // Apply size multiplier }); // Soups, desserts (size-independent) ['soups', 'desserts'].forEach(category => { // No size multiplier }); return { nutrition: total, ingredients }; }
من فرمت دقیق برچسب تغذیهای FDA را بازسازی کردم، با محاسبه درصد ارزشهای روزانه بر اساس یک رژیم 2000 کالری (قابل تنظیم توسط کاربر):
const fdaDailyValues = { totalFat: 78, saturatedFat: 20, cholesterol: 300, sodium: 2300, totalCarbs: 275, dietaryFiber: 28, addedSugars: 50, protein: 50, vitaminA: 900, vitaminC: 90, calcium: 1300, iron: 18 };
محاسبات % Daily Value از این مقادیر مرجع رسمی FDA استفاده میکنند، که انطباق با مقررات را تضمین میکند.
منوهای کشویی آکاردئونی با شمارندههای بلادرنگ مشکل پیچیدگی را حل کردند:
هر اقدام کاربر چندین بهروزرسانی را فعال میکند:
نوار پیشرفت از کدگذاری رنگی (سبز → زرد → قرمز) برای نشان دادن بصری چگونگی تناسب وعده غذایی با اهداف روزانه استفاده میکند.
ماشین حساب از CSS Grid و Flexbox با نقاط شکست استراتژیک استفاده میکند:
@media (max-width: 768px) { .calculator-container { flex-direction: column; } .item-with-quantity { flex-direction: column; } .goal-setting-content { grid-template-columns: 1fr; } }
در موبایل، آیتمها به صورت عمودی چیده میشوند و برچسب تغذیهای بدون اسکرول افقی قابل خواندن باقی میماند.
ویژگی صادرات یک گزارش متنی دقیق تولید میکند که شامل:
window.subwaySaveNutritionInfo = function() { const summary = ` ============================================================ SUBWAY NUTRITION CALCULATOR - MEAL SUMMARY ============================================================ MEAL DETAILS: ------------- Size: ${sizeText} Total Calories: ${Math.round(nutrition.calories)} Daily Calorie Goal: ${userSettings.dailyCalorieGoal} calories Percentage of Daily Goal: ${Math.round((nutrition.calories / userSettings.dailyCalorieGoal) * 100)}% `; // ... generates downloadable file };
هر ارزش تغذیهای با موارد زیر متقابلاً مرجعگذاری شد:
ساختار ماژولار JSON بهروزرسانیهای آسان را زمانی که سابوی:
این ابزار شامل یادداشتهایی (**) برای آیتمهایی با تغییرات منطقهای بالقوه است، که به کاربران توصیه میکند در صورت دسترسی، اطلاعات تغذیهای محلی را بررسی کنند.
ساخت ماشین حساب تغذیه سابوی بیش از یک پروژه کدنویسی بود - درباره ایجاد شفافیت در انتخابهای غذایی بود. با ترکیب دادههای تغذیهای دقیق و رسمی با یک رابط شهودی، ما کاربران را توانمند کردهایم تا تصمیمات آگاهانهای درباره وعدههای غذایی خود بگیرند.
این ابزار نشان میدهد که چگونه فناوریهای وب (HTML، CSS، JavaScript) میتوانند برنامههای قدرتمند و تعاملی ایجاد کنند که شکاف بین دادههای شرکتی و درک مصرفکننده را پر میکنند. هر خط کد در خدمت هدف نهایی است: کمک به مردم برای درک دقیق آنچه میخورند، تا بتوانند انتخابهای سابوی خود را با اهداف سلامتیشان هماهنگ کنند.
ماشین حساب یک پروژه زنده باقی میماند، با برنامههایی برای گسترش قابلیتهای آن در حالی که تعهد اصلی به دقت و قابلیت استفاده را حفظ میکند که آن را برای هزاران کاربر ارزشمند کرده است.
لینک ماشین حساب: ماشین حساب کالری سابوی: کالریها را بشمارید از ساب لذت ببرید - ماشین حساب کالری سابوی
\ \


