Saltar al contenido

Tienda de Barrio

Proyectos
(02/11) Android Nativo • Produccion

Descripción & Contexto

App completa de tienda de barrio: ventas, fiado, inventario con fotos, compras con costo promedio ponderado y reportes por rol. Kotlin + Compose + Supabase con soporte offline idempotente.

Tienda de Barrio es una aplicacion de gestion comercial completa para tiendas de barrio, construida en Android nativo con Kotlin + Jetpack Compose (Material 3) y Supabase como backend (PostgreSQL + Auth + Realtime + RLS). La logica critica de negocio vive en triggers y RPC de Postgres, no en el cliente.

Código Privado
Tienda de Barrio

Características Clave

  • Ventas

    Ticket multilinea, efectivo o fiado, con abono inicial opcional. RPC transaccional que inserta todo en una sola transaccion.

  • Compras (solo admin)

    Entrada de stock que recalcula el costo por promedio ponderado en tabla confidencial separada del catalogo.

  • Inventario

    Alta/edicion de productos con marca, presentacion, codigo de barras y foto comprimida (WEBP, lado menor a 720px, ~50 KB).

  • Clientes / Fiado

    Saldo por cobrar, abonos y pantalla "por cobrar".

  • Reportes

    Resumen del periodo server-side; el vendedor ve totales sin ganancia, el admin ve margen y compras.

  • Offline

    Deteccion de conectividad y sincronizacion diferida con idempotencia por client_op_id.

Arquitectura del Sistema

El proyecto sigue una arquitectura en capas con DI manual (ServiceLocator): ``` domain/model (data class + fromMap + toUpsertJson) -> data/repository (Postgrest / Auth / Realtime) -> ViewModel + StateFlow -> @Composable screens -> ui/brand (design-system morado: tokens, tipografia, shapes) ```

Retos Técnicos & Soluciones

El mayor desafio fue implementar la cola offline idempotente: cada operacion se encola con un client_op_id estable, y al reintentar el mismo ID, un constraint violation (23505) se interpreta como exito en lugar de error. Esto garantiza que nunca se dupliquen ventas o movimientos de inventario, incluso si el usuario pierde conexion a mitad de una operacion.

Stack Tecnológico

  • Kotlin
  • Jetpack Compose
  • Supabase
  • PostgreSQL
  • Material 3

Ficha Técnica

Rol
Arquitectura, Diseño y Desarrollo
Tipo
Android Nativo • Produccion
Impacto & Resultados
Aplicacion completamente funcional con sincronizacion offline robusta, manejo de roles con RLS y logica de negocio transaccional en el servidor. Zero duplicados en operaciones criticas gracias a la idempotencia.
Aprendizajes
Este proyecto demuestra arquitectura de nivel senior en Android: capas limpias, seguridad por diseno (RLS + roles), offline-first con idempotencia, y logica critica delegada al servidor para mantener la integridad de los datos. <div
Código
Código Privado