Sistema de seguimiento nutricional que permite a los clientes registrar sus comidas y a los nutricionistas monitorear y comentar el progreso de sus pacientes.
- Docker Desktop instalado
- Git
-
Clona el repositorio:
git clone <repository-url> cd NutriTracker
-
Configura las variables de entorno:
cp .env.example .env
-
Levanta todos los servicios:
docker compose up -d
-
Ejecuta las migraciones de base de datos:
docker compose --profile setup run migrate
-
Accede a la aplicación:
- Web App: http://localhost:3000
- Base de datos: localhost:5432
- PGAdmin (opcional): http://localhost:5050
Nutricionistas:
nutritionist@nutritracker.com/nutritest123
Clientes:
client@nutritracker.com/clienttest123test@nutritracker.com/testpass123
La aplicación incluye los siguientes servicios:
- app: Aplicación Node.js (Express + React)
- postgres: Base de datos PostgreSQL 16
- redis: Cache para sesiones (puerto 6380)
- migrate: Servicio para ejecutar migraciones
- pgadmin: Interfaz gráfica para la base de datos (opcional)
# Ver logs de la aplicación
docker compose logs -f app
# Reiniciar un servicio específico
docker compose restart app
# Acceder al contenedor de la aplicación
docker compose exec app sh
# Ejecutar comandos en la base de datos
docker compose exec postgres psql -U nutritracker -d nutritracker_db
# Parar todos los servicios
docker compose down
# Resetear base de datos (elimina volúmenes)
docker compose down -v && docker compose up -dSi prefieres ejecutar sin Docker:
-
Instala dependencias:
npm install
-
Configura la base de datos:
- Instala PostgreSQL y Redis localmente
- Actualiza
DATABASE_URLyREDIS_URLen.env
-
Ejecuta migraciones:
npm run db:push
-
Inicia la aplicación:
npm run dev
Frontend:
- React 18 con TypeScript
- Vite para bundling
- TailwindCSS para estilos
- Radix UI para componentes
- Wouter para routing
- TanStack Query para estado
Backend:
- Express.js con TypeScript
- Drizzle ORM para base de datos
- Passport.js para autenticación
- Express Session para manejo de sesiones
Base de Datos:
- PostgreSQL 16
- Redis para sesiones
├── client/ # Frontend React
│ ├── src/
│ │ ├── components/ # Componentes reutilizables
│ │ ├── pages/ # Páginas de la aplicación
│ │ ├── hooks/ # Custom hooks
│ │ └── lib/ # Utilidades
├── server/ # Backend Express
│ ├── auth.ts # Configuración de autenticación
│ ├── db.ts # Configuración de base de datos
│ ├── routes.ts # Rutas de la API
│ └── storage.ts # Capa de acceso a datos
├── shared/ # Código compartido
│ └── schema.ts # Esquemas de base de datos
├── scripts/ # Scripts de inicialización
└── docker-compose.yml # Configuración de Docker
- ✅ Registro y login
- ✅ Registro de comidas diarias
- ✅ Seguimiento de agua consumida
- ✅ Visualización de comentarios del nutricionista
- ✅ Vista semanal de comidas
- ✅ Seguimiento de actividad física
- ✅ Integración con apps de salud (simulada)
- ✅ Dashboard con resumen de clientes
- ✅ Gestión de clientes asignados
- ✅ Comentarios en comidas de clientes
- ✅ Creación de planes de comidas semanales
- ✅ Vista de progreso de clientes
- ✅ Sistema de invitaciones
# Base de datos
DATABASE_URL=postgresql://nutritracker:nutritracker_pass@localhost:5432/nutritracker_db
# Redis
REDIS_URL=redis://localhost:6380
# Sesiones
SESSION_SECRET=your-secret-key-here
# Email (SendGrid)
SENDGRID_API_KEY=your-sendgrid-key
# PGAdmin (opcional)
PGADMIN_EMAIL=admin@nutritracker.com
PGADMIN_PASSWORD=adminEl proyecto usa Drizzle Kit con modo push para desarrollo rápido:
# Aplicar cambios del esquema
npm run db:push
# Generar migraciones tradicionales (opcional)
npx drizzle-kit generate --name migration_namePOST /api/register- Registro de clientePOST /api/register/nutritionist- Registro de nutricionistaPOST /api/login- LoginPOST /api/logout- LogoutGET /api/user- Usuario actual
GET /api/meals- Obtener comidasPOST /api/meals- Crear comidaPUT /api/meals/:id- Actualizar comidaDELETE /api/meals/:id- Eliminar comida
POST /api/comments- Crear comentarioGET /api/meals/:id/comments- Obtener comentarios
GET /api/activities- Obtener actividadesPOST /api/activities- Crear actividadGET /api/exercise-types- Tipos de ejercicio
Si el puerto 3000 está ocupado:
# Cambiar puerto en docker-compose.yml
ports:
- "3001:5000" # Usar puerto 3001# Resetear completamente
docker compose down -v
docker compose up -d
docker compose --profile setup run migrate# Ver todos los logs
docker compose logs
# Ver logs específicos
docker compose logs app
docker compose logs postgres- Fork el proyecto
- Crea una rama feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- Guía Completa de Docker - Documentación detallada de Docker
- API Reference - Documentación completa de la API
- Database Schema - Esquema de base de datos