Proyecto de gestión de tareas con backend en .NET 8 (Entity Framework Core, Dapper, procedimientos almacenados) y frontend en React.
TypeScript
0
539 commits
updated Nov 13, 2025
A modern, full-stack task management application built with .NET 9 and React.
🌐 Live Application: https://taskflow-app.azurewebsites.net
Enterprise-grade task management platform featuring a robust .NET 9 backend (Entity Framework Core, Dapper, Stored Procedures) and a modern React, TypeScript, Vite, and Material UI frontend.
🌐 Access the application: https://taskflow-app.azurewebsites.net
Navigate to frontend directory:
cd taskflow-frontend
Install dependencies:
npm install
Configure environment variables:
cp .env.example .env
Edit .env and set:
VITE_ROOT_URL=http://localhost:5149
VITE_GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
Getting Google Maps API Key:
Start development server:
npm run dev
Access at http://localhost:5173
Navigate to API directory:
cd TaskFlow.Api
Configure environment variables:
cp .env.example .env
Edit .env and configure your database, SMTP, and JWT settings.
Apply database migrations:
dotnet ef database update
Start the API:
dotnet run
API available at the port shown in console (typically https://localhost:5149)
The background email worker consumes queue messages and sends transactional emails.
npm install -g azurite) or connect to an Azure Storage accountnpx azurite --silent --location ./azurite --debug ./azurite/azurite.log
cd TaskFlow.Functions
cp local.settings.json.example local.settings.json
Update local.settings.json with your SQL Server connection string and SMTP credentials. Set Email__UseSmtp=true and Email__AllowSmtpInDevelopment=true only when you want to send real emails while running locally.func start
The worker listens to the email-queue queue and dispatches emails using your SMTP settings.Configure Hugging Face (default provider):
TaskFlow.Api/appsettings.Local.json (or environment variables) with:
"AI": {
"Provider": "huggingface",
"ApiKey": "hf_your_write_token",
"Model": "HuggingFaceTB/SmolLM3-3B",
"BaseUrl": "https://router.huggingface.co"
}
curl -H "Authorization: Bearer <token>" https://router.huggingface.co/v1/models
Optional: Enable Ollama fallback (offline use):
curl -fsSL https://ollama.com/install.sh | sh).ollama pull llama3.2
http://localhost:11434) and switch providers with AI__PROVIDER=ollama only when Hugging Face is unavailable.💡 Note: Without a valid Hugging Face token the assistant appears "Offline". Ollama support is kept solely for intentional offline or air-gapped deployments.
The easiest way to switch environments locally is to run the helper script:
scripts\use-env.ps1 <profile>
Profiles live in config/environments/*.ps1 (ignored by git — copy the corresponding *.ps1.example file and fill in your secret file paths). The script sets process-level variables and copies the config files listed in the profile.
.env.local via profile script)VITE_ROOT_URL — Backend API URL (e.g., http://localhost:5149)VITE_GOOGLE_MAPS_API_KEY — Google Maps API Key for geolocation features (optional but recommended)appsettings.Local.json via profile script)ConnectionStrings:DefaultConnection — SQL Server connection stringSmtp:Host — SMTP server host (e.g., smtp.gmail.com)Smtp:Port — SMTP port (e.g., 587)Smtp:User — SMTP usernameSmtp:Pass — SMTP password/app passwordSmtp:From — From email addressJwt:Key — JWT secret key (minimum 32 characters)AzureStorage:ConnectionString — Storage account / Azurite connection stringFrontend:Url — Base URL used for email linksTaskFlow.Functions/local.settings.json via profile script)AzureWebJobsStorage — Azure Storage connection string for queues (use UseDevelopmentStorage=true with Azurite)Email__UseSmtp — true to send real emails instead of dropping them locallyEmail__ForceSmtpFallback — set to true to bypass the queue and send via SMTP directly (e.g., if Azure Functions are down)Email__AllowSmtpInDevelopment — enable SMTP while the worker runs in development modeSmtp__* keys as the API — forwarded to the worker when sending mailConnectionStrings__DefaultConnection — reused so the worker can access the application database when needednpm run dev — Development servernpm run build — Production buildnpm run preview — Preview production buildnpm run lint — ESLintnpm run test — Run testsnpm run test:coverage — Test coveragedotnet run — Development server (ASPNETCORE_ENVIRONMENT provided by scripts\use-env.ps1 or launchSettings)dotnet run --launch-profile production — Local production mode (remembers applied profile variables)dotnet build — Build projectdotnet test — Run testsdotnet publish -c Release — Production build.\copy-frontend-to-wwwroot.ps1 — Build frontend and copy to wwwroot to serve from backend.\verify-deployment.ps1 — Verify deployment configuration (DB, SMTP, JWT, environment variables)TaskFlow is optimized for deployment to Azure with automated CI/CD via GitHub Actions.
Prerequisites:
Quick Start:
SMTP_USER, SMTP_PASSWORD, SMTP_FROM, JWT_KEY, DB_CONNECTION_STRING, GOOGLE_MAPS_API_KEYImportant SMTP Configuration:
📚 Complete Azure deployment guide: docs/DEPLOYMENT.md
Serve frontend and backend together for local testing in production mode.
Build and deploy frontend:
.\copy-frontend-to-wwwroot.ps1
Prepare the environment profile:
config/environments/azure.ps1.example to config/environments/azure.ps1 (or any name you prefer)Files entries to the secret files you keep under config/secrets/azure/scripts\use-env.ps1 azure to copy those files into TaskFlow.Api/appsettings.Local.json, TaskFlow.Functions/local.settings.json, and taskflow-frontend/.env.localApply migrations:
cd TaskFlow.Api
dotnet ef database update
Run in production mode:
dotnet run --launch-profile production
Access: http://localhost:5149
💡 Tip: Run
scripts\use-env.ps1 <profile>before launching the API so the right secrets are in place. For hot-reload development, keep separate terminals fornpm run dev(frontend) anddotnet run(backend).
For active development with hot-reload:
Build for production:
npm run build
Deploy the dist/ folder to your static file server (Nginx, Apache, IIS, etc.)
Configure your web server to serve index.html for all routes (SPA routing)
Publish the application:
dotnet publish -c Release -o ./publish
Deploy to your server (IIS, Linux with reverse proxy, etc.)
Configure environment variables in your production environment
Set up HTTPS and configure CORS for your frontend domain
src/components/app/ — Main app components and navigationsrc/components/auth-dialog/ — Authentication forms and dialogssrc/components/task-item/ — Task item display and managementsrc/components/task-list/ — Task listing and filteringsrc/components/category-manager/ — Category CRUD operationssrc/components/dashboard/ — Analytics and metricssrc/components/location/ — Location picker and map display for taskssrc/components/ai-assistant/ — AI chat interface and assistant featuressrc/contexts/ — React contexts (Auth, Notifications)src/services/ — API communication servicessrc/config/ — Centralized API configuration and endpointssrc/locales/ — Translation files (es/en)src/types/ — TypeScript type definitionsControllers/ — API endpointsServices/ — Business logic
Services/AIAssistant/ — AI provider implementations and assistant logicModels/ — Entity modelsDTOs/ — Data transfer objects
DTOs/AIAssistant/ — AI chat request/response DTOsMigrations/ — Entity Framework migrationsPOST /api/auth/register — User registrationPOST /api/auth/login — User loginPOST /api/auth/forgot-password — Password recoveryPOST /api/auth/resend-confirmation — Resend email confirmationGET /api/auth/me — Get current user infoGET /api/tasks — List user tasksPOST /api/tasks — Create new taskPUT /api/tasks/{id} — Update taskDELETE /api/tasks/{id} — Delete taskGET /api/categories — List user categoriesPOST /api/categories — Create new categoryPUT /api/categories/{id} — Update categoryDELETE /api/categories/{id} — Delete categoryPOST /api/ai-assistant/chat — Send message to AI assistant (requires authentication)GET /api/ai-assistant/status — Check configured AI provider availabilityTaskFlow includes an intelligent AI assistant powered by the Hugging Face router (with optional Ollama fallback) that helps you manage your tasks more effectively. The assistant can:
The AI assistant is context-aware, meaning it knows about your tasks, categories, and progress. It's also topic-restricted to only discuss task management and productivity topics related to TaskFlow.
For detailed documentation, see AI Assistant Documentation.
Plataforma profesional de gestión de tareas con un backend robusto en .NET 9 (Entity Framework Core, Dapper, Stored Procedures) y un frontend moderno en React, TypeScript, Vite y Material UI.
🌐 Acceder a la aplicación: https://taskflow-app.azurewebsites.net
Navegar al directorio del frontend:
cd taskflow-frontend
Instalar dependencias:
npm install
Configurar variables de entorno:
cp .env.example .env
Editá .env y configurá:
VITE_ROOT_URL=http://localhost:5149
VITE_GOOGLE_MAPS_API_KEY=tu_clave_api_google_maps_aqui
Obtener API Key de Google Maps:
Iniciar servidor de desarrollo:
npm run dev
Accede en http://localhost:5173
Navegar al directorio de la API:
cd TaskFlow.Api
Configurar variables de entorno:
cp .env.example .env
Editá .env y configurá tu base de datos, SMTP y JWT.
Aplicar migraciones de base de datos:
dotnet ef database update
Iniciar la API:
dotnet run
API disponible en el puerto mostrado en consola (típicamente https://localhost:5149)
El worker de segundo plano consume la cola email-queue y envía los correos transaccionales.
npm install -g azurite) o conectate a una cuenta de Azure Storagenpx azurite --silent --location ./azurite --debug ./azurite/azurite.log
cd TaskFlow.Functions
cp local.settings.json.example local.settings.json
Completá local.settings.json con tu cadena de conexión de SQL Server y credenciales SMTP. Activá Email__UseSmtp=true y Email__AllowSmtpInDevelopment=true solo cuando quieras enviar correos reales desde tu entorno local.func start
El worker escuchará la cola email-queue y despachará los correos usando tu configuración SMTP.Configurar Hugging Face (proveedor predeterminado):
TaskFlow.Api/appsettings.Local.json (o las variables de entorno) con:
"AI": {
"Provider": "huggingface",
"ApiKey": "hf_tu_token",
"Model": "HuggingFaceTB/SmolLM3-3B",
"BaseUrl": "https://router.huggingface.co"
}
curl -H "Authorization: Bearer <token>" https://router.huggingface.co/v1/models
Opcional: habilitar fallback en Ollama (modo sin conexión):
curl -fsSL https://ollama.com/install.sh | sh).ollama pull llama3.2
http://localhost:11434) y cambiá el proveedor con AI__PROVIDER=ollama únicamente cuando Hugging Face no sea viable.💡 Nota: Sin un token válido de Hugging Face el asistente se mostrará "Sin conexión". Ollama queda disponible solo para despliegues offline o aislados.
VITE_ROOT_URL — URL de la API del backend (ej., http://localhost:5149)VITE_GOOGLE_MAPS_API_KEY — API Key de Google Maps para funcionalidades de geolocalización (opcional pero recomendado)ConnectionStrings__DefaultConnection — Cadena de conexión de SQL ServerSmtp__Host — Host del servidor SMTP (ej., smtp.gmail.com)Smtp__Port — Puerto SMTP (ej., 587)Smtp__User — Usuario SMTPSmtp__Pass — Contraseña SMTP/contraseña de aplicación (usar App Password de Gmail, no contraseña normal)Smtp__From — Dirección de email remitenteJwt__Key — Clave secreta JWT (mínimo 32 caracteres)FRONTEND_URL — URL del frontend para links de confirmación de email (ej., http://localhost:5173 en desarrollo)TaskFlow.Functions/local.settings.json)AzureWebJobsStorage — Cadena de conexión de Azure Storage para las colas (usá UseDevelopmentStorage=true con Azurite)Email__UseSmtp — Ponelo en true para enviar correos reales en lugar de guardarlos localmenteEmail__ForceSmtpFallback — Ponelo en true para saltar la cola y enviar por SMTP directo (útil si Azure Functions está caído)Email__AllowSmtpInDevelopment — Permite SMTP mientras el worker corre en modo DevelopmentSmtp__* que la API — reutilizadas por el worker para enviar correosConnectionStrings__DefaultConnection — reutilizada si el worker necesita acceder a la base de datosnpm run dev — Servidor de desarrollonpm run build — Build de producciónnpm run preview — Previsualización del buildnpm run lint — ESLintnpm run test — Ejecutar testsnpm run test:coverage — Cobertura de testsdotnet run — Servidor de desarrollo (modo Development)dotnet run --launch-profile production — Servidor con configuración de produccióndotnet build — Compilar proyectodotnet test — Ejecutar testsdotnet publish -c Release — Build de producción.\copy-frontend-to-wwwroot.ps1 — Build del frontend y copia a wwwroot para servir desde backend.\verify-deployment.ps1 — Verificar configuración de deployment (DB, SMTP, JWT, variables de entorno)Esta opción sirve el frontend directamente desde el backend, ideal para testing local o deployment simple.
Ejecutar el script de deployment:
.\copy-frontend-to-wwwroot.ps1
Este script automáticamente:
npm install)npm run build)TaskFlow.Api/wwwroot/Verificar la configuración:
.\verify-deployment.ps1
Esto verificará:
Configurar variables de entorno en TaskFlow.Api/.env:
ConnectionStrings__DefaultConnection=Server=localhost\SQLEXPRESS;Database=TaskFlowDb;Trusted_Connection=True;TrustServerCertificate=True;
Smtp__Host=smtp.gmail.com
Smtp__Port=587
Smtp__User=tu-email@gmail.com
Smtp__Pass=tu-app-password # Usar App Password de Gmail, no contraseña regular
Smtp__From=tu-email@gmail.com
Jwt__Key=tu-clave-secreta-de-minimo-32-caracteres
FRONTEND_URL=http://localhost:5149
Importante sobre SMTP:
Aplicar migraciones:
cd TaskFlow.Api
dotnet ef database update
Iniciar el backend:
dotnet run --project TaskFlow.Api/TaskFlow.Api.csproj
Acceder a la aplicación: http://localhost:5149
El backend servirá tanto la API como el frontend desde el mismo puerto.
💡 Nota: Para deployment en producción con dominio real, seguir las instrucciones en
docs/DEPLOYMENT.md.
Para desarrollo activo con hot-reload:
Build para producción:
npm run build
Desplegar la carpeta dist/ en tu servidor de archivos estáticos (Nginx, Apache, IIS, etc.)
Configurar tu servidor web para servir index.html en todas las rutas (routing SPA)
Publicar la aplicación:
dotnet publish -c Release -o ./publish
Desplegar en tu servidor (IIS, Linux con reverse proxy, etc.)
Configurar variables de entorno en tu entorno de producción
Configurar HTTPS y CORS para tu dominio del frontend
src/components/app/ — Componentes principales de la app y navegaciónsrc/components/auth-dialog/ — Formularios y diálogos de autenticaciónsrc/components/task-item/ — Visualización y gestión de ítems de tareasrc/components/task-list/ — Listado y filtrado de tareassrc/components/category-manager/ — Operaciones CRUD de categoríassrc/components/dashboard/ — Analíticas y métricassrc/components/location/ — Selector de ubicación y visualización de mapas para tareassrc/components/ai-assistant/ — Interfaz de chat de IA y funciones del asistentesrc/contexts/ — Contextos de React (Auth, Notificaciones)src/services/ — Servicios de comunicación con APIsrc/config/ — Configuración centralizada de API y endpointssrc/locales/ — Archivos de traducción (es/en)src/types/ — Definiciones de tipos TypeScriptControllers/ — Endpoints de la APIServices/ — Lógica de negocioModels/ — Modelos de entidadDTOs/ — Objetos de transferencia de datosMigrations/ — Migraciones de Entity FrameworkPOST /api/auth/register — Registro de usuarioPOST /api/auth/login — Login de usuarioPOST /api/auth/forgot-password — Recuperación de contraseñaPOST /api/auth/resend-confirmation — Reenviar confirmación de emailGET /api/auth/me — Obtener información del usuario actualGET /api/tasks — Listar tareas del usuarioPOST /api/tasks — Crear nueva tareaPUT /api/tasks/{id} — Actualizar tareaDELETE /api/tasks/{id} — Eliminar tareaGET /api/categories — Listar categorías del usuarioPOST /api/categories — Crear nueva categoríaPUT /api/categories/{id} — Actualizar categoríaDELETE /api/categories/{id} — Eliminar categoríaPOST /api/ai-assistant/chat — Enviar mensaje al asistente de IA (requiere autenticación)GET /api/ai-assistant/status — Verificar disponibilidad de OllamaTaskFlow incluye un asistente de IA inteligente impulsado por Ollama que te ayuda a gestionar tus tareas de manera más efectiva. El asistente puede:
El asistente de IA es consciente del contexto, lo que significa que conoce tus tareas, categorías y progreso. También está restringido por tema para discutir solo gestión de tareas y temas de productividad relacionados con TaskFlow.
Para documentación detallada, ver Documentación del Asistente de IA.
TypeScript
69.1%
C#
15.9%
JavaScript
12.8%
PowerShell
2.0%
Proyecto de gestión de tareas con backend en .NET 8 (Entity Framework Core, Dapper, procedimientos almacenados) y frontend en React.
TypeScript
0
539 commits
updated Nov 13, 2025
A modern, full-stack task management application built with .NET 9 and React.
🌐 Live Application: https://taskflow-app.azurewebsites.net
Enterprise-grade task management platform featuring a robust .NET 9 backend (Entity Framework Core, Dapper, Stored Procedures) and a modern React, TypeScript, Vite, and Material UI frontend.
🌐 Access the application: https://taskflow-app.azurewebsites.net
Navigate to frontend directory:
cd taskflow-frontend
Install dependencies:
npm install
Configure environment variables:
cp .env.example .env
Edit .env and set:
VITE_ROOT_URL=http://localhost:5149
VITE_GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
Getting Google Maps API Key:
Start development server:
npm run dev
Access at http://localhost:5173
Navigate to API directory:
cd TaskFlow.Api
Configure environment variables:
cp .env.example .env
Edit .env and configure your database, SMTP, and JWT settings.
Apply database migrations:
dotnet ef database update
Start the API:
dotnet run
API available at the port shown in console (typically https://localhost:5149)
The background email worker consumes queue messages and sends transactional emails.
npm install -g azurite) or connect to an Azure Storage accountnpx azurite --silent --location ./azurite --debug ./azurite/azurite.log
cd TaskFlow.Functions
cp local.settings.json.example local.settings.json
Update local.settings.json with your SQL Server connection string and SMTP credentials. Set Email__UseSmtp=true and Email__AllowSmtpInDevelopment=true only when you want to send real emails while running locally.func start
The worker listens to the email-queue queue and dispatches emails using your SMTP settings.Configure Hugging Face (default provider):
TaskFlow.Api/appsettings.Local.json (or environment variables) with:
"AI": {
"Provider": "huggingface",
"ApiKey": "hf_your_write_token",
"Model": "HuggingFaceTB/SmolLM3-3B",
"BaseUrl": "https://router.huggingface.co"
}
curl -H "Authorization: Bearer <token>" https://router.huggingface.co/v1/models
Optional: Enable Ollama fallback (offline use):
curl -fsSL https://ollama.com/install.sh | sh).ollama pull llama3.2
http://localhost:11434) and switch providers with AI__PROVIDER=ollama only when Hugging Face is unavailable.💡 Note: Without a valid Hugging Face token the assistant appears "Offline". Ollama support is kept solely for intentional offline or air-gapped deployments.
The easiest way to switch environments locally is to run the helper script:
scripts\use-env.ps1 <profile>
Profiles live in config/environments/*.ps1 (ignored by git — copy the corresponding *.ps1.example file and fill in your secret file paths). The script sets process-level variables and copies the config files listed in the profile.
.env.local via profile script)VITE_ROOT_URL — Backend API URL (e.g., http://localhost:5149)VITE_GOOGLE_MAPS_API_KEY — Google Maps API Key for geolocation features (optional but recommended)appsettings.Local.json via profile script)ConnectionStrings:DefaultConnection — SQL Server connection stringSmtp:Host — SMTP server host (e.g., smtp.gmail.com)Smtp:Port — SMTP port (e.g., 587)Smtp:User — SMTP usernameSmtp:Pass — SMTP password/app passwordSmtp:From — From email addressJwt:Key — JWT secret key (minimum 32 characters)AzureStorage:ConnectionString — Storage account / Azurite connection stringFrontend:Url — Base URL used for email linksTaskFlow.Functions/local.settings.json via profile script)AzureWebJobsStorage — Azure Storage connection string for queues (use UseDevelopmentStorage=true with Azurite)Email__UseSmtp — true to send real emails instead of dropping them locallyEmail__ForceSmtpFallback — set to true to bypass the queue and send via SMTP directly (e.g., if Azure Functions are down)Email__AllowSmtpInDevelopment — enable SMTP while the worker runs in development modeSmtp__* keys as the API — forwarded to the worker when sending mailConnectionStrings__DefaultConnection — reused so the worker can access the application database when needednpm run dev — Development servernpm run build — Production buildnpm run preview — Preview production buildnpm run lint — ESLintnpm run test — Run testsnpm run test:coverage — Test coveragedotnet run — Development server (ASPNETCORE_ENVIRONMENT provided by scripts\use-env.ps1 or launchSettings)dotnet run --launch-profile production — Local production mode (remembers applied profile variables)dotnet build — Build projectdotnet test — Run testsdotnet publish -c Release — Production build.\copy-frontend-to-wwwroot.ps1 — Build frontend and copy to wwwroot to serve from backend.\verify-deployment.ps1 — Verify deployment configuration (DB, SMTP, JWT, environment variables)TaskFlow is optimized for deployment to Azure with automated CI/CD via GitHub Actions.
Prerequisites:
Quick Start:
SMTP_USER, SMTP_PASSWORD, SMTP_FROM, JWT_KEY, DB_CONNECTION_STRING, GOOGLE_MAPS_API_KEYImportant SMTP Configuration:
📚 Complete Azure deployment guide: docs/DEPLOYMENT.md
Serve frontend and backend together for local testing in production mode.
Build and deploy frontend:
.\copy-frontend-to-wwwroot.ps1
Prepare the environment profile:
config/environments/azure.ps1.example to config/environments/azure.ps1 (or any name you prefer)Files entries to the secret files you keep under config/secrets/azure/scripts\use-env.ps1 azure to copy those files into TaskFlow.Api/appsettings.Local.json, TaskFlow.Functions/local.settings.json, and taskflow-frontend/.env.localApply migrations:
cd TaskFlow.Api
dotnet ef database update
Run in production mode:
dotnet run --launch-profile production
Access: http://localhost:5149
💡 Tip: Run
scripts\use-env.ps1 <profile>before launching the API so the right secrets are in place. For hot-reload development, keep separate terminals fornpm run dev(frontend) anddotnet run(backend).
For active development with hot-reload:
Build for production:
npm run build
Deploy the dist/ folder to your static file server (Nginx, Apache, IIS, etc.)
Configure your web server to serve index.html for all routes (SPA routing)
Publish the application:
dotnet publish -c Release -o ./publish
Deploy to your server (IIS, Linux with reverse proxy, etc.)
Configure environment variables in your production environment
Set up HTTPS and configure CORS for your frontend domain
src/components/app/ — Main app components and navigationsrc/components/auth-dialog/ — Authentication forms and dialogssrc/components/task-item/ — Task item display and managementsrc/components/task-list/ — Task listing and filteringsrc/components/category-manager/ — Category CRUD operationssrc/components/dashboard/ — Analytics and metricssrc/components/location/ — Location picker and map display for taskssrc/components/ai-assistant/ — AI chat interface and assistant featuressrc/contexts/ — React contexts (Auth, Notifications)src/services/ — API communication servicessrc/config/ — Centralized API configuration and endpointssrc/locales/ — Translation files (es/en)src/types/ — TypeScript type definitionsControllers/ — API endpointsServices/ — Business logic
Services/AIAssistant/ — AI provider implementations and assistant logicModels/ — Entity modelsDTOs/ — Data transfer objects
DTOs/AIAssistant/ — AI chat request/response DTOsMigrations/ — Entity Framework migrationsPOST /api/auth/register — User registrationPOST /api/auth/login — User loginPOST /api/auth/forgot-password — Password recoveryPOST /api/auth/resend-confirmation — Resend email confirmationGET /api/auth/me — Get current user infoGET /api/tasks — List user tasksPOST /api/tasks — Create new taskPUT /api/tasks/{id} — Update taskDELETE /api/tasks/{id} — Delete taskGET /api/categories — List user categoriesPOST /api/categories — Create new categoryPUT /api/categories/{id} — Update categoryDELETE /api/categories/{id} — Delete categoryPOST /api/ai-assistant/chat — Send message to AI assistant (requires authentication)GET /api/ai-assistant/status — Check configured AI provider availabilityTaskFlow includes an intelligent AI assistant powered by the Hugging Face router (with optional Ollama fallback) that helps you manage your tasks more effectively. The assistant can:
The AI assistant is context-aware, meaning it knows about your tasks, categories, and progress. It's also topic-restricted to only discuss task management and productivity topics related to TaskFlow.
For detailed documentation, see AI Assistant Documentation.
Plataforma profesional de gestión de tareas con un backend robusto en .NET 9 (Entity Framework Core, Dapper, Stored Procedures) y un frontend moderno en React, TypeScript, Vite y Material UI.
🌐 Acceder a la aplicación: https://taskflow-app.azurewebsites.net
Navegar al directorio del frontend:
cd taskflow-frontend
Instalar dependencias:
npm install
Configurar variables de entorno:
cp .env.example .env
Editá .env y configurá:
VITE_ROOT_URL=http://localhost:5149
VITE_GOOGLE_MAPS_API_KEY=tu_clave_api_google_maps_aqui
Obtener API Key de Google Maps:
Iniciar servidor de desarrollo:
npm run dev
Accede en http://localhost:5173
Navegar al directorio de la API:
cd TaskFlow.Api
Configurar variables de entorno:
cp .env.example .env
Editá .env y configurá tu base de datos, SMTP y JWT.
Aplicar migraciones de base de datos:
dotnet ef database update
Iniciar la API:
dotnet run
API disponible en el puerto mostrado en consola (típicamente https://localhost:5149)
El worker de segundo plano consume la cola email-queue y envía los correos transaccionales.
npm install -g azurite) o conectate a una cuenta de Azure Storagenpx azurite --silent --location ./azurite --debug ./azurite/azurite.log
cd TaskFlow.Functions
cp local.settings.json.example local.settings.json
Completá local.settings.json con tu cadena de conexión de SQL Server y credenciales SMTP. Activá Email__UseSmtp=true y Email__AllowSmtpInDevelopment=true solo cuando quieras enviar correos reales desde tu entorno local.func start
El worker escuchará la cola email-queue y despachará los correos usando tu configuración SMTP.Configurar Hugging Face (proveedor predeterminado):
TaskFlow.Api/appsettings.Local.json (o las variables de entorno) con:
"AI": {
"Provider": "huggingface",
"ApiKey": "hf_tu_token",
"Model": "HuggingFaceTB/SmolLM3-3B",
"BaseUrl": "https://router.huggingface.co"
}
curl -H "Authorization: Bearer <token>" https://router.huggingface.co/v1/models
Opcional: habilitar fallback en Ollama (modo sin conexión):
curl -fsSL https://ollama.com/install.sh | sh).ollama pull llama3.2
http://localhost:11434) y cambiá el proveedor con AI__PROVIDER=ollama únicamente cuando Hugging Face no sea viable.💡 Nota: Sin un token válido de Hugging Face el asistente se mostrará "Sin conexión". Ollama queda disponible solo para despliegues offline o aislados.
VITE_ROOT_URL — URL de la API del backend (ej., http://localhost:5149)VITE_GOOGLE_MAPS_API_KEY — API Key de Google Maps para funcionalidades de geolocalización (opcional pero recomendado)ConnectionStrings__DefaultConnection — Cadena de conexión de SQL ServerSmtp__Host — Host del servidor SMTP (ej., smtp.gmail.com)Smtp__Port — Puerto SMTP (ej., 587)Smtp__User — Usuario SMTPSmtp__Pass — Contraseña SMTP/contraseña de aplicación (usar App Password de Gmail, no contraseña normal)Smtp__From — Dirección de email remitenteJwt__Key — Clave secreta JWT (mínimo 32 caracteres)FRONTEND_URL — URL del frontend para links de confirmación de email (ej., http://localhost:5173 en desarrollo)TaskFlow.Functions/local.settings.json)AzureWebJobsStorage — Cadena de conexión de Azure Storage para las colas (usá UseDevelopmentStorage=true con Azurite)Email__UseSmtp — Ponelo en true para enviar correos reales en lugar de guardarlos localmenteEmail__ForceSmtpFallback — Ponelo en true para saltar la cola y enviar por SMTP directo (útil si Azure Functions está caído)Email__AllowSmtpInDevelopment — Permite SMTP mientras el worker corre en modo DevelopmentSmtp__* que la API — reutilizadas por el worker para enviar correosConnectionStrings__DefaultConnection — reutilizada si el worker necesita acceder a la base de datosnpm run dev — Servidor de desarrollonpm run build — Build de producciónnpm run preview — Previsualización del buildnpm run lint — ESLintnpm run test — Ejecutar testsnpm run test:coverage — Cobertura de testsdotnet run — Servidor de desarrollo (modo Development)dotnet run --launch-profile production — Servidor con configuración de produccióndotnet build — Compilar proyectodotnet test — Ejecutar testsdotnet publish -c Release — Build de producción.\copy-frontend-to-wwwroot.ps1 — Build del frontend y copia a wwwroot para servir desde backend.\verify-deployment.ps1 — Verificar configuración de deployment (DB, SMTP, JWT, variables de entorno)Esta opción sirve el frontend directamente desde el backend, ideal para testing local o deployment simple.
Ejecutar el script de deployment:
.\copy-frontend-to-wwwroot.ps1
Este script automáticamente:
npm install)npm run build)TaskFlow.Api/wwwroot/Verificar la configuración:
.\verify-deployment.ps1
Esto verificará:
Configurar variables de entorno en TaskFlow.Api/.env:
ConnectionStrings__DefaultConnection=Server=localhost\SQLEXPRESS;Database=TaskFlowDb;Trusted_Connection=True;TrustServerCertificate=True;
Smtp__Host=smtp.gmail.com
Smtp__Port=587
Smtp__User=tu-email@gmail.com
Smtp__Pass=tu-app-password # Usar App Password de Gmail, no contraseña regular
Smtp__From=tu-email@gmail.com
Jwt__Key=tu-clave-secreta-de-minimo-32-caracteres
FRONTEND_URL=http://localhost:5149
Importante sobre SMTP:
Aplicar migraciones:
cd TaskFlow.Api
dotnet ef database update
Iniciar el backend:
dotnet run --project TaskFlow.Api/TaskFlow.Api.csproj
Acceder a la aplicación: http://localhost:5149
El backend servirá tanto la API como el frontend desde el mismo puerto.
💡 Nota: Para deployment en producción con dominio real, seguir las instrucciones en
docs/DEPLOYMENT.md.
Para desarrollo activo con hot-reload:
Build para producción:
npm run build
Desplegar la carpeta dist/ en tu servidor de archivos estáticos (Nginx, Apache, IIS, etc.)
Configurar tu servidor web para servir index.html en todas las rutas (routing SPA)
Publicar la aplicación:
dotnet publish -c Release -o ./publish
Desplegar en tu servidor (IIS, Linux con reverse proxy, etc.)
Configurar variables de entorno en tu entorno de producción
Configurar HTTPS y CORS para tu dominio del frontend
src/components/app/ — Componentes principales de la app y navegaciónsrc/components/auth-dialog/ — Formularios y diálogos de autenticaciónsrc/components/task-item/ — Visualización y gestión de ítems de tareasrc/components/task-list/ — Listado y filtrado de tareassrc/components/category-manager/ — Operaciones CRUD de categoríassrc/components/dashboard/ — Analíticas y métricassrc/components/location/ — Selector de ubicación y visualización de mapas para tareassrc/components/ai-assistant/ — Interfaz de chat de IA y funciones del asistentesrc/contexts/ — Contextos de React (Auth, Notificaciones)src/services/ — Servicios de comunicación con APIsrc/config/ — Configuración centralizada de API y endpointssrc/locales/ — Archivos de traducción (es/en)src/types/ — Definiciones de tipos TypeScriptControllers/ — Endpoints de la APIServices/ — Lógica de negocioModels/ — Modelos de entidadDTOs/ — Objetos de transferencia de datosMigrations/ — Migraciones de Entity FrameworkPOST /api/auth/register — Registro de usuarioPOST /api/auth/login — Login de usuarioPOST /api/auth/forgot-password — Recuperación de contraseñaPOST /api/auth/resend-confirmation — Reenviar confirmación de emailGET /api/auth/me — Obtener información del usuario actualGET /api/tasks — Listar tareas del usuarioPOST /api/tasks — Crear nueva tareaPUT /api/tasks/{id} — Actualizar tareaDELETE /api/tasks/{id} — Eliminar tareaGET /api/categories — Listar categorías del usuarioPOST /api/categories — Crear nueva categoríaPUT /api/categories/{id} — Actualizar categoríaDELETE /api/categories/{id} — Eliminar categoríaPOST /api/ai-assistant/chat — Enviar mensaje al asistente de IA (requiere autenticación)GET /api/ai-assistant/status — Verificar disponibilidad de OllamaTaskFlow incluye un asistente de IA inteligente impulsado por Ollama que te ayuda a gestionar tus tareas de manera más efectiva. El asistente puede:
El asistente de IA es consciente del contexto, lo que significa que conoce tus tareas, categorías y progreso. También está restringido por tema para discutir solo gestión de tareas y temas de productividad relacionados con TaskFlow.
Para documentación detallada, ver Documentación del Asistente de IA.
TypeScript
69.1%
C#
15.9%
JavaScript
12.8%
PowerShell
2.0%