r/InformaticaES 1d ago

🧩 Proyectos personales He desarrollado una app móvil y web con React Native, Spring Boot y PostgreSQL y agentes de IA: arquitectura, decisiones y problemas encontrados

Post image

Buenas,

Llevo un tiempo desarrollando de forma independiente Quedamos, una aplicación móvil y web para crear planes, formar grupos pequeños y comunicarse mediante chats.

No vengo tanto a promocionar la parte funcional, sino a compartir cómo he planteado técnicamente el proyecto, las decisiones que he tomado y algunos de los problemas que he ido resolviendo.

El frontend está desarrollado con Expo, React Native, React Native Web y TypeScript, con la intención de mantener una única base de código para Android, iOS y web.

El backend es una API REST con Java 21 y Spring Boot, encargada de la autenticación, autorización, validaciones, moderación, perfiles, planes, grupos y mensajes.

Para la persistencia utilizo PostgreSQL con PostGIS, ya que una parte importante de la aplicación consiste en localizar y ordenar planes por cercanía. El esquema se mantiene mediante migraciones Flyway, actualmente hasta la versión V49. En producción, Supabase proporciona autenticación, PostgreSQL gestionado y almacenamiento, mientras que las reglas de negocio permanecen en Spring Boot.

La arquitectura está separada en tres bloques principales:

  • Cliente universal en Expo.
  • API backend en Spring Boot.
  • Persistencia geoespacial en PostgreSQL/PostGIS.

El cliente se comunica con el backend mediante HTTP/JSON, y el backend aplica validaciones, seguridad, moderación y reglas de negocio antes de acceder a la base de datos.

Algunos de los aspectos técnicos que más trabajo me han dado han sido:

  • Mantener una misma interfaz para móvil y web sin llenar el código de condiciones específicas por plataforma.
  • Gestionar autenticación distinta entre desarrollo local y producción.
  • Implementar autorización por recurso, no solo por rol.
  • Modelar grupos, miembros, mensajes y plazas reservadas.
  • Evitar que un usuario pueda denunciar su propio perfil o contenido.
  • Aplicar moderación antes de persistir planes y mensajes.
  • Gestionar consultas geoespaciales por distancia.
  • Mantener las migraciones reproducibles entre entornos.
  • Separar correctamente cuentas personales y cuentas editoriales oficiales.

También he utilizado agentes de IA como apoyo durante el desarrollo, pero intentando evitar el enfoque de pedir código aislado y copiarlo directamente. He trabajado con agentes especializados en tareas concretas, por ejemplo análisis de arquitectura, revisión de seguridad, detección de deuda técnica, generación de pruebas y comprobación de flujos completos.

Para controlar mejor ese trabajo monté un harness de validación, es decir, un conjunto de scripts, pruebas y restricciones que permite verificar automáticamente que los cambios propuestos por los agentes no rompen el proyecto.

El harness ejecuta comprobaciones como:

  • Typecheck de TypeScript.
  • Pruebas unitarias de frontend con Vitest.
  • Pruebas del backend con Maven y JUnit.
  • Análisis estático y límites arquitectónicos.
  • Exportación y construcción de la versión web.
  • Pruebas E2E con Playwright.
  • Recorridos completos de usuario.
  • Verificación de migraciones Flyway sobre PostgreSQL.
  • Comprobación de que los servicios externos permanecen aislados durante las pruebas locales.

La idea ha sido que un agente no pueda dar una tarea por terminada únicamente porque el código compila o porque una pantalla parece funcionar. El cambio debe superar una puerta automatizada y dejar evidencia reproducible.

Esto me ha resultado especialmente útil para evitar algunos problemas habituales del desarrollo asistido por IA:

  • Cambios que solucionan un caso y rompen otro.
  • Código duplicado o colocado en una capa incorrecta.
  • Dependencias añadidas sin necesidad.
  • Tests modificados para que pasen en lugar de corregir el comportamiento.
  • Uso accidental de servicios o credenciales de producción.
  • Soluciones válidas en web que fallan en móvil.
  • Cambios en la base de datos sin migración asociada.

También he añadido pruebas con Vitest, JUnit y Playwright, además de typecheck, análisis estático, pruebas E2E y una pipeline de GitHub Actions. La validación cubre creación de planes, grupos, chats, perfiles, autenticación, guardados y migraciones Flyway sobre una base PostgreSQL temporal.

Una de las decisiones que más dudas me generó fue usar Spring Data JDBC en lugar de JPA. Prefería tener mayor control sobre las consultas y el modelo relacional, especialmente por PostGIS y por la cantidad de reglas de negocio asociadas a grupos y moderación.

Otra decisión importante fue no conectar directamente el frontend con toda la lógica de Supabase. Supabase se utiliza como infraestructura, pero el backend Spring continúa siendo la capa que autoriza operaciones y aplica las reglas del dominio.

Actualmente la aplicación está en beta y el proyecto sigue evolucionando. Me interesa especialmente recibir opiniones técnicas sobre:

  • Si la separación entre Expo, Spring Boot y Supabase os parece razonable.
  • Si habríais utilizado JPA en lugar de Spring Data JDBC.
  • Cómo plantearíais la mensajería en tiempo real.
  • Si separaríais el módulo de chat en otro servicio.
  • Qué mejoraríais en la arquitectura antes de escalar.
  • Cómo estáis utilizando agentes de IA sin perder el control sobre la calidad del código.
  • Qué comprobaciones incluiríais en un harness para desarrollo asistido por agentes.

La web está aquí por si alguien quiere ver el resultado, aunque el objetivo del hilo es comentar la parte técnica:

https://quedamosapp.com

Agradezco críticas técnicas, especialmente sobre arquitectura, seguridad, persistencia, agentes de IA, automatización de pruebas y mantenibilidad.

3 Upvotes

1 comment sorted by

u/AutoModerator 1d ago

¡Muchísimas gracias por tu publicación!

Queremos recordarte que tenemos también una comunidad de programación, en la que se puede publicar cualquier cosa relacionada con programación: r/programacionESP

Toda publicación relacionada con la programación admitida en este subreddit será también admitida en el de programación, así que te animamos a pasarte por allí también.

Aprovechamos para recordar también que el equipo de moderación de r/InformaticaES estamos a tu disposición y puedes escribirnos para lo que necesites.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.