Surmai: Organizador de viajes personal y familiar

Publicado por


Open Source

Surmai: Organizador de viajes personal y familiar

Aplicación web progresiva para planificación colaborativa de viajes con acceso offline y privacidad de datos

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Surmai: Organizador de viajes personal y familiar en el canal GENBYTE:

¿Qué es Surmai: Organizador de viajes personal y familiar?

Surmai es un organizador de viajes personal y familiar diseñado para resolver tres desafíos principales en la planificación de viajes: permitir la planificación colaborativa entre varias personas, facilitar el acceso a todos los artefactos necesarios durante el viaje (confirmaciones, reservas, itinerarios) y mantener los datos privados. La aplicación está en una fase alpha muy temprana y en desarrollo activo.

Surmai combina una interfaz React con Mantine, backend PocketBase en Go y capacidades PWA para funcionar offline, todo empaquetado en una imagen Docker multi-arquitectura con replicación de base de datos vía Litestream.

Características principales

Organización centralizada

Reúne en un solo lugar toda la información del viaje: itinerarios, reservas, confirmaciones y notas.

Colaboración multiusuario

Permite que varias personas planifiquen juntas el viaje, dividiendo tareas como compra de vuelos o reservas de restaurantes.

Acceso offline

Funciona como Progressive Web App (PWA), instalable en móviles y accesible sin conexión a internet.

Privacidad de datos

Los datos permanecen en tu infraestructura; no hay servicios de terceros que accedan a la información del viaje.

Interfaz móvil adaptable

Diseño responsive y optimizado para uso en dispositivos móviles durante el viaje.

Internacionalización

Soporte multiidioma mediante react-i18next y Weblate para contribuciones de traducción.

Requisitos del sistema

  • Docker y Docker Compose
  • Arquitectura compatible: linux/amd64, linux/arm64 (multi-platform build)
  • Puerto 8080 disponible para la aplicación
  • Volumen persistente para datos de PocketBase y replicación Litestream

Instalación con Docker Compose

Clonar el repositorio

Descarga el código fuente desde GitHub.

git clone https://github.com/rohitkumbhar/surmai.git
cd surmai

Configurar variables de entorno

Copia el archivo de ejemplo y ajusta según tu entorno (dominio, claves, configuración de correo, etc.).

cp .env.example .env # si existe; de lo contrario crea .env con las variables necesarias

Levantar con Docker Compose

Usa el archivo docker-compose.yaml del proyecto para construir y arrancar los servicios (frontend, backend PocketBase, Litestream).

docker compose up -d –build

Verificar despliegue

La aplicación quedará accesible en el puerto 8080 del host.

curl -I http://localhost:8080

Acceder al proyecto

Acceso local

Una vez levantado el stack, abre http://localhost:8080 en el navegador.

Demo oficial

Disponible en https://demo.surmai.app/ con credenciales de prueba: email [email protected], contraseña vi#c8Euuf16idhbG (el sitio se limpia cada hora).

Instalación como PWA

Desde el navegador móvil (Chrome/Edge) usa la opción 'Instalar aplicación' para añadir Surmai a la pantalla de inicio y usarlo offline.

Casos de uso

  • Planificación de viajes familiares con reparto de tareas entre los miembros.
  • Gestión de itinerarios complejos con múltiples destinos, vuelos, alojamientos y actividades.
  • Acceso a confirmaciones y documentos del viaje en zonas sin cobertura de datos.
  • Colaboración remota entre compañeros de viaje que residen en distintas ubicaciones.
  • Autohospedaje para mantener control total sobre los datos personales de viaje.

Configuración avanzada

Panel de administración PocketBase

Accede a la interfaz de administración de PocketBase (normalmente en /_/) para gestionar colecciones, usuarios, reglas de acceso y configuración avanzada no expuesta en la UI de Surmai.

# Accede a http://tu-dominio/_/ tras iniciar sesión como administrador

Replicación y backups con Litestream

Litestream replica la base de datos SQLite de PocketBase a almacenamiento remoto (S3, GCS, Azure, SFTP, etc.). Configura el destino en litestream.yaml.

# Ejemplo de configuración en litestream.yaml
dbs:
– path: /pb/pb_data/data.db
replicas:
– type: s3
bucket: mi-bucket
path: surmai-backups
region: us-east-1

Traducciones y localización

Contribuye o gestiona traducciones a través de Weblate. El proyecto usa i18next-scanner para extraer cadenas.

# Sincronizar claves de traducción
pnpm run sync-translations
# Contribuir en https://hosted.weblate.org/projects/surmai/frontend/

Desarrollo local con hot-reload

Usa docker-compose.dev.yaml para montar código fuente y habilitar recarga en caliente tanto en frontend (Vite) como en backend (Go).

docker compose -f docker-compose.dev.yaml up –build

Gestión y mantenimiento

Actualizar imagen

Descarga los últimos cambios y reconstruye los contenedores.

git pull
docker compose up -d –build

Backup manual de la base de datos

Copia el archivo SQLite desde el volumen persistente o usa la réplica Litestream.

docker cp surmai-container:/pb/pb_data/data.db ./backup-$(date +%F).db

Logs de la aplicación

Consulta los logs del contenedor principal para diagnosticar problemas.

docker compose logs -f surmai

Migraciones de PocketBase

PocketBase aplica migraciones automáticamente al iniciar. Revisa la carpeta backend/pb_migrations para cambios de esquema.

ls -la backend/pb_migrations/

Stack técnico

  • TypeScript
  • React 19
  • Vite
  • Mantine UI
  • PocketBase (Go)
  • SQLite
  • Litestream
  • Docker multi-stage build
  • PWA (Workbox)
  • react-i18next
  • TanStack Query
  • Leaflet / React-Leaflet
  • TipTap editor
  • pnpm
  • Vitest / Playwright

Referencias oficiales

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *