vereinsheim — Software libre para clubes de tiro deportivo: Ringwerk + Treffsicher
Software libre autocontenido para clubes de tiro deportivo alemán. Dos apps web en un único VPS: Ringwerk (gestión de competiciones y ligas) y Treffsicher (diario de entrenamiento con mental training). Single-VPS deploy con Docker, Caddy HTTPS automático, PostgreSQL compartido con aislamiento lógico. MVP completo desde septiembre 2026.
¿Qué es vereinsheim?
Software libre autocontenido para clubes de tiro deportivo (Schützenvereine) en Alemania y países hispanohablantes. Plataforma monolítica que ejecuta dos aplicaciones web lado a lado sobre un único servidor VPS, garantizando que los datos de los miembros nunca salen del servidor local.
vereinsheim representa una solución integral para clubes de tiro deportivo que buscan mantener el control total sobre sus datos mientras ofrecen funcionalidades profesionales de gestión deportiva. La arquitectura monolítica simplifica significativamente las operaciones de mantenimiento y backup, reduciendo la complejidad técnica para administradores de sistemas con conocimientos básicos de Docker.
Aplicaciones incluidas
- Ringwerk: Gestión de competiciones y ligas — disciplinas, participantes, matchups, playoffs, tablas de clasificación, sistemas de puntuación configurables por disciplina con factores correctivos, importación de PDFs desde Meyton (impresión electrónica de objetivos). Ringwerk soporta múltiples formatos de competición incluyendo liga regular, eventos puntuales y temporadas completas. El sistema permite configurar diferentes disciplinas de tiro deportivo con sus respectivos sistemas de puntuación oficiales.
- Treffsicher: Diario de entrenamiento individual — sesiones, series, reflexiones post-sesión, goals personales, tracking de bienestar físico (sueño, energía, estrés) para monitorizar el rendimiento mental. Treffsicher incluye herramientas de análisis de progreso a largo plazo y visualización de tendencias en el rendimiento del atleta.
Casos de uso
- Organizar torneos y ligas competitivas con múltiples formatos (liga, evento, temporada)
- Gestionar competiciones con tablas, playoffs y sistemas de puntuación configurables
- Registrar sesiones de entrenamiento para shooters individuales
- Monitorear el bienestar mental mediante seguimiento de sueño, energía y estrés
- Generar reportes públicos en formato PDF sobre resultados y estadísticas
- Importar datos de Meyton (PDF y URL) para importar objetivos impresos electrónicamente
- Analizar tendencias de rendimiento a largo plazo con visualización gráfica
- Gestionar múltiples disciplinas deportivas simultáneamente
Arquitectura técnica
Linux/Unix con Docker. Stack tecnológico: Next.js 16 · Turborepo · TypeScript · TailwindCSS · Prisma ORM · PostgreSQL. Ambas aplicaciones comparten un único contenedor PostgreSQL con bases de datos separadas y usuarios aislados para Ringwerk y Treffsicher.
MVP completo — 2026-09-23 — 🟢 bereit für VPS-Provisioning.
La arquitectura utiliza Turborepo como monorepo tooling para gestionar dependencias compartidas entre ambas aplicaciones. Next.js 16 proporciona el framework principal con optimizaciones de rendimiento y soporte para Server Components. TypeScript asegura tipado estático completo, reduciendo errores en producción. TailwindCSS facilita el desarrollo de interfaces consistentes y responsivas.
Instalación y despliegue
Requisitos del sistema
- VPS con Linux (Ubuntu 22.04 LTS o Debian 12 recomendado)
- Docker Engine 24.0+ instalado y configurado
- SSH con clave pública para acceso remoto seguro
- Let's Encrypt para certificados TLS automáticos
- Al menos 2GB de RAM disponible para PostgreSQL
- 10GB+ de espacio en disco para datos y backups
Scripts de despliegue
El repositorio incluye scripts operativos validados localmente:
bootstrap-vps.sh: Script principal de provisionamiento — instala Docker, configura UFW (puertos 22/80/443), crea usuario deploy con SSH-key, clona el repo en~deploy/vereinsheim, provisiona/var/backups/vereinsheimcon owner deploy.db-init: Inicializa bases de datos PostgreSQL separadas para cada aplicación con esquemas aislados.Caddyfile: Configuración de reverse proxy con HTTPS automático vía Let's Encrypt y renovación automática de certificados.scripts/vereinsheim: CLI interactiva para releases desde la máquina local —$ {YELLOW}vereinsheim release$ {RESET}.compose.yml: Definición principal del stack de producción con Docker Compose.compose.local.yml: Override file para configuración local de desarrollo.
Docker Compose
El proyecto utiliza Docker Compose para orquestación. Ambos servicios (Ringwerk y Treffsicher) comparten un único contenedor PostgreSQL con aislamiento lógico mediante esquemas separados. La configuración incluye:
- Contenedor PostgreSQL compartido con volumen persistente
- Contenedores de aplicación aislados por servicio
- Red Docker interna para comunicación segura entre servicios
- Volumes para persistencia de datos y backups automáticos
Configuración de red
- Caddy como reverse proxy principal con HTTPS automático
- Puertos: 80 (HTTP), 443 (HTTPS), 22 (SSH)
- Dominio configurado en Caddyfile con Let's Encrypt TLS automático
- Configuración de headers de seguridad (HSTS, CSP, X-Frame-Options)
- SSL/TLS con cifrado moderno (TLS 1.3, cipher suites seguros)
Seguridad
- Base de datos PostgreSQL compartida pero aislada por usuario/schema
- Caddy con HTTPS automático y renovación de certificados
- UFW configurado para puertos esenciales (22/80/443)
- Usuario deploy separado sin acceso root
- Licencia Apache-2.0 — código abierto auditado
- Variables de entorno en archivos .env separados por ambiente
- Secrets gestionados mediante ask_secret() en CLI
- Validación de inputs con Prisma ORM para prevenir inyecciones SQL
Actualización y backup
El repositorio incluye scripts de operaciones para mantenimiento rutinario. Backups automáticos en /var/backups/vereinsheim. Para actualizar: clonar nueva versión del repo, ejecutar db-init para migraciones, reiniciar servicios Docker.
Comandos de backup
vereinsheim backup: Crea backup manual completovereinsheim deploy: Pre-Backup automático antes de cada desplieguevereinsheim restore: Restauración interactiva desde backup
Comandos de mantenimiento
vereinsheim status: Estado de servicios, volumes y backupsvereinsheim logs: Logs de servicios con seguimiento en tiempo realvereinsheim migrations: Estado de migraciones de base de datos
Ventajas
- Arquitectura monolítica simplifica backups y operaciones
- Datos locales — privacidad garantizada (ningún dato sale del VPS)
- HTTPS automático con Let's Encrypt
- Integración nativa con Meyton (estándar en clubes alemanes)
- Tracking de bienestar mental único en su tipo
- Single-VPS deploy reduce costos de infraestructura
- Scripts CLI interactivos para operaciones complejas
- Aislamiento lógico de datos entre aplicaciones
- Soporte para múltiples disciplinas deportivas
Limitaciones
- Diseñado principalmente para clubes en Alemania — interfaz en alemán, sin soporte nativo multilenguaje
- Arquitectura monolítica puede ser ineficiente a gran escala con miles de usuarios simultáneos
- Sin autenticación social ni integración con plataformas externas (ShotLink, Shootlink)
- Sistema de puntuación requiere configuración manual por disciplina sin validación automática de rangos
- Importación de PDFs de Meyton depende de acceso a la API de Meyton
- No incluye dashboard administrativo unificado para ambas aplicaciones
- Requiere conocimientos básicos de Docker y PostgreSQL para mantenimiento
Alternativas reales
Meyton (solución comercial para clubes alemanes), ShotLink (estándar internacional pero requiere integración compleja), Shootlink (alternativa con costos recurrentes). vereinsheim se posiciona como alternativa open-source que ofrece funcionalidades similares sin costos de licencia mensuales.