Hakuna MaMoto

Alquiler de motos · app móvil

App móvil de alquiler de motos: catálogo, favoritos, reservas por fechas y gestión de clientes por rol, sobre Supabase.

Autoría
Proyecto propio
Rol
Diseño y desarrollo completos
Contexto
Proyecto académico · DAM
Periodo
Dic 2025 – Feb 2026
Plataformas
Android · iOS

El proyecto

Hakuna MaMoto es una app de alquiler de motos. El cliente explora el catálogo, guarda sus favoritas y reserva por fechas; el personal gestiona clientes, modelos y el estado de cada reserva.

La desarrollé en solitario con React Native, Expo Router y TypeScript. Empezó con datos simulados y creció rama a rama: inicio de sesión, CRUD, estado global, backend y almacenamiento, hasta funcionar sobre Supabase.

Lo que construí

  • Autenticación y roles

    Registro e inicio de sesión con Supabase Auth, sesión persistente y tres roles (administrador, mecánico y cliente) que cambian la navegación: la pestaña de clientes solo existe para el personal.

  • Catálogo y reservas

    Modelos con precio por día e imagen, favoritos guardados por usuario y reservas con cálculo de días, código propio y cambio de estado.

  • Gestión

    CRUD de clientes y de modelos con baja lógica, subida de fotos desde la galería, edición de perfil con avatar y tema claro u oscuro persistente.

commits
25
ramas de funcionalidad
5
roles de usuario
3
líneas de TypeScript
8,4 k

Decisiones técnicas

  • Cada capa, una responsabilidad

    Pantallas finas, lógica en un hook por pantalla, acceso a datos en servicios y un estado global mínimo en Zustand. Cada servicio traduce las filas de la base de datos al modelo que usa la app.

  • Caché con claves de consulta

    TanStack Query gestiona los datos remotos con una factoría de claves por recurso y un minuto de frescura: volver a una pantalla no repite la petición.

  • Imágenes sin servidor propio

    La foto se lee en base64, se convierte a ArrayBuffer y se sube a un bucket de Supabase Storage. En la base de datos solo se guarda la ruta, que se resuelve a URL pública al leer.

  • Actualizaciones sin pasar por la tienda

    Canales de EAS para desarrollo, preview y producción, con la runtimeVersion ligada a la versión de la app, para publicar cambios de JavaScript por OTA.

Evolución

  1. Dic 2025

    Proyecto base y pantalla de inicio de sesión.

  2. Ene 2026

    CRUD de clientes, tema, perfil, autenticación y paso a Supabase.

  3. Feb 2026

    Subida de imágenes, favoritos, pantalla de inicio y limpieza final.

Stack

  1. App

    • React Native
    • Expo Router
    • TypeScript
    • Zustand
    • TanStack Query
  2. Backend como servicio

    • Supabase Auth
    • Supabase Postgres
    • Supabase Storage
  3. Distribución

    • EAS Build
    • EAS Update