Casos de estudio · 26 oct 2026 · 11 min de lectura
Leaderbrock Sports es una agencia de marketing deportivo de Valencia con un equipo comercial repartido por Europa y América. Hemos construido la app con la que trabaja ese equipo: la agenda, la ruta del día y los gastos con la foto del ticket, y el panel web desde el que la oficina planifica, supervisa y aprueba. Lo hemos hecho entero, el backend, la web y la app, desde una demo navegable en mayo de 2026 hasta la versión del 26 de octubre de 2026.
Antes de la app, el equipo planificaba la semana en una hoja de cálculo compartida, guardaba los tickets en un sobre y los apuntaba a mano, y en la oficina nadie sabía dónde estaba cada comercial durante un viaje. La app sustituye esos tres procesos, y cada perfil ve su parte.
Como en Boathous, el backend es Java reactivo. La web y la app comparten un mismo cliente de la API y un mismo paquete de dominio, así que una regla como el formato de un importe o qué rol puede abrir qué pantalla se escribe una vez y vale en las dos.
La app de campo y el panel de oficina hablan con un único backend en Spring Boot, que guarda los datos en PostgreSQL, cifra los tickets en un almacenamiento compatible con S3, manda los tickets a la IA para leerlos y envía avisos por push y email.
| Pieza | Tecnología | Por qué |
|---|---|---|
| Backend | Java 25, Spring Boot 4.1 con WebFlux, PostgreSQL con R2DBC, Flyway | Reactivo de punta a punta: el mapa en directo, los avisos y la lectura de tickets comparten un servicio |
| Panel de oficina | React 19, Vite 8, Tailwind 4, FullCalendar, MapLibre | Planificación, revisión de gastos y el mapa del equipo en pantalla grande |
| App | Expo SDK 57, React Native 0.85, Expo Router | Una sola base de código para iPhone y Android, con cámara, GPS en segundo plano, Face ID y notificaciones |
| Código compartido | Un monorepo con Bun: cliente de la API, dominio, stores y tokens de diseño | La lógica de las dos apps vive en un solo sitio y se prueba una vez |
| IA | Spring AI con Anthropic u OpenAI | La lectura de tickets y un asistente; el proveedor es un ajuste, no una reescritura |
| Ficheros | Almacenamiento compatible con S3, cifrado por la aplicación | Tickets y fotos solo salen por un endpoint autenticado |
| Avisos | FCM, Resend y WebSocket | Push, email y mensajes dentro de la app con un mismo contrato |
Backend y web funcionan como imágenes Docker en un servidor, con una copia de staging junto a producción. Cada despliegue pasa primero por staging, y la versión anterior no se retira hasta que la nueva dice que está sana. Los iPhone instalan la app con TestFlight y los Android descargan un APK que el administrador publica desde el panel; al arrancar, la app pregunta si hay una versión nueva y si actualizar es obligatorio. Una app interna no necesita una tienda pública.
Un comercial paga la comida con un cliente, hace una foto al ticket y sigue con su día. La app tiene su propia cámara, con guía de encuadre y flash, y también acepta una foto de la galería o un PDF de Archivos: JPEG, PNG, WebP, HEIC o PDF, hasta 15 MB.
Un gasto pasa por cuatro estados: borrador, pendiente, aprobado o rechazado. Finanzas y los administradores revisan toda la organización. Cada veredicto le llega al comercial por push, por email y dentro de la app, y queda en un registro de auditoría.
La agenda se parece a Google Calendar a propósito: es lo que el equipo ya conocía. Cada evento lleva el color del país de su dueño, el mismo en la web y en el móvil. Un comercial ve la agenda de su país y las reuniones a las que le invitan; los demás roles ven toda la organización.
El comercial inicia la ruta del día con un botón. Se finaliza sola como mucho a las ocho horas y se puede volver a iniciar. Administradores y finanzas ven a todo el equipo en un mapa en directo por WebSocket, un manager solo su parte del organigrama, y quien lleva más de cinco minutos sin dar señal aparece como desconectado.
Una posición de GPS con ruido no es un viaje. La guardamos, pero no la pintamos.
Las posiciones se borran a los 90 días. Geolocalizar a los empleados tiene su propia norma en España, el artículo 90 de la LOPDGDD, y antes de usar la app cada persona lee hasta el final y acepta la información previa que redactó el abogado de la empresa, con una constancia que no se puede alterar y un justificante.
La app guarda nombres, emails y teléfonos de un equipo en varios países, fotos de sus tickets y sus posiciones. La diseñamos para que una copia de la base de datos o de los ficheros no le diga a nadie quién es quién.
| Cuándo | Qué llegó |
|---|---|
| May 2026 | Una demo navegable de la web y la app, con un lector de tickets simulado, para acordar las pantallas |
| Jun 2026 | El backend de agenda, gastos y rutas, la IA que lee los tickets y las dos apps con datos reales |
| Jul 2026 | El mapa en directo, las notificaciones push, el GPS en segundo plano, las passkeys, el export contable y Holded, las solicitudes de acceso y el registro de jornada |
| Ago 2026 | Producción en el dominio de la empresa, y la app en TestFlight y como APK con avisos de versión nueva |
| Sep 2026 | El cierre de reuniones con su resultado, cada gasto en la ruta del día, el aviso de duplicados, el equipo en directo y la información previa |
| Oct 2026 | Canales de versiones, vuelos y trenes confirmados en el mapa, las paradas y reuniones de todo el equipo y las subidas en segundo plano |
El backend lleva 714 clases de test, 48 de ellas contra una base de datos, con un mínimo del 78 % de líneas cubiertas, y el monorepo 685 ficheros de test. De los más de 1.200 commits, unos 120 son de agentes de IA y el resto son nuestros, de los dos. Muchos de los cambios recientes responden a algo que pidió el equipo, y la documentación apunta cada uno con su fecha.
Si tu equipo sigue planificando en una hoja de cálculo y guardando los tickets en un sobre, este es el tipo de software a medida que construimos, con una app móvil para la gente que está en la calle.
Le da a un equipo comercial repartido por varios países su agenda, la ruta del día y los gastos con la foto del ticket en el móvil, y a la oficina un panel web para planificar, seguir al equipo en un mapa en directo y revisar y aprobar los gastos.
La foto o el PDF van al backend, donde un modelo de IA lee el comercio, los importes, el IVA, la moneda, la fecha y la categoría. El servidor comprueba que la base más el IVA da el total y crea un borrador que el comercial revisa, corrige si hace falta y después presenta.
No. La IA solo rellena un borrador. El comercial lo confirma y finanzas o un administrador lo aprueba o lo rechaza, y cada veredicto queda en un registro de auditoría.
No, es una app interna. Los iPhone la instalan con TestFlight y los Android con un APK que publica el administrador, y la app avisa al arrancar cuando hay una versión nueva.
Cada persona lee y acepta antes de usar la app la información previa que redactó el abogado de la empresa, como pide el artículo 90 de la LOPDGDD, las posiciones se borran a los 90 días y cada campo personal va cifrado.
Casos de estudio · 26 oct 2026 · 12 min de lectura
ReservPark detecta por el Bluetooth del coche que has aparcado, te pregunta si te vas cuando vuelves a él y avisa a los conductores cercanos, y deja alquilar un garaje por horas o con abono. Cómo construimos la detección nativa, las reglas de la ubicación en segundo plano, las plazas libres de 30 minutos y unas reservas de garaje que no se pueden vender dos veces.
Casos de estudio · 26 oct 2026 · 12 min de lectura
Una tienda recibe una entrega y tiene que saber qué ha llegado. Almacén-Pro, una herramienta interna que construimos para las tiendas de un cliente, lee el PDF del albarán y lo convierte en una lista que el personal comprueba escaneando cada producto. Cómo leemos el PDF sin adivinar, escaneamos sin cobertura y juntamos el trabajo de dos móviles sin perder un escaneo.
Casos de estudio · 28 mar 2026 · 9 min de lectura
Boathous une a dueños de barcos con quien quiere alquilarlos, en la web y en una app para iOS. Cómo construimos su backend reactivo en Java, los pagos fraccionados con Stripe, el chat en tiempo real con traducción, la búsqueda en doce idiomas y un asistente de IA que responde por el dueño pero nunca confirma una reserva.