Amanti
- 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
- 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.
- Amanti recibe el pedido automáticamente. La tienda avisa a Amanti en cuanto se hace el pedido, y se crea una entrega.
- 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ó.
- 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.
- 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.





