4.7 KiB
DummyBot Backend
API REST y UI web para DummyBot — un bot físico de tareas para personas con TDAH, basado en ESP32 + ST7789 + caritas kawaii.
Stack: Laravel 12 · PHP 8.4 · MySQL 8 · Sanctum · Tailwind (CDN) + Alpine.js (CDN).
🚀 Setup rápido
# 1. Crear BD
mysql -u root -p
> CREATE DATABASE dummybot CHARACTER SET utf8mb4;
> CREATE USER 'dummybot'@'localhost' IDENTIFIED BY 'TU_PASSWORD';
> GRANT ALL ON dummybot.* TO 'dummybot'@'localhost';
# 2. Configurar
cp .env.example .env
# Edita DB_PASSWORD, APP_URL, etc.
# 3. Instalar + migrar
composer install --no-dev --optimize-autoloader
php artisan key:generate
php artisan migrate
# 4. Arrancar
php artisan serve --host=0.0.0.0 --port=8000
Abre http://localhost:8000/. Crea una cuenta, ve a Ajustes → Dispositivos y crea tu primer DummyBot para obtener un token.
🐳 Docker
AUTO_MIGRATE=1 docker compose up -d --build
Esto levanta dummybot_app (PHP-FPM), dummybot_web (nginx) y dummybot_db (MySQL 8). El puerto 80 queda interno (el proxy externo ya está gestionado en producción).
🧠 Modelo de datos
| Tabla | Descripción |
|---|---|
users |
Usuarios (auth vía Sanctum) |
tasks |
Tareas (title, description, priority, estimate_min, deadline, recurrence, done, snooze_until, done_at, project_id, user_id) |
projects |
Agrupa tareas (color + icono) |
tags |
Etiquetas transversales (muchas a muchas con tasks) |
devices |
Cada ESP32 con su propio token y last_seen_at |
🔌 API REST
Todas las rutas devuelven JSON. Auth vía Authorization: Bearer <token>.
Auth (web)
POST /api/auth/register {name, email, password, password_confirmation}
POST /api/auth/login {email, password}
POST /api/auth/logout (auth)
GET /api/auth/me (auth)
Tareas (web, con sesión o token Sanctum)
GET /api/tasks Listar (con project + tags)
POST /api/tasks Crear
PUT /api/tasks/{id} Editar
DELETE /api/tasks/{id} Borrar
POST /api/tasks/{id}/done Marcar como hecha (genera recurrente si aplica)
POST /api/tasks/{id}/snooze Posponer {minutes: N}
POST /api/tasks/{id}/restore Reabrir
GET /api/tasks/stats {pending, today, done_today, overdue, total_done}
Proyectos
GET /api/projects
POST /api/projects {name, color, icon}
PUT /api/projects/{id}
DELETE /api/projects/{id}
Tags
GET /api/tags
POST /api/tags {name, color}
DELETE /api/tags/{id}
Dispositivos (DummyBots)
GET /api/devices Tus DummyBots
POST /api/devices {name, hardware?, firmware_version?} → devuelve token (solo 1 vez)
POST /api/devices/{id}/rotate Invalida y crea nuevo token
DELETE /api/devices/{id}
Para el ESP32 (auth.device, con token del dispositivo)
GET /api/device/tasks/pending Polling cada 30s
POST /api/device/tasks Crear tarea (desde bot, ej. comandos)
POST /api/device/tasks/{id}/done
POST /api/device/tasks/{id}/snooze
DELETE /api/device/tasks/{id}
POST /api/device/heartbeat Ping (refresca last_seen_at)
🎨 Frontend (Blade + Alpine)
pages/home.blade.php— landingpages/login.blade.php/pages/register.blade.php— authpages/app.blade.php— app principal (lista tareas, filtros, atajos teclado)pages/settings.blade.php— gestión de dispositivos, proyectos, tags
Atajos de teclado (en /app)
n→ nueva tarea/→ buscadorEsc→ cerrar modal1/2/3/4→ filtro Todas / Pendientes / Hoy / Hechass→ snooze 5 min (sobre tarea enfocada)
TDAH-friendly
- Sin gamificación tóxica (sin puntos, sin streaks).
- No judgemental: "sin tareas" muestra un emoji festivo, no un mensaje triste.
- Dark mode por defecto con gradientes suaves.
- Atajos de teclado para no tener que tocar el ratón.
- Filtros contextuales (Hoy, Vencidas, Por proyecto) para evitar el agobio del "todo".
🔌 Webhooks (TODO)
Pendiente: hook de salida cuando se crea/marca una tarea. Pensado para integrarse con Notion, Zapier, n8n, etc.
📋 Importar / Exportar (TODO)
Endpoints para CSV/JSON de tareas.
🚀 Despliegue en producción
Ya está dockerizado. El repo está en https://git.anabolictrack.com/javiservices/dummybot.
# En el server
cd /root/dummybot
git pull
AUTO_MIGRATE=1 docker compose up -d --build
Para que el proxy-manager lo exponga en HTTPS, añadir host en http://157.180.77.232:81 apuntando al contenedor dummybot_web:80.
Licencia
MIT