Batch Cooking App – PR2
Ideación inicial
Batch Cook surge de un problema real: planificar la comida semanal sin perder la cabeza con el stock de la nevera, los tiempos de cocción y la lista de compra. La idea en PR1 era un gestor de batch cooking con secciones bien separadas (Recetario, Nevera, Semana, Batch, Lista, Timers). En PR2 el objetivo era completarla: que la búsqueda de recetas fuera real, no simulada, conectando con una API externa de verdad.
Consultas y pasos con la documentación de Capacitor
Seguí la Migration Guide oficial de Capacitor 8: actualizar los paquetes en package.json, ajustar variables.gradle (minSdk, compileSdk, targetSdk), y revisar la lista de breaking changes por plugin. La parte más costosa fue entender la cadena AGP → Gradle → JDK: el error de minSdk me llevó al de compileSdk, que me llevó a AGP 8.9.1, que requería Gradle 8.11.1, que requería JDK 21. Leyendo los release notes de Android Gradle Plugin esa cadena queda clara.
Pruebas con funcionalidades nativas
- Camera (
@capacitor/camera): foto de perfil de receta desde cámara o galería. Requirió minSdk 24. - Preferences (
@capacitor/preferences): persistencia de todo el estado de la app (recetas, nevera, semana, timers). La funcionalidad central del proyecto. - Haptics (
@capacitor/haptics): feedback táctil al marcar un ingrediente de la lista o al activar un timer. - Local Notifications (
@capacitor/local-notifications): notificación cuando un timer llega a cero. - Filesystem (
@capacitor/filesystem): explorado pero finalmente no usado en producción; el estado completo cabe en Preferences.
Decisiones tomadas y aprendizajes
La decisión más importante fue migrar a v8 aunque costara tiempo. Quedarme en v6 habría solucionado el problema a corto plazo pero habría ignorado el feedback directo de la profesora y dejado el proyecto con deuda técnica. Aprendí a leer la cadena de dependencias de Gradle de forma metódica en lugar de ir probando versiones a ciegas. También aprendí que noLoop() con la Page Visibility API es una mejora de rendimiento que cuesta 5 líneas y tiene impacto real en batería.
Bocetos, capturas e iteraciones




Justificación, problemas y conclusiones
Los tres problemas más relevantes de PR2: OneDrive bloqueaba npm install (solución: mover el proyecto fuera de la carpeta sincronizada), la cascada de incompatibilidades de Capacitor v8 (solución: leer los release notes y actualizar AGP, Gradle y JDK en orden), y Android Studio demasiado antiguo (solución: actualizar a Ladybug). Conclusión: PR2 ha sido más de infraestructura que de producto. La app mejora en rendimiento, compatibilidad y funcionalidad real de API, pero el trabajo visible es menor que el trabajo técnico que hay detrás.
Fuentes
- Capacitor 8 docs y Migration Guide — capacitorjs.com
- Android Gradle Plugin release notes — developer.android.com
- TheMealDB API — themealdb.com/api.php
- p5.js Reference (noLoop/loop) — p5js.org/reference
- MDN Web Docs: Page Visibility API — developer.mozilla.org
- Google Fonts, Iconify
- Materiales del aula UOC PR2
- Claude (Anthropic) — asistente de programación para debugging y resolución de problemas técnicos
Vídeo elevator pitch
Como publicar en Google Play
Para publicar en Google Play necesitas:
- Cuenta de desarrollador — Google Play Console, pago único de 25$.
- APK/AAB firmado — en Android Studio: Build → Generate Signed Bundle/APK → Android App Bundle. Necesitas un keystore (créalo desde el mismo wizard).
- Play Console — crea una nueva app, completa la ficha (nombre, descripción, capturas de pantalla, política de privacidad obligatoria), sube el AAB a «Internal testing».
- Revisión — Google revisa en 1–3 días. Para apps de estudiante/prototipo, «Internal testing» es suficiente: puedes compartir un enlace con hasta 100 testers sin pasar por revisión pública.
La política de privacidad es el requisito que más gente ignora y que bloquea la publicación. Con una app que usa cámara o almacenamiento local es obligatoria.


Este es un espacio de trabajo personal de un/a estudiante de la Universitat Oberta de Catalunya. Cualquier contenido publicado en este espacio es responsabilidad de su autor/a.