Amanti

Ingeniero de software en prácticas — proyecto aplicado · OpenTecc · February 2025 — May 2025

  • Java
  • Spring Boot
  • REST APIs
  • MySQL
  • Next.js
  • Material UI
  • Stripe
  • Shopify (Remix)
  • JUnit
  • Mockito
  • SonarQube
  • Docker

En Marruecos, los repartidores no dejan los paquetes en la puerta, así que la entrega a domicilio falla cuando no hay nadie en casa. Amanti dirige los paquetes a comercios de barrio que los clientes ya visitan, para que los recojan cuando les venga bien. Construí la plataforma que hay detrás: el back-end, el panel de administración, los pagos y el plugin que la integra en los procesos de compra online.

El problema

En Marruecos, las compras online funcionan con pago contra reembolso: pagas al repartidor cuando el paquete llega. Los repartidores no dejan los paquetes en la puerta como en Estados Unidos. Así que si no hay nadie en casa cuando llega el repartidor, la entrega falla. Tiene que volver otro día, el paquete va y viene, y el cliente sigue esperando.

La idea

Casi todo el mundo pasa cada día por delante de una tienda de barrio. Amanti convierte esas tiendas en puntos de recogida: el repartidor deja el paquete en una tienda cercana al cliente, y el cliente lo recoge cuando le viene bien.

Cómo funciona una entrega

  1. El cliente compra online. En la página de pago habitual de la tienda, elige un punto de recogida cerca de él en lugar de la entrega a domicilio.
  2. Amanti recibe el pedido automáticamente. La tienda avisa a Amanti en cuanto se hace el pedido, y se crea una entrega.
  3. El repartidor deja el paquete en la tienda. La entrega se confirma con un código QR y una foto, para que quede constancia de que el paquete llegó.
  4. El cliente lo recoge. Pasa cuando le viene bien, la entrega se registra de la misma forma, y paga en efectivo a la tienda, igual que habría pagado al repartidor.
  5. La tienda liquida el dinero. Desde su página en Amanti, la tienda envía el dinero cobrado a través de Stripe, que lo reparte automáticamente: la tienda online cobra el pedido y Amanti se queda con su comisión.

Lo que probamos primero

  • Pedir al cliente que pagara online por adelantado. El pago contra reembolso es lo normal en Marruecos, así que ese paso de pago online hacía que los clientes abandonaran el pedido.
  • Una extensión de navegador que añadía la opción de punto de recogida a las páginas de las tiendas. Suponía ejecutar nuestro código en el navegador de los compradores, un riesgo de seguridad demasiado grande.

La solución final: un plugin en el pago

Construimos un plugin nativo de Shopify que añade la elección del punto de recogida directamente en la página de pago de la tienda, sin que el cliente salga de una página en la que ya confía. Shopify era solo la primera plataforma. Mantuvimos toda la lógica de entregas y pagos en el back-end de Amanti y no en el plugin, para que añadir otra plataforma de e-commerce más adelante solo requiriera un pequeño plugin conectado al mismo sistema.

Lo que construí

Construí Amanti desde cero con otro ingeniero, durante mis prácticas en OpenTecc:

  • El back-end en Spring Boot que gestiona cada entrega, desde que llega el pedido hasta el pago final.
  • El control de acceso para tres roles de usuario, con cada acción registrada automáticamente en un registro de auditoría. Usa programación orientada a aspectos, para que ninguna funcionalidad nueva pueda saltárselo.
  • El registro de entregas con código QR y foto, para saber siempre quién tuvo el paquete por última vez.
  • Los pagos con Stripe que reparten cada pago entre la tienda online y Amanti.
  • El plugin de Shopify y el panel de administración en Next.js para pedidos, envíos, devoluciones y pagos.

Diseñamos el sistema en UML antes de escribir código, y después llevé la cobertura de pruebas del 20 % al 80 % con JUnit y Mockito, con SonarQube para la calidad del código.

Analítica

El panel ofrece una visión completa de la salud del negocio, con analítica en tiempo real sobre pedidos, rendimiento y pagos.

Logística

Gestiona eficazmente todo el ciclo de vida del envío, desde su creación hasta la entrega. El sistema admite seguimiento detallado, registros de historial y procesos seguros de entrada/salida.

Devoluciones

Un flujo optimizado para gestionar las devoluciones de productos, garantizando la satisfacción del cliente y la eficiencia operativa.

Pagos

Integración financiera robusta con Stripe, gestionando transacciones seguras y pagos a comercios.

Ajustes

Opciones completas de configuración del sistema para ajustes generales, gestión de la cuenta y almacenamiento.

Lo que aprendí

Amanti fue un proyecto decisivo que me enseñó a tender un puente entre la complejidad técnica y la comodidad del usuario. Aprendí a moverme por las complejidades del ecosistema Spring Boot a gran escala, gestionando la logística de la «última milla» con una gestión de estado robusta y seguimiento en tiempo real. La mayor lección fue la importancia del diseño iterativo: pasar de una extensión de navegador a un plugin nativo fue una decisión difícil pero necesaria que acabó definiendo el éxito del proyecto.