Inspiración

Existen miles de especies de hongos, y distinguir un rebozuelo comestible de una especie tóxica parecida es una habilidad que normalmente toma años de experiencia de campo. La mayoría de las personas que encuentran un hongo interesante en una caminata no tienen forma de aprender sobre él más allá de una búsqueda rápida y poco confiable en internet. Quisimos construir algo que convirtiera esa curiosidad en un momento real de aprendizaje: una herramienta que un estudiante de biología, un excursionista o un niño curioso pudieran usar de verdad para entender lo que están viendo, de forma segura.

Qué hace

FungusLens es una plataforma educativa que identifica hongos a partir de una foto usando visión por IA y convierte cada escaneo en una ficha de aprendizaje tipo enciclopedia: nombre científico, familia/taxonomía, etapa de desarrollo, nivel de toxicidad y una nota educativa breve — siempre acompañada de un recordatorio claro de que la identificación por foto es educativa, no una base para decidir qué comer.

Cada hongo identificado se guarda en la "bitácora de campo" personal del usuario, y la app genera automáticamente cuestionarios de opción múltiple a partir de los hongos escaneados por la comunidad, así que entre más gente la usa, más rico se vuelve el contenido de aprendizaje.

Cómo lo construimos

  • Frontend: React + Vite, con Tailwind CSS alrededor de un sistema de diseño propio inspirado en el "suelo de bosque" — tonos de musgo y tierra oscura, una tipografía serif para los nombres científicos, y una insignia distintiva de "esporada" (inspirada en la técnica real de micología de identificar especies por el patrón que dejan sus esporas al caer) que codifica visualmente la confianza de la IA y el nivel de toxicidad de un vistazo.
  • Auth y datos: Firebase Authentication para las cuentas, Cloud Firestore para la colección de registros de hongos, y Firebase Cloud Storage para las fotos.
  • Identificación con IA: Una Cloud Function de Firebase (2nd gen) recibe la foto subida, llama a un modelo con capacidad de visión a través de la API unificada de OpenRouter (GPT-4o-mini), y devuelve JSON estructurado que se mapea directo a Firestore. El prompt está diseñado deliberadamente pensando en seguridad: se le exige al modelo bajar su nivel de confianza y marcar la toxicidad como "Indeterminado" cuando la imagen no permite una identificación confiable, y nunca puede afirmar comestibilidad con certeza.
  • Motor de quiz: Un generador del lado del cliente toma una muestra aleatoria de registros de hongos de la comunidad desde Firestore y arma preguntas de opción múltiple con distractores reales tomados de otras especies guardadas, así que no hay dos cuestionarios iguales.
  • Flujo de desarrollo local: Desarrollamos y corrimos todo el stack — Auth, Firestore, Storage y la Cloud Function — sobre el Firebase Local Emulator Suite.

Retos que enfrentamos

El giro más grande: a mitad del desarrollo descubrimos que, desde febrero de 2026, Firebase exige el plan de pago Blaze (con tarjeta vinculada) para usar Cloud Storage, incluso dentro de la capa gratuita. Como esto era un proyecto de hackathon, no queríamos que un muro de facturación bloqueara el desarrollo, así que rediseñamos la configuración de Firebase para correr completamente contra el Local Emulator Suite (Auth + Firestore + Storage + Functions), manejando los secretos mediante un archivo local .secret.local en vez de Secret Manager. Eso nos permitió construir y demostrar el flujo completo — subir foto, identificar con IA, guardar y hacer el quiz — sin ningún costo en la nube.

También iteramos en el backend de IA: después de experimentar con un solo proveedor, movimos la llamada de identificación detrás de OpenRouter para poder cambiar de modelo sin reescribir la Cloud Function, y terminamos usando GPT-4o-mini por su buen balance entre calidad de visión y costo.

Logros de los que estamos orgullosos

  • Un flujo completo de punta a punta — escanear, identificar, guardar, hacer el quiz — corriendo enteramente sobre emuladores locales sin costo de infraestructura en producción.
  • Un diseño de prompt que trata la toxicidad de los hongos como una preocupación real de seguridad, no solo un campo de datos más: se instruye al modelo a matizar cuando hay incertidumbre y la interfaz muestra una advertencia explícita para resultados tóxicos.
  • Un sistema de quiz genuinamente dinámico, generado a partir de datos reales aportados por los usuarios en vez de un banco de preguntas fijo.

Qué aprendimos

  • Las políticas de facturación de los proveedores de nube pueden cambiar a mitad de un proyecto (la exigencia de Blaze para Storage), y vale la pena diseñar desde el inicio pensando en un flujo de desarrollo local-first.
  • Estructurar un prompt de IA alrededor de la incertidumbre explícita ("Indeterminado" + confianza baja) produce resultados más seguros y confiables que forzar una respuesta segura todo el tiempo.
  • Enrutar las llamadas al modelo a través de OpenRouter facilitó experimentar con distintos modelos de visión sin tocar la arquitectura de la app.

Qué sigue para FungusLens

  • Desplegar a producción en Firebase Blaze con Storage/Functions reales para usuarios públicos.
  • Etiquetado por geolocalización de los hallazgos y una vista de mapa con los descubrimientos de la comunidad.
  • Insignias de logros por diversidad de especies y rachas de quiz.
  • Exportar la bitácora del usuario como una guía de campo en PDF.

Built With

  • cloud-firestore
  • computer-vision
  • css3
  • firebase
  • firebase-authentication
  • firebase-cloud-functions
  • firebase-emulator-suite
  • firebase-storage
  • generative-ai
  • gpt-4o-mini
  • html5
  • java
  • javascript
  • lucide-react
  • node.js
  • openai
  • openrouter
  • prompt-engineering
  • react
  • react-router
  • rest-api
  • tailwindcss
  • vite
Share this project:

Updates

Submission history