Florami
Un compañero de plantas que identifica especies, diagnostica enfermedades y prescribe cuidados a partir de una sola foto.
Florami es una aplicación web full-stack que convierte una foto del móvil en un plan de cuidado completo. El usuario sube una fotografía y el sistema identifica la especie, analiza el estado de las hojas, devuelve acciones de cuidado ordenadas por prioridad y — para los envíos de alta calidad — alimenta una enciclopedia bilingüe moderada que crece con cada contribución.
Qué hace que funcione.
- 01
Pipeline Gemini de dos pasos: un modelo de visión describe y un segundo modelo fuerza el resultado en JSON estricto.
- 02
Auto-publicación por niveles de calidad: solo las especies de Nivel 1 con aprobaciones previas entran automáticamente en la enciclopedia bilingüe.
- 03
Conversión HEIC→JPEG en servidor + deduplicación SHA-256 / pHash para que cualquier foto de iPhone funcione a la primera.
— Contexto
La mayoría de apps de cuidado de plantas se quedan en la identificación de la especie, dejando al usuario traducir un nombre latino en decisiones reales de riego, luz y abono. Florami cierra ese ciclo: foto entrante, plan de cuidado con criterio saliente, y una enciclopedia pública que aprende de las mejores contribuciones.
— El problema
El dueño de una planta de interior hace una foto con el móvil porque algo no va bien. No quiere un artículo de Wikipedia: quiere una frase sobre qué le pasa y tres acciones para esta semana. Y todo lo que el sistema aprenda de esa foto debería beneficiar a la siguiente persona que suba la misma especie.
El proceso, paso a paso.
- 01 Design
Define el trabajo clave y diseña la pantalla a su alrededor.
Triaje y prescripción, no identificación enciclopédica. La pantalla de resultados ordena: especie (con confianza), estado y tres acciones de cuidado por urgencia. Todo lo demás — historial, chat, enciclopedia — está a un toque de distancia, nunca en medio.
- 02 Build
Backend Node + Express en cinco capas, MongoDB en el plano de datos.
Separación estricta entre transporte, routing, controladores, servicios y capas de datos. Modelos Mongoose para User, Plant, Consulta, Conversation y PlantCatalog. Helmet, CORS, mongo-sanitize, rate limiting, CSRF (double-submit cookie) y validación Zod en cada ruta mutante.
- 03 Model
Pipeline Gemini de dos pasos: describe primero, luego estructura.
El modelo de visión devuelve una narrativa botánica detallada a partir de la imagen. Una segunda llamada 'estructuradora' reescribe esa narrativa en un documento JSON estricto y validado que el backend puede almacenar. Una tercera pasada de traducción genera copia ES/EN para la enciclopedia. Todas las llamadas reintentan con backoff exponencial.
- 04 Build
Casos límite que deciden si el producto funciona de verdad.
Conversión HEIC→JPEG en servidor vía sharp (los iPhones usan HEIC por defecto, Gemini no lo acepta). Deduplicación SHA-256 + hash perceptual contra las últimas 50 subidas del usuario (Hamming ≤ 6). Las imágenes se mantienen en memoria y se transmiten directamente a Cloudinary — el disco del servidor nunca toca el archivo.
- 05 Ship
Auto-publicación por niveles de calidad para la enciclopedia.
Cada análisis se clasifica en Nivel 1 / 2 / 3 según confianza y calidad de imagen. Las especies Nivel 1 con ≥ 2 aprobaciones previas de admin se publican automáticamente con traducción bilingüe. Las especies nuevas y las de Nivel 2 van a una cola de moderación humana. El Nivel 3 se descarta — la imagen nunca se sube.
8 capturas, un producto.
Cifras, sin adornos.
- 2 pasos Pipeline Gemini: visión + estructurador — Uno describe, uno fuerza JSON
- 3 niveles Auto-publicación por calidad — Confianza × calidad de imagen
- ES / EN Enciclopedia bilingüe auto-traducida — Fichas en caché vía lru-cache
- 0 disco Procesado de imágenes: RAM → Cloudinary — Multer memoryStorage
“El modelo es una funcionalidad del producto, no un proyecto de ciencia.
” — Florami — principio de diseño