CMS, PostgreSQL y datos GTFS
Flarrea Postgre
Flarrea Postgre transforma un sitio corporativo en una plataforma editable con datos de transporte vivos. El CMS gestiona paginas, avisos, medios, SEO y formularios, mientras PostgreSQL sostiene rutas, paradas, trayectos, horarios y metadatos importados desde GTFS.

Año
2026
Duración
Producto iterativo
Rango
Plataforma a medida de alcance medio-alto
Servicio
CMS avanzado con datos estructurados
Notas del caso
Qué había que resolver y cómo se dio forma.
Reto
El reto era unir dos mundos que normalmente viven separados: una web publica facil de editar y una capa tecnica de transporte con datos GTFS, sentidos, paradas, horarios especiales, mapas, tarifas y avisos.
Solución
Construí la plataforma sobre Payload CMS 3, Next.js 15, React 19 y PostgreSQL. Modele colecciones especificas para rutas, paradas y trayectos, cree importadores GTFS, incorpore bloques reutilizables y deje el admin preparado para contenido, preview, SEO, busqueda, formularios y revalidacion.
Resultado
Una base de producto donde el equipo puede editar contenido, publicar avisos, gestionar paginas y mostrar informacion real de transporte sin depender de estructuras estaticas.
Resultados
- CMS editorial con paginas, posts, avisos, medios, SEO, formularios y bloques reutilizables
- Modelo de datos PostgreSQL para rutas, paradas, trayectos, horarios, sentidos y fechas especiales
- Importacion GTFS, vista de horarios publica, mapas, tarifas CRTM, busqueda, redirects y live preview
Alcance
Tecnología
Un stack elegido por utilidad, no por decoración.
Mapa de capacidades
Cada capa que hace que este proyecto sea sustancial.
Plataforma CMS + transporte
El proyecto no es solo una web editable: mezcla contenido publico, datos tecnicos de transporte y una experiencia de administracion pensada para operacion diaria.
- Payload CMS 3 como panel central para paginas, posts, avisos, medios, formularios, SEO y navegacion
- Next.js App Router sirviendo la web publica y el admin en la misma aplicacion
- PostgreSQL como base estructurada para datos editoriales y datos de transporte
Arquitectura Payload 3
La configuracion de Payload fue adaptada a un cliente real, con branding, idiomas, preview, email, busqueda y comandos de productividad.
- Admin personalizado para Francisco Larrea con logos, metadatos, BeforeLogin y BeforeDashboard
- Idiomas es/en en el CMS, con espanol como fallback
- Live preview con breakpoints mobile, tablet y desktop para revisar contenido antes de publicar
Modelo de rutas
Las lineas se modelan como entidades editables con datos visuales, operativos y relaciones hacia paradas y trayectos.
- Coleccion Routes con lineCode, title, slug, colores, badgeTheme, mapas y nombres por sentido
- Soporte para lineas circulares donde la interfaz oculta ida/vuelta y muestra un unico flujo
- Schedules por dia, sentido, temporada, fechas especiales y salidas ordenadas
Paradas y geodatos
Las paradas no son texto plano: quedan como documentos reutilizables con codigo, municipio, categoria y coordenadas.
- Coleccion Stops con nombre, codigo, zona, externalStopId, descripcion, town, categoria, latitud y longitud
- Postes asociados para conservar detalles operativos de origen
- Campo raw para preservar informacion original importada y permitir auditoria de datos
Trayectos y patrones
El sistema separa la linea del recorrido concreto para poder representar variantes reales de servicio.
- Coleccion Trayects con ruta, sentido, nombre, codigo, notas, externalTripId, serviceId, shapeId y headsign
- Paradas de trayecto en orden con secuencia, origen, final y posteId
- Dedupe por patron de paradas para no crear un trayecto nuevo por cada viaje GTFS
Importacion GTFS
El importador convierte archivos GTFS en contenido relacional listo para Payload y PostgreSQL.
- Lectura de stops, routes, trips, stop_times, calendar y calendar_dates
- Parser CSV seguro para comillas, BOM y filas de transporte reales
- Upsert por campos estables para rutas y paradas, mas limpieza controlada antes de reimportar
Horarios agrupados
El sistema evita el problema clasico de crear un horario por viaje y agrupa salidas por clave operativa.
- Agrupacion por ruta, sentido, tipo regular/especial y combinacion de dias
- Salidas deduplicadas por hora y trayecto
- Soporte para fechas especiales importadas desde calendar_dates
Vista publica de horarios
La interfaz de horarios esta pensada para usuarios reales que quieren saber que bus viene, en que sentido y con que paradas.
- Componente RouteTimetableView con hora actual de Espana y calculo de proxima salida
- Selector de dias, temporadas, sentidos, solo proximas salidas y fusion inteligente de fines de semana
- Visualizacion de paradas del trayecto asociado a la proxima salida
Bloque editorial de horarios
Los horarios se integran en el layout builder como un bloque reutilizable que cualquier editor puede insertar.
- LineTimetableBlock conectado a la coleccion routes
- Opciones para mostrar tarjeta de proximo bus y mapa
- Render server-side que resuelve la ruta desde Payload antes de pintar la vista publica
Tarifas CRTM
La web incluye bloques especificos para contenido de transporte que va mas alla de textos y fotos.
- Bloque de tarifas con zonas, billete sencillo y bono de 10 viajes
- Formato de moneda EUR con Intl para consistencia local
- Tabla responsive preparada para contenido administrativo
Avisos y comunicacion publica
El cliente puede publicar avisos operativos con contenido rico, documentos y SEO propio.
- Coleccion Avisos con drafts, schedule publish, preview y revalidacion
- Contenido Lexical con banners, codigo, media blocks, hero image y PDF opcional
- URLs limpias con slug y metadata SEO por aviso
Bloques premium y layout builder
La parte editorial combina bloques nativos de Payload con secciones visuales especificas para una marca de transporte.
- Bloques Content, Media, CTA, Archive, Banner, Code, Contact, Download, Testimonial y Services
- Bloques custom Feature221 y Feature222 para secciones visuales de alto impacto
- RenderBlocks centralizado para componer paginas sin tocar codigo
SEO, busqueda y redirects
La plataforma tiene herramientas reales para crecimiento, mantenimiento y migraciones de URLs.
- Payload SEO plugin con campos de titulo, descripcion, imagen, overview y preview
- Payload Search con beforeSync y overrides para indexar contenido relevante
- Payload Redirects con revalidacion y next-sitemap para sitemaps generados tras build
Formularios protegidos
Los formularios se construyen desde el CMS y no quedan expuestos a spam basico.
- Payload Form Builder con campos personalizados y sin pagos
- Validacion Cloudflare Turnstile antes de guardar submissions
- Envio por email con Nodemailer y configuracion SMTP
Medios y experiencia editorial
El admin esta preparado para trabajar con imagenes reales sin degradar la experiencia publica.
- Media collection con sizes, focal point, uploads y reutilizacion en bloques
- Blur data URLs para placeholders visuales mas suaves
- Image search plugin disponible para usuarios autenticados
Migrations, Docker y produccion
El proyecto esta preparado para evolucionar con PostgreSQL sin depender de cambios manuales frágiles.
- Migrations Payload/PostgreSQL versionadas para cambios de esquema
- Dockerfile, docker-compose y nixpacks para entornos de despliegue
- Scripts de tipos, importmap, build, start, GTFS import y sitemap postbuild