Como desarrollador apasionado por la tecnología de salud, noté un vacío en el mercado. Aunque Subway ofrece información nutricional, los clientes carecen de una herramienta interactiva para personalizar sus combinaciones exactas de comidas. Quería crear algo que proporcionara a las personas información en tiempo real sobre sus elecciones de comida, hasta la última caloría.
El desafío era claro: construir una calculadora completa que pudiera manejar la inmensa variabilidad del menú de Subway, desde opciones de pan y selecciones de proteínas hasta cada vegetal y condimento, todo mientras se mantiene la precisión con datos nutricionales oficiales.
Encontré una herramienta de nutritionix que hace lo mismo, lo cual es bueno, pero quería construir algo que se sintiera más fácil de usar.
Mi primera tarea fue recopilar y estructurar los datos nutricionales. Pasé semanas recopilando las tablas nutricionales oficiales de Subway, estandarizando medidas y creando una base de datos JSON completa.
La estructura necesitaba ser tanto completa como eficiente:
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 };
\ Cada elemento del menú contiene 19 métricas nutricionales, asegurando que podamos mostrar una etiqueta nutricional completa al estilo FDA, no solo calorías.
La complejidad principal estaba en gestionar el estado de selección del usuario. Un pedido de Subway no es una selección simple, es una combinación multidimensional:
let currentSelection = { sandwichSize: '6inch', bread: null, proteins: {}, cheeses: {}, vegetables: {}, condiments: {}, // ... with quantities for each };
\ Implementé un sistema basado en cantidades donde los usuarios podían agregar múltiples porciones de proteínas, quesos o vegetales. El multiplicador "footlong" tenía que duplicar automáticamente los componentes apropiados mientras mantenía otros (como ensaladas) sin afectar.
Para asegurar que la calculadora funcionara en cualquier sitio web sin conflictos CSS, utilicé un enfoque con alcance definido:
#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; }
\ El reinicio all: initial y el z-index alto (99999) aseguraron que la calculadora se renderizara consistentemente independientemente del estilo del sitio anfitrión.
La herramienta utiliza la información nutricional oficial de Subway 2025, incluidas adiciones recientes como el Pan de Ghost Pepper y fórmulas actualizadas de ensaladas. Cada punto de datos fue verificado con las guías nutricionales PDF de Subway y datos del sitio web.
La base de datos incluye no solo calorías sino:
El motor de cálculo tenía que manejar escenarios complejos:
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 }; }
Repliqué el formato exacto de etiqueta nutricional de la FDA, calculando los porcentajes de Valores Diarios basados en una dieta de 2,000 calorías (ajustable por el usuario):
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 };
Los cálculos de % Valor Diario utilizan estas cantidades de referencia oficiales de la FDA, asegurando el cumplimiento normativo.
Los desplegables tipo acordeón con contadores en tiempo real resolvieron el problema de complejidad:
Cada acción del usuario desencadena múltiples actualizaciones:
La barra de progreso utiliza codificación de colores (verde → amarillo → rojo) para indicar visualmente cómo se ajusta la comida a los objetivos diarios.
La calculadora utiliza CSS Grid y Flexbox con puntos de quiebre estratégicos:
@media (max-width: 768px) { .calculator-container { flex-direction: column; } .item-with-quantity { flex-direction: column; } .goal-setting-content { grid-template-columns: 1fr; } }
En móvil, los elementos se apilan verticalmente, y la etiqueta nutricional permanece legible sin desplazamiento horizontal.
La función de exportación genera un informe de texto detallado que incluye:
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 };
Cada valor nutricional fue verificado con:
La estructura modular JSON permite actualizaciones fáciles cuando Subway:
La herramienta incluye notas (**) para elementos con posibles variaciones regionales, aconsejando a los usuarios verificar la información nutricional local cuando esté disponible.
Construir la Calculadora Nutricional de Subway fue más que solo un proyecto de codificación—se trataba de crear transparencia en las elecciones alimenticias. Al combinar datos nutricionales oficiales precisos con una interfaz intuitiva, hemos capacitado a los usuarios para tomar decisiones informadas sobre sus comidas.
La herramienta demuestra cómo las tecnologías web (HTML, CSS, JavaScript) pueden crear aplicaciones potentes e interactivas que cierran la brecha entre los datos corporativos y la comprensión del consumidor. Cada línea de código sirve al objetivo final: ayudar a las personas a entender exactamente lo que están comiendo, para que puedan alinear sus elecciones de Subway con sus objetivos de salud.
La calculadora sigue siendo un proyecto vivo, con planes para expandir sus capacidades mientras mantiene el compromiso central con la precisión y usabilidad que ya la ha hecho valiosa para miles de usuarios.
Enlace de la calculadora: Calculadora de Calorías de Subway: Cuenta las Calorías Disfruta el Sub - Calculadora de Calorías de Subway
\ \
