Volver al portafolio
Full-Stack Ecotourism Platform

Greenway

Plataforma integral de ecoturismo con chat en tiempo real e inteligencia artificial.

Greenway screenshot
Sobre el proyecto

Solución web completa para conectar turistas con anfitriones locales en El Santuario, Antioquia. Implementa RBAC, mensajería en tiempo real con Firebase, asistente virtual con GPT y visualización geográfica con Google Maps API. El proyecto fue un encargo municipal para digitalizar el ecosistema turístico de la región.

El reto

Tres roles con permisos radicalmente distintos (turista, anfitrión, admin municipal) que debían coexistir en la misma aplicación, con un chat en tiempo real entre ellos, sin presupuesto para WebSockets en producción. El servidor del municipio corría en un plan de Render gratuito que duerme después de 15 min de inactividad — WebSockets se desconectan al despertar y eso arruina la experiencia de chat.

Decisión técnica

Para RBAC usamos decoradores de Flask que verifican el rol almacenado en el JWT antes de cada ruta protegida. Para el chat 'en tiempo real' sin WebSockets, usamos Firebase Realtime Database directamente desde el frontend: el backend de Flask no toca los mensajes, solo valida que el usuario tenga permiso para escribir en esa sala. El frontend hace polling reactivo via `onValue()` de Firebase. Esto resuelve el problema del servidor dormido porque Firebase siempre está activo.

Resultados
23Anfitriones registrados en primer mesArtesanos, guías, hospedajes de la región
< 2sTiempo de respuesta del asistente IACon streaming de respuesta activado
3Roles gestionados en la plataformaTurista, anfitrión y administrador municipal
Lecciones aprendidas

Flask es perfectamente capaz para proyectos de esta escala, pero su falta de tipos nativos nos costó bugs en los serializadores de respuesta JSON. En proyectos Python futuros usamos FastAPI + Pydantic desde el inicio — la validación automática de tipos ahorra más tiempo del que tarda en configurarse. También aprendimos que el streaming de OpenAI (`stream=True`) cambia completamente la percepción de velocidad del usuario — 2 segundos de respuesta instantánea se siente mucho mejor que 2 segundos de espera sin feedback.