كمطور شغوف بتكنولوجيا الصحة، لاحظت فجوة في السوق. بينما تقدم سابواي معلومات غذائية، يفتقر العملاء إلى أداة تفاعلية لتخصيص مجموعات وجباتهم بدقة. أردت إنشاء شيء يمنح الناس رؤى في الوقت الفعلي حول خيارات وجباتهم، وصولاً إلى آخر سعرة حرارية.
كان التحدي واضحًا: بناء آلة حاسبة شاملة يمكنها التعامل مع التنوع الهائل في قائمة سابواي - من خيارات الخبز واختيارات البروتين إلى كل خضار وتوابل، مع الحفاظ على الدقة باستخدام بيانات التغذية الرسمية.
وجدت أداة من 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 };
\ قمت بتنفيذ نظام قائم على الكمية حيث يمكن للمستخدمين إضافة حصص متعددة من البروتينات أو الأجبان أو الخضروات. كان على مضاعف "footlong" مضاعفة المكونات المناسبة تلقائيًا مع الحفاظ على المكونات الأخرى (مثل السلطات) دون تأثير.
لضمان عمل الآلة الحاسبة على أي موقع ويب دون تعارضات 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 العالي (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) إنشاء تطبيقات قوية وتفاعلية تسد الفجوة بين بيانات الشركات وفهم المستهلك. كل سطر من التعليمات البرمجية يخدم الهدف النهائي: مساعدة الناس على فهم ما يأكلونه بالضبط، حتى يتمكنوا من مواءمة خياراتهم في سابواي مع أهدافهم الصحية.
تظل الآلة الحاسبة مشروعًا حيًا، مع خطط لتوسيع قدراتها مع الحفاظ على الالتزام الأساسي بالدقة وسهولة الاستخدام التي جعلتها قيمة لآلاف المستخدمين بالفعل.
رابط الآلة الحاسبة: آلة حاسبة سعرات سابواي: احسب السعرات الحرارية واستمتع بالساندويتش - آلة حاسبة سعرات سابواي
\ \


نسخ الرابطX (تويتر)لينكد إنفيسبوكالبريد الإلكتروني
DOT ينخفض بنسبة 2% بعد كسر الدعم الرئيسي
الـ