Volver a trabajos

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.

Sistema abstracto de transporte con rutas, horarios, CMS y capas de datos.

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

Payload CMSPostgreSQLGTFSBloques editorialesHorarios publicos

Tecnología

Un stack elegido por utilidad, no por decoración.

Payload CMS 3Next.js 15React 19PostgreSQLGTFSTypeScriptTailwind CSSshadcn/uiRadix UILexicalPayload SEOPayload SearchPayload RedirectsPayload FormsNested DocsLive PreviewNodemailerTurnstilenext-sitemapDocker

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

Próximo proyecto

Si tu web ya no representa lo que haces, es momento de rehacerla con intención.

Empezar conversación