## Inspiration

La idea de GreenStreak surgió al discutir en el equipo cómo las aplicaciones actuales logran enganchar a las personas para mantener rachas diarias en juegos o idiomas, mientras que las acciones enfocadas en el cuidado del medio ambiente suelen percibirse como tediosas o individuales. Nos propusimos el reto de aprovechar esa misma psicología de la retención para motivar a la comunidad a adoptar hábitos sostenibles verificables en su día a día, convirtiendo la preocupación por el cambio climático en una meta colectiva.


## What it does

GreenStreak es una plataforma móvil que registra y premia actividades ecológicas diarias como caminar, usar bicicleta o reciclar. Desarrollamos un Algoritmo de Impacto Dinámico (AID) que procesa los datos reales de carbono mitigado ($C$, en kg) junto con los días consecutivos de actividad del usuario ($d$) para calcular su puntaje global ($S$):

$$S(C, d) = \alpha \cdot C \cdot \ln(d + 1)$$

Donde $\alpha$ es una constante de escala que ajustamos según el volumen de la comunidad. La aplicación distribuye sus funciones mediante una interfaz de navegación por pestañas que programamos para dar acceso a retos diarios, gráficas de historial de reducción de $CO_2$ y un buscador asistido que resuelve dudas sobre normativas locales de reciclaje utilizando el contexto de ubicación del usuario.


## How we built it

Nos dividimos el desarrollo de la arquitectura en componentes específicos para optimizar la integración entre la infraestructura en la nube de Microsoft y los módulos del cliente:

  • Infraestructura Cloud: Montamos el entorno completo sobre Microsoft Azure. El despliegue del servidor principal se realizó en Azure App Service, mientras que el procesamiento pesado en segundo plano (como el cálculo del decaimiento de puntos y sincronización nocturna) se maneja mediante tareas independientes con Azure Functions (Serverless).
  • Persistencia de Datos: Implementamos Azure Cosmos DB como nuestra base de datos por su rendimiento con datos geoespaciales y baja latencia en consultas concurrentes.
  • Aplicación Móvil: Desarrollamos la interfaz nativa para iOS y Android utilizando React Native y TypeScript, compartiendo la lógica de consumo de servicios en un solo repositorio para agilizar el desarrollo.
  • Validación de Métricas: Para evitar registros falsos, conectamos el cliente con las APIs de Google Fit y Apple HealthKit para extraer las distancias recorridas directamente de los sensores del teléfono, apoyándonos en Google Maps Platform para verificar las rutas de movilidad limpia.
  • DevOps: Automatizamos el pipeline de integración y despliegue (CI/CD) mediante GitHub Actions enlazado a nuestro entorno de trabajo en Visual Studio Code.

## Challenges we ran into

  1. Validación de datos reales (Greenwashing): El problema de permitir el ingreso manual de actividades es la facilidad con la que se pueden simular hábitos. Tuvimos que restringir el flujo integrando las APIs de salud para capturar el desplazamiento mediante diferencias de vectores de posición: $$\Delta \vec{r} = \vec{r}{\text{final}} - \vec{r}{\text{inicial}}$$ Con esto, el backend calcula la velocidad promedio del trayecto y descarta registros si los datos coinciden con un vehículo motorizado.
  2. Optimización del GPS: El rastreo activo degradaba la batería de los dispositivos en las primeras pruebas. Tuvimos que programar un sistema de muestreo intermitente que disminuye la frecuencia de actualización del GPS cuando el acelerómetro detecta que el usuario no está en movimiento.

## Accomplishments that we're proud of

  • Diseñar un pipeline serverless reactivo que conecta las peticiones de la app con Azure Functions y actualiza Cosmos DB sin bloqueos ni retrasos notables.
  • Configurar un módulo de búsqueda local con persistencia que recuerda las restricciones de reciclaje de la alcaldía o municipio del usuario sin necesidad de volver a pedirlas.
  • Desarrollar una interfaz responsiva con gráficas vectoriales que cargan el historial de impacto de forma limpia sin saturar la memoria del teléfono.

## What we learned

Durante las pruebas con usuarios descubrimos que la retención no se comporta de forma lineal. Al principio intentamos usar una progresión exponencial para dar más puntos a rachas altas, pero esto frustraba a los usuarios que recién iniciaban. Cambiamos la lógica hacia un enfoque logarítmico para premiar el esfuerzo inicial, combinándolo con un factor de decaimiento exponencial cuando el usuario pasa $t$ días inactivo:

$$R(t) = R_0 \cdot e^{-\lambda t}$$

Donde $\lambda$ representa la tasa de atenuación ambiental del algoritmo. Ajustar este modelo matemático nos enseñó la importancia de alinear los datos técnicos con el comportamiento del usuario.


## What's next for GreenStreak

  • Módulos Corporativos: Llevar la plataforma al sector corporativo para que las empresas puedan abrir retos internos de sustentabilidad para sus empleados y reportar métricas de RSC de forma directa.
  • Modelos de Predicción: Incorporar herramientas de análisis predictivo sobre Azure para anticipar qué semanas del año presentan bajas en la actividad y lanzar retos comunitarios automáticos para esas fechas.
  • Conectividad IoT: Vincular la API del backend con medidores eléctricos inteligentes del hogar para registrar puntos automáticamente cuando se reduzca el consumo base en horas pico.

Guía de Contribución: Formato y Matemáticas

Para mantener la consistencia visual del proyecto al editar este archivo, por favor sigue los siguientes estándares de formato:

Consejos sobre Markdown (Formato de Texto)

  • Titulares: Usa # para títulos principales o ## para subtítulos.
  • Texto Atrevido (Negrita): Envuelve el texto entre asteriscos dobles: **atrevido**.
  • Cursiva: Añade guiones bajos espaciados o juntos: _cursiva_.
  • Enlaces hipervínculo: [Texto del enlace](http://foo.bar)
  • Imágenes y diagramas: ![Texto alternativo](/ruta/a/img.jpg)
  • Bloques de código estructurado: Especifica el lenguaje al abrir las tres comillas invertidas.

Consejos Matemáticos para LaTeX

Para la documentación de nuestros algoritmos y análisis de vectores físicos, implementamos la notación matemática de LaTeX:

  • Matemáticas en línea: Usa \\( ... \\) o los signos de dólar simples $ ... $ para incluir variables dentro de un texto (por ejemplo: el factor de escala $\alpha$).
  • Ecuaciones mostradas: Usa bloques centrados con $$ ... $$ para fórmulas complejas o teoremas independientes, tales como: $$\Delta \vec{r} = \vec{r}{\text{final}} - \vec{r}{\text{inicial}}$$
Share this project:

Updates

Submission history