Portafolio · App móvil · Miel cruda
Un Millón de Flores · App
App Android en Flutter, sin servidor propio: comparte todo con el sitio.
- Cliente
- Un Millón de Flores
- Tipo
- App móvil
- Año
- 2026
- Estado
- Publicada

El encargo
Qué se resolvió.
App oficial de Un Millón de Flores en Flutter, solo Android: el mismo armador de pedidos del sitio, los mismos artículos de la Academia de la Miel y cuatro minijuegos de la colmena dibujados a mano. No tiene backend propio — lee productos, precios y contenido directo de la misma infraestructura que ya usa el sitio web.
La marca ya tenía un sitio completo — armador de pedidos, Academia de la Miel, panel de administración — así que la app Android no podía significar construir todo eso de nuevo. Tenía que sentirse nativa, dar algo que el sitio no da (un minijuego, lectura sin abrir el navegador), y no sumar ni un servidor, ni una base de datos, ni un panel más que mantener.
El resultado es una app Flutter sin backend propio: lee productos y precios directo de la misma API de Firestore que ya usa el sitio, y los artículos de la Academia de un endpoint estático agregado al sitio solo para esto. Un pedido armado en la app cae en la misma colección que ve el dueño en `/admin` — no hay un panel de la app aparte.
En simple: la app no tiene servidor propio: consulta la misma API REST de Firestore que el sitio, con la misma clave pública sin privilegios especiales. Los artículos de la Academia llegan por un endpoint estático (academia.json) agregado al sitio solo para esto. Un pedido armado en la app se guarda en la misma colección que usa el panel web, marcado con origenApp — el dueño ve todo en un solo lugar, venga de donde venga.

Sin backend propio: comparte todo con el sitio
Ni SDK nativo de Firebase, ni google-services.json, ni un panel aparte — la app consulta directo lo que el sitio ya expone.
- 1
Productos y precios por API REST de Firestore
Mismo proyecto y misma clave pública sin privilegios que el sitio ya expone en su bundle JS, protegida por las reglas de seguridad de Firestore, no por secreto — no hace falta un SDK nativo de Firebase.
- 2
Un pedido de la app aparece en el mismo panel
Se guarda en la misma colección que usa el sitio, marcado con origenApp: true, de forma best-effort — si el guardado falla, nunca bloquea el camino a WhatsApp.
- 3
El mismo sistema de diseño, reproducido a mano
La paleta y tipografía del theme.css del sitio (crema, tinta chocolate, oro, Newsreader + Inter) están reproducidas en Flutter, para que la app y la web se sientan como un mismo producto.


Cuatro minijuegos que no necesitan señal
Lo que el sitio no puede dar: algo para hacer con el teléfono mientras llega el pedido, dibujado a mano y sin depender de internet.
- 1
Cuatro juegos, cero conexión ni compras
"El vuelo de la obrera" (al estilo del dinosaurio de Chrome, pero con una abeja), "Atrapa el polen", "Memoria del panal" y "El vuelo veloz" — ninguno necesita señal, todos son solo para pasar el rato.
- 2
Dibujado a mano, sin motor de juego
El vuelo de la obrera corre sobre CustomPainter con una física propia cuadro a cuadro — gravedad, velocidad de salto, rampa de velocidad hasta un tope — sin ninguna librería de juegos externa.
- 3
Tres dificultades, mejor puntaje en el teléfono
Fácil, normal y difícil; el mejor puntaje queda guardado localmente (shared_preferences) de una partida a la otra.

La Academia, sin duplicar el contenido
Un artículo nuevo en el sitio aparece solo en la app — sin panel aparte, sin volver a publicar nada.
- 1
Un endpoint estático, agregado al sitio solo para esto
GET /academia.json expone la misma colección de contenido que usa /academia en la web — el dueño publica un artículo una sola vez y aparece en los dos lugares.
- 2
Lectura completa en markdown, sin salir de la app
Los artículos se renderizan enteros dentro de la app, con el mismo sistema de diseño, sin abrir el navegador ni perder el contexto.
- 3
Cero pasos extra para publicar
Agregar un artículo en el sitio (un .md nuevo en la Academia) es agregar un artículo en la app — no hay un segundo lugar donde escribir el mismo contenido dos veces.
Con qué habla el sistema.
Firebase · API REST, sin SDK nativo
Mismo proyecto multi-tenant que usa el sitio web, mismo prefijo umdf_ para no cruzarse con otras tiendas de la misma infraestructura.
WhatsApp Business
El mismo cierre de venta que la web: enlace directo con el mensaje redactado, al canal correcto según la región del cliente.
Endpoint estático academia.json
El puente entre el Content Collection de Astro del sitio y la app — contenido publicado una vez, servido en dos productos.
CustomPainter (Flutter)
Los cuatro minijuegos y los widgets de marca (Ámbares, Cucharadita) dibujados a mano, sin motor de juego ni dependencias gráficas externas.
¿Tienes un proyecto parecido?
Cuéntanos qué necesitas. Te respondemos con un plan concreto para tu caso, no con una plantilla genérica.