@ -27,7 +27,7 @@ Taskbot ayuda a coordinar grupos en WhatsApp: crea y asigna tareas, recuerda pen
- No es un framework general de bots ni un CRM.
- No conecta directamente con WhatsApp: requiere Evolution API.
- No gestiona flujos conversacionales complejos ni multimedia avanzada.
- Panel web en progreso: login operativo y vista básica de tareas; la interacción principal sigue siendo WhatsApp.
- Panel web en progreso: login operativo, vista básica de tareas (por fecha de vencimiento) y de grupos (contadores "abiertas" y "sin responsable"); la interacción principal sigue siendo WhatsApp.
- Está optimizado para un despliegue por comunidad/instancia (no multi-tenant masivo).
## Cómo funciona (alto nivel)
@ -95,7 +95,7 @@ Consulta:
- Nombre provisional: “Taskbot”.
- Licencia por definir (software libre; se evaluará GPLv3/AGPL/MIT/Apache-2.0).
- Progreso Etapa 1 (autenticación web): completada. /login (GET intermedio + POST), sesión con idle 2h, logout y ruta /app protegida; desplegado con proxy interno en Bun.
- Primer MVP de lectura: endpoint /api/me/tasks y listado básico en /app.
- Lectura (MVP) en curso: endpoints GET /api/me/tasks (orden por fecha de vencimiento), /api/me/groups (con contadores) y /api/groups/:id/tasks; UI de Grupos en /app/groups.
- Roadmap y contribuciones: pendientes de publicación.
- 404 si métricas deshabilitadas; 405 si método no permitido.
- GET /health
- 200 siempre (proxy interno), útil para healthcheck del contenedor.
- APIs web (requieren sesión)
- GET /api/me/tasks?status=open&search=...
- Orden por fecha de vencimiento ascendente (NULL al final). Aplica gating por AllowedGroups + membresía activa (group_members). Soporta búsqueda simple por descripción.
- GET /api/me/groups
- Devuelve solo grupos permitidos donde el usuario está activo. Incluye counts.open y counts.unassigned por grupo.
- GET /api/groups/:id/tasks?unassignedFirst=true
- Requiere que el usuario sea miembro activo del grupo y que el grupo esté permitido. Orden por due_date (NULL al final), con opción de priorizar tareas sin responsable.
@ -7,7 +7,7 @@ Este documento define el plan para añadir una interfaz web al sistema, mantenie
- Arquitectura: dos procesos (apps/bot y apps/web) ejecutándose en la misma app de CapRover, con un proxy interno en Bun (puerto 3000) que enruta /webhook y /metrics al bot (3007) y el resto a la web (3008). SvelteKit para la web (SSR, rutas de API, cookies).
- Acceso: enlace mágico por DM con token de 10 minutos, de un solo uso. Sin “recordarme”.
- Sesión: cookie de sesión (HttpOnly, SameSite=Lax, Secure en prod) + expiración por inactividad de servidor de 2 horas.
- Orden por defecto: tareas por creación descendente (más recientes primero).
- Orden por defecto: tareas por fecha de vencimiento ascendente (NULL al final).
- ICS:
- Horizonte temporal: 12 meses.
- Excluir tareas sin fecha.
@ -18,7 +18,7 @@ Este documento define el plan para añadir una interfaz web al sistema, mantenie
## 2) Alcance funcional (MVP)
- Mis tareas: lista (orden creación desc), filtros (abiertas, vencen pronto), búsqueda por texto simple.
- Mis tareas: lista (orden por fecha de vencimiento asc), filtros (abiertas, vencen pronto), búsqueda por texto simple.
- Tareas de mis grupos: solo grupos permitidos y en los que el usuario está activo; sección destacada de “sin responsable”.
- Preferencias de recordatorios: ver y modificar frecuencia (daily/weekly/weekdays/off) y hora. Visualización de próximo recordatorio según TZ.
- Autenticación: comando /t web que devuelve URL con token. Canje en /login y cookie de sesión.
@ -187,10 +187,10 @@ Etapa 1 — Autenticación
- Web: endpoint /login (GET intermedio + POST canje), cookie de sesión, redirect limpio; hooks de sesión con idle timeout 2h; gate de JS; CSRF checkOrigin desactivado por proxy interno. — HECHO
- Páginas de error/expiración.
Etapa 2 — Lectura de datos (MVP) — EN PROGRESO (API /api/me/tasks y UI básica en /app listas)
Etapa 2 — Lectura de datos (MVP) — EN PROGRESO (implementados: GET /api/me/groups con contadores, GET /api/groups/:id/tasks, GET /api/me/preferences; /api/me/tasks ajustado con gating y orden por due_date).