Skip to content

camammoli/split

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Split — Dividí los gastos

→ Probalo en mammoli.ar/split

Herramienta web para dividir gastos en grupo — sin registrarse, sin instalar nada. Funciona en el celular, se comparte por WhatsApp y se puede instalar como app.


Por qué existe

Splitwise y Tricount son buenos, pero piden cuenta, instalar una app y a veces pagar. Este lo abrís, cargás los nombres y en 10 segundos estás dividiendo la cuenta del restorán.

Qué hace

  • Sin registro — solo el link. Compartilo por WhatsApp y listo.
  • Sesiones permanentes — la sesión vive en el servidor; quien tenga el link puede volver cuando quiera.
  • División inteligente — partes iguales, entre algunos, o montos custom por persona.
  • Minimización de deudas — calcula la menor cantidad de transferencias para saldar todo.
  • QR en la mesa — para compartir al instante sin tipear la URL.
  • Instalable como app — PWA: funciona desde la pantalla de inicio como app nativa.

Cómo usarlo

  1. Abrí mammoli.ar/split
  2. Escribí un nombre para el grupo y los participantes separados por coma
  3. Cargá los gastos: quién pagó, cuánto, entre quiénes
  4. El balance y las transferencias se calculan solos
  5. Compartí el link por WhatsApp para que todos lo vean

Stack

  • PHP 7.4+ — lógica de servidor, creación de sesiones, API REST
  • SQLite (via PDO) — base de datos embebida, sin servidor de BD externo
  • Vanilla JS — sin frameworks, sin dependencias externas
  • PWA — manifest + service worker para instalación como app

Auto-hospedaje

Requisitos

  • PHP 7.4+ con extensiones pdo_sqlite y gd
  • HTTPS (requerido para PWA)
  • Directorio con permisos de escritura para la base de datos

Instalación

git clone https://github.com/camammoli/split.git
cp -r split/web/ /var/www/html/split/
chmod 755 /var/www/html/split/data/

Listo. La base de datos SQLite se crea automáticamente en web/data/split.db con el primer uso.

Estructura

web/
├── index.php      # UI principal (landing + sesión)
├── api.php        # API JSON (7 endpoints)
├── db.php         # Esquema SQLite + algoritmo de deudas
├── manifest.json  # PWA manifest
├── sw.js          # Service worker (passthrough)
├── icon.php       # Genera ícono PNG dinámicamente con GD
├── .htaccess      # Bloquea acceso a archivos .db
└── data/
    ├── .htaccess  # Bloquea acceso al directorio
    └── split.db   # Base de datos (se crea automáticamente)

Algoritmo de minimización de deudas

El problema de dividir gastos tiene una solución óptima que minimiza la cantidad de transferencias necesarias para saldar todo el grupo.

El algoritmo:

  1. Calcular el balance neto de cada persona: pagado - adeudado
  2. Separar en acreedores (balance positivo) y deudores (balance negativo)
  3. Emparejar greedily el mayor deudor con el mayor acreedor
  4. La transferencia es min(deuda, crédito), reducir ambos
  5. Repetir hasta saldar todos

Esto garantiza el mínimo número de transacciones posible.

Ejemplo:

Juan pagó $3.000 de una cuenta de $9.000 entre 3 personas
María pagó $6.000

Balance neto:
  Juan:  +3.000 - 3.000 = $0
  María: +6.000 - 3.000 = +$3.000  ← acreedor
  Pedro:  $0    - 3.000 = -$3.000  ← deudor

Transferencia: Pedro → María $3.000

Capacidad

Cada sesión típica (5 personas, 10 gastos) ocupa ~10 KB en disco. Con 1 GB disponible: ~100.000 sesiones. Para uso real, prácticamente ilimitado.

Las sesiones no expiran automáticamente. Para instalaciones con mucho uso, se recomienda implementar un script de limpieza periódica de sesiones inactivas.

Licencia

MIT — hacé lo que quieras, si te sirvió invitame un café. ☕

About

Dividí los gastos en grupo · Sin registro · Link compartible · PWA

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors