Sistema completo de administración de proyectos y tareas con múltiples vistas, equipos con permisos, asistente de IA y reportes personalizados.
- Múltiples vistas — Kanban (drag & drop), Lista, Calendario
- Equipos y permisos — Roles: Owner, Admin, Miembro, Observador
- Asistente IA — Ayuda a crear, organizar y priorizar tareas (OpenAI)
- Reportes — Gráficos de estado, prioridad y tendencias
- Autenticación — Login/registro con Supabase Auth
- Frontend: React 19, TypeScript, Vite, Tailwind CSS v4
- Backend: Supabase (PostgreSQL, Auth, RLS)
- State: Zustand + React Query
- Drag & Drop: dnd-kit
- Charts: Recharts
- IA: OpenAI API (gpt-4o-mini)
- Ve a supabase.com y crea un proyecto
- En el SQL Editor, ejecuta el contenido de
supabase/migrations/001_initial_schema.sql
cp .env.example .envEdita .env con tus credenciales:
VITE_SUPABASE_URL— URL de tu proyecto SupabaseVITE_SUPABASE_ANON_KEY— Anon/public key de SupabaseVITE_OPENAI_API_KEY— (opcional) API key de OpenAI para el asistente IA
npm install
npm run devsrc/
├── components/
│ ├── ai/ — Asistente de IA
│ ├── auth/ — Login, registro, guard
│ ├── layout/ — Sidebar, header, layout
│ ├── projects/ — CRUD de proyectos
│ ├── reports/ — Dashboard de reportes
│ ├── tasks/ — CRUD de tareas
│ ├── teams/ — Gestión de equipos
│ ├── ui/ — Componentes reutilizables
│ └── views/ — Kanban, Lista, Calendario
├── hooks/ — Custom hooks (proyectos, tareas, equipos)
├── lib/ — Cliente Supabase
├── pages/ — Páginas principales
├── store/ — Estado global (Zustand)
└── types/ — Tipos TypeScript
| Acción | Owner | Admin | Miembro | Observador |
|---|---|---|---|---|
| Ver proyectos/tareas | ✅ | ✅ | ✅ | ✅ |
| Crear/editar tareas | ✅ | ✅ | ✅ | ❌ |
| Crear/editar proyectos | ✅ | ✅ | ✅ | ❌ |
| Eliminar proyectos/tareas | ✅ | ✅ | ❌ | ❌ |
| Gestionar miembros | ✅ | ✅ | ❌ | ❌ |
| Eliminar equipo | ✅ | ❌ | ❌ | ❌ |
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])