DaleFocus reduce la procrastinacion: toma una tarea difusa, detecta tu barrera emocional y la convierte en un plan accionable con IA + Pomodoro + metricas.
DaleFocus combina un atomizador IA que devuelve JSON estructurado, un loop de dopamina (accion -> sesion -> recompensa) y un dashboard con metricas de enfoque (Focus Index, Time-to-Action y Momentum) para pasar de "no se por donde empezar" a "ya avance" en minutos.
- Login: el usuario entra con Firebase Auth (email/password).
- Check-in emocional: selecciona su barrera (
overwhelmed,uncertain,bored,perfectionism). - Escribe tarea -> Atomizar:
atomizeTaskllama OpenAI y devuelve JSON con pasos. - Ejecuta pasos + Pomodoro: el usuario inicia foco con temporizador y registra sesion.
- Completa sesion -> recompensa:
completeSessionguarda la sesion ygenerateRewardpuede generar refuerzo motivacional. - Dashboard -> metricas:
getUserMetricsentrega Focus Index, TTA, Momentum y barreras.
Nota de estado actual: el flujo visual existe; la UI de login y el calculo real de metricas siguen en progreso (ver Docs/03_Metrics.md).
- Atomizador Core: salida JSON accionable, no texto largo.
- Flujo circular: accion pequena -> progreso visible -> motivacion -> siguiente accion.
- Analitica orientada a habitos: Focus Index, Time-to-Action, Momentum.
- Barreras emocionales como input estructural del plan, no solo como etiqueta.
[React + Vite + Tailwind]
|
| httpsCallable (Firebase SDK, auth automatica)
v
[Cloud Functions Gen2 - onCall (Callable)]
| atomizeTask / completeSession / generateReward / getUserMetrics
|
+--> [Cloud Firestore]
|
+--> [OpenAI Chat Completions]
users/{uid}: perfil del usuario, personalidad y config Pomodoro.tasks/{taskId}: tarea atomizada, barrera, estrategia y estado.steps/{stepId}: pasos atomizados por tarea.sessions/{sessionId}: sesiones Pomodoro completadas/interrumpidas.metrics/{userId}/daily/{date}: reservado por reglas; aun no persistido por funciones.
Detalle completo en Docs/02_DataModel.md.
- Firestore Rules: ownership por usuario (
request.auth.uid) parausers,tasks,steps,sessionsymetrics. - Callable Functions (
onCall): Firebase SDK valida automaticamente el token de auth. EluserIdse deriva derequest.auth.uiden el servidor (nunca enviado por el cliente). - Pendiente en backend: rate limiting y endurecer validaciones de negocio adicionales.
- Node.js 20+
- npm
- Firebase CLI (
npm i -g firebase-tools)
cd frontend
npm install
cp .env.example .env
# Completar VITE_FIREBASE_*
npm run devcd functions
npm install
cp .env.example .env
# OPENAI_API_KEY=...
npm run serve| Archivo | Variable | Requerida | Uso |
|---|---|---|---|
frontend/.env |
VITE_FIREBASE_API_KEY |
Si | Firebase Web SDK |
frontend/.env |
VITE_FIREBASE_AUTH_DOMAIN |
Si | Firebase Auth |
frontend/.env |
VITE_FIREBASE_PROJECT_ID |
Si | Firebase project |
frontend/.env |
VITE_FIREBASE_STORAGE_BUCKET |
Si | Firebase Storage config |
frontend/.env |
VITE_FIREBASE_MESSAGING_SENDER_ID |
Si | Firebase config |
frontend/.env |
VITE_FIREBASE_APP_ID |
Si | Firebase config |
functions/.env |
OPENAI_API_KEY |
Si | Llamadas OpenAI en atomizeTask y generateReward |
# Build frontend
cd frontend
npm run build
cd ..
# Deploy (hosting + functions + firestore)
firebase deploy --only hosting,functions,firestore:rules,firestore:indexes- Cualquier pantalla nueva debe usar UI primitives (
Button,Input,Card,Badge) del Design System v0. - Prohibido
red-*/green-*/blue-*/amber-*en código nuevo. Usar tokens semánticos. - Cambios de alto impacto (schema, auth, rules, DS tokens, contexts) requieren mini-RFC + aprobación del Owner antes de código.
- Flujo obligatorio: Brief → Plan → Approval Gate → Build → Audit → Close. Ver
AGENTS.mdyWORKFLOW.md.
- Cerrar login/register UI en frontend (AuthContext ya implementado).
- Implementar calculo real de metricas en
getUserMetrics. - Conectar
generateRewarden el timer para mostrar recompensa en tiempo real. - Agregar rate limiting por usuario para
atomizeTask.