# 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 ```bash # 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 ```bash 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 `. ### 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` — landing - `pages/login.blade.php` / `pages/register.blade.php` — auth - `pages/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 - `/` → buscador - `Esc` → cerrar modal - `1` / `2` / `3` / `4` → filtro Todas / Pendientes / Hoy / Hechas - `s` → 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`. ```bash # 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