Agenda de equipo para organizar el trabajo por proyectos: crea un equipo, asigna tareas a sus miembros, sigue su estado en un tablero y registra las horas dedicadas a cada proyecto. Gratuita, con cuentas propias e inicio de sesión con Google, autoalojada en un VPS.
El plan de trabajo completo y el roadmap por fases está en PLAN.md.
- Equipos — cada espacio de trabajo es un equipo con sus miembros y roles
(
OWNER/ADMIN/MEMBER/GUEST); invitación por email. - Proyectos — agrupan las tareas y las horas; cada uno con su color.
- Tareas — asignar responsable, prioridad y fecha límite; estado en tres fases (Por hacer / En curso / Hecha). Tres vistas por proyecto: tablero (kanban), lista (edición en línea) y calendario (por fecha límite). Detalle de tarea con descripción y comentarios.
- Mi agenda — vista transversal de tus tareas pendientes, agrupadas en Vencidas / Hoy / Esta semana / Más adelante / Sin fecha.
- Registro de horas — hoja semanal por proyecto y día, con totales por día, por proyecto y de la semana.
- Cronómetro — siempre ligado a un proyecto y una tarea concreta (pendiente o en curso; si estaba pendiente pasa a En curso al arrancar). Widget flotante con pausa, avance rápido y botón de cámara que lleva a las evidencias de la tarea, donde se pega una captura del portapapeles, se arrastran archivos y se escribe el avance con enlaces y menciones. Las sesiones de menos de 10 minutos no cuentan como horas (se avisa y el avance sí se conserva). Mientras se documenta, el reloj se pausa o cuenta la mitad, según lo que decida el manager al crear el proyecto (afinable tarea por tarea).
- Next.js 16 (App Router) + React 19 + TypeScript
- PostgreSQL + Prisma 7 (con driver adapter
@prisma/adapter-pg) - Tailwind CSS v4 + shadcn/ui
- Auth.js (NextAuth v5) — Google OAuth y email/contraseña
- Redis (presencia/caché) y MinIO (almacenamiento de archivos S3) en local
- Calidad: ESLint + Prettier + Husky + lint-staged
- Node.js 22+ (probado con Node 26)
- Docker (para la base de datos, Redis y MinIO en local)
# 1. Instalar dependencias
npm install
# 2. Crear el archivo .env (mínimo: DATABASE_URL y AUTH_SECRET; ver más abajo)
# 3. Levantar la infraestructura local (Postgres, Redis, MinIO)
docker compose up -d
# 4. Aplicar las migraciones de la base de datos
npm run db:migrate
# 5. Arrancar la app
npm run devAbre http://localhost:3000.
npm run db:seed crea el espacio Qubi Demo con contenido en todas las
pantallas y dos cuentas listas para usar (las credenciales se muestran en el
login):
| Cuenta | Correo | Rol |
|---|---|---|
| Manager | invitado.admin@qubi.local |
OWNER (admin) |
| Trabajador | invitado.miembro@qubi.local |
MEMBER |
Contraseña de ambas: QubiDemo2026!. El seed es idempotente y solo toca ese
espacio, así que se puede repetir sin miedo — también en producción
(ver DEPLOY-VPS.md).
Mínimo para arrancar (coincide con docker-compose.yml):
DATABASE_URL="postgresql://qubi:qubi_dev_password@localhost:5433/qubi?schema=public"
AUTH_SECRET="genera-uno-con: openssl rand -base64 32"Opcionales: AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRET (login con Google) y las S3_*
(MinIO, para subir archivos). El listado completo está en
.env.production.example.
Postgres se expone en el puerto 5433 del host (para no chocar con otros Postgres locales). La consola de MinIO está en http://localhost:9001 (usuario/clave:
qubi/qubi_dev_password).
| Script | Descripción |
|---|---|
npm run dev |
Servidor de desarrollo |
npm run build |
Build de producción |
npm run start |
Servir el build |
npm run lint |
ESLint |
npm run format |
Formatear con Prettier |
npm run typecheck |
Comprobar tipos (tsc) |
npm run db:migrate |
Crear/aplicar migraciones |
npm run db:generate |
Generar el cliente de Prisma |
npm run db:seed |
Espacio de demo + cuentas de invitado |
npm run db:studio |
Abrir Prisma Studio |
npm test |
Tests (Vitest) |
src/
├─ app/ # Rutas (App Router): w/[workspaceId]/{projects,tasks,agenda,hours,...}
├─ components/ # UI (shadcn + propios)
├─ features/ # Lógica por dominio: project, task, time, workspace, chat, ...
├─ lib/ # db (prisma), auth, storage, utils
├─ server/ # Server actions y servicios (por dominio)
└─ generated/ # Cliente Prisma (generado, no se commitea)
prisma/ # schema.prisma y migraciones
docker-compose.yml