En tant que développeur passionné par les technologies de santé, j'ai remarqué un manque sur le marché. Bien que Subway propose des informations nutritionnelles, les clients ne disposent pas d'un outil interactif pour personnaliser leurs combinaisons de repas exactes. Je voulais créer quelque chose qui donnerait aux gens des informations en temps réel sur leurs choix de repas, jusqu'à la dernière calorie.
Le défi était clair : construire une calculatrice complète capable de gérer l'immense variabilité du menu de Subway — des choix de pain et de protéines à chaque légume et condiment, tout en maintenant la précision avec les données nutritionnelles officielles.
J'ai trouvé un outil de nutritionix qui fait la même chose, ce qui est bien, mais je voulais construire quelque chose qui semblait plus convivial.
Ma première tâche consistait à collecter et structurer les données nutritionnelles. J'ai passé des semaines à recueillir les tableaux nutritionnels officiels de Subway, à standardiser les mesures et à créer une base de données JSON complète.
La structure devait être à la fois complète et efficace :
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 };
\ Chaque élément du menu contient 19 mesures nutritionnelles, garantissant que nous pouvons afficher une étiquette nutritionnelle complète de style FDA, pas seulement les calories.
La complexité principale résidait dans la gestion de l'état de sélection de l'utilisateur. Une commande Subway n'est pas une simple sélection — c'est une combinaison multidimensionnelle :
let currentSelection = { sandwichSize: '6inch', bread: null, proteins: {}, cheeses: {}, vegetables: {}, condiments: {}, // ... with quantities for each };
\ J'ai implémenté un système basé sur les quantités où les utilisateurs pouvaient ajouter plusieurs portions de protéines, fromages ou légumes. Le multiplicateur "footlong" devait automatiquement doubler les composants appropriés tout en gardant les autres (comme les salades) inchangés.
Pour garantir que la calculatrice fonctionnerait sur n'importe quel site web sans conflits CSS, j'ai utilisé une approche délimitée :
#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; }
\ La réinitialisation all: initial et le z-index élevé (99999) garantissaient que la calculatrice s'afficherait de manière cohérente indépendamment du style du site hôte.
L'outil utilise les informations nutritionnelles officielles de Subway pour 2025, y compris les ajouts récents comme le Pain Ghost Pepper et les formules de salade mises à jour. Chaque point de données a été vérifié par rapport aux guides nutritionnels PDF de Subway et aux données du site web.
La base de données comprend non seulement les calories mais aussi :
Le moteur de calcul devait gérer des scénarios complexes :
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 }; }
J'ai reproduit exactement le format d'étiquette nutritionnelle de la FDA, en calculant les pourcentages des valeurs quotidiennes basées sur un régime de 2 000 calories (ajustable par l'utilisateur) :
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 };
Les calculs de % Daily Value utilisent ces montants de référence officiels de la FDA, assurant la conformité réglementaire.
Les menus déroulants de style accordéon avec compteurs en temps réel ont résolu le problème de complexité :
Chaque action de l'utilisateur déclenche plusieurs mises à jour :
La barre de progression utilise un code couleur (vert → jaune → rouge) pour indiquer visuellement comment le repas s'intègre dans les objectifs quotidiens.
La calculatrice utilise CSS Grid et Flexbox avec des points d'arrêt stratégiques :
@media (max-width: 768px) { .calculator-container { flex-direction: column; } .item-with-quantity { flex-direction: column; } .goal-setting-content { grid-template-columns: 1fr; } }
Sur mobile, les éléments s'empilent verticalement, et l'étiquette nutritionnelle reste lisible sans défilement horizontal.
La fonction d'exportation génère un rapport textuel détaillé comprenant :
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 };
Chaque valeur nutritionnelle a été recoupée avec :
La structure JSON modulaire permet des mises à jour faciles lorsque Subway :
L'outil inclut des notes (**) pour les articles avec des variations régionales potentielles, conseillant aux utilisateurs de vérifier les informations nutritionnelles locales lorsqu'elles sont disponibles.
La création du Calculateur Nutritionnel Subway était plus qu'un simple projet de codage — il s'agissait de créer de la transparence dans les choix alimentaires. En combinant des données nutritionnelles officielles précises avec une interface intuitive, nous avons permis aux utilisateurs de prendre des décisions éclairées concernant leurs repas.
L'outil démontre comment les technologies web (HTML, CSS, JavaScript) peuvent créer des applications puissantes et interactives qui comblent le fossé entre les données d'entreprise et la compréhension des consommateurs. Chaque ligne de code sert l'objectif ultime : aider les gens à comprendre exactement ce qu'ils mangent, afin qu'ils puissent aligner leurs choix Subway avec leurs objectifs de santé.
La calculatrice reste un projet vivant, avec des plans pour étendre ses capacités tout en maintenant l'engagement fondamental envers la précision et la facilité d'utilisation qui l'a déjà rendue précieuse pour des milliers d'utilisateurs.
Lien vers la calculatrice : Subway Calorie Calculator: Count the Calories Enjoy the Sub - Subway Calorie Calculator
\ \


