Als ontwikkelaar met een passie voor gezondheidstechnologie merkte ik een gat in de markt. Hoewel Subway voedingsinformatie biedt, missen klanten een interactieve tool om hun exacte maaltijdcombinaties aan te passen. Ik wilde iets creëren dat mensen realtime inzicht zou geven in hun maaltijdkeuzes, tot op de laatste calorie.
De uitdaging was duidelijk: een uitgebreide calculator bouwen die de enorme variabiliteit van Subway's menu aankon—van broodkeuzes en eiwitopties tot elke groente en saus, terwijl de nauwkeurigheid met officiële voedingsgegevens behouden bleef.
Ik vond een tool van nutritionix die hetzelfde doet, wat goed is, maar ik wilde iets bouwen dat gebruiksvriendelijker aanvoelde.
Mijn eerste taak was het verzamelen en structureren van de voedingsgegevens. Ik heb weken besteed aan het verzamelen van Subway's officiële voedingstabellen, het standaardiseren van metingen en het creëren van een uitgebreide JSON-database.
De structuur moest zowel uitgebreid als efficiënt zijn:
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 };
\ Elk menu-item bevat 19 voedingsmetriek, zodat we een compleet FDA-stijl voedingsetiket kunnen weergeven, niet alleen calorieën.
De kerncompexiteit lag in het beheren van de selectiestatus van de gebruiker. Een Subway-bestelling is geen eenvoudige selectie—het is een multidimensionale combinatie:
let currentSelection = { sandwichSize: '6inch', bread: null, proteins: {}, cheeses: {}, vegetables: {}, condiments: {}, // ... with quantities for each };
\ Ik implementeerde een op hoeveelheid gebaseerd systeem waarbij gebruikers meerdere porties eiwitten, kazen of groenten konden toevoegen. De "footlong" vermenigvuldiger moest automatisch geschikte componenten verdubbelen terwijl andere (zoals salades) ongewijzigd bleven.
Om ervoor te zorgen dat de calculator op elke website zou werken zonder CSS-conflicten, gebruikte ik een scoped aanpak:
#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; }
\ De all: initial reset en hoge z-index (99999) zorgden ervoor dat de calculator consistent zou renderen ongeacht de styling van de host site.
De tool gebruikt Subway's officiële 2025 voedingsinformatie, inclusief recente toevoegingen zoals het Ghost Pepper Brood en bijgewerkte salade formules. Elk datapunt werd geverifieerd tegen Subway's PDF voedingsgidsen en websitegegevens.
De database bevat niet alleen calorieën maar ook:
De berekeningsmotor moest complexe scenario's aankunnen:
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 }; }
Ik repliceerde het exacte FDA voedingsetiket formaat, waarbij de dagelijkse waarden in procenten werden berekend op basis van een dieet van 2.000 calorieën (door gebruiker aan te passen):
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 };
De % Daily Value berekeningen gebruiken deze officiële FDA referentiehoeveelheden, wat zorgt voor naleving van de regelgeving.
De accordeon-stijl dropdowns met realtime tellers losten het complexiteitsprobleem op:
Elke gebruikersactie activeert meerdere updates:
De voortgangsbalk gebruikt kleurcodering (groen → geel → rood) om visueel aan te geven hoe de maaltijd past binnen de dagelijkse doelen.
De calculator gebruikt CSS Grid en Flexbox met strategische breekpunten:
@media (max-width: 768px) { .calculator-container { flex-direction: column; } .item-with-quantity { flex-direction: column; } .goal-setting-content { grid-template-columns: 1fr; } }
Op mobiel stapelen items verticaal, en het voedingsetiket blijft leesbaar zonder horizontaal scrollen.
De exportfunctie genereert een gedetailleerd tekstrapport met:
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 };
Elke voedingswaarde werd gekruisrefereerd met:
De modulaire JSON-structuur maakt eenvoudige updates mogelijk wanneer Subway:
De tool bevat notities (**) voor items met potentiële regionale variaties, waarbij gebruikers worden geadviseerd om lokale voedingsinformatie te controleren wanneer beschikbaar.
Het bouwen van de Subway Nutrition Calculator was meer dan alleen een codeerproject—het ging om het creëren van transparantie in voedselkeuzes. Door nauwkeurige, officiële voedingsgegevens te combineren met een intuïtieve interface, hebben we gebruikers in staat gesteld om geïnformeerde beslissingen te nemen over hun maaltijden.
De tool laat zien hoe webtechnologieën (HTML, CSS, JavaScript) krachtige, interactieve applicaties kunnen creëren die de kloof overbruggen tussen bedrijfsgegevens en consumentenbegrip. Elke regel code dient het uiteindelijke doel: mensen helpen precies te begrijpen wat ze eten, zodat ze hun Subway-keuzes kunnen afstemmen op hun gezondheidsdoelen.
De calculator blijft een levend project, met plannen om de mogelijkheden uit te breiden terwijl de kernverbintenis tot nauwkeurigheid en bruikbaarheid behouden blijft die het al waardevol heeft gemaakt voor duizenden gebruikers.
Calculator link: Subway Calorie Calculator: Count the Calories Enjoy the Sub - Subway Calorie Calculator
\ \


