diff --git a/.env.sample b/.env.sample
deleted file mode 100644
index be94b57e..00000000
--- a/.env.sample
+++ /dev/null
@@ -1,531 +0,0 @@
-# ================================================================
-# BAKERY FORECASTING PLATFORM - ENVIRONMENT CONFIGURATION
-# Single source of truth - no duplication with docker-compose.yml
-# ================================================================
-
-# ================================================================
-# ENVIRONMENT & BUILD SETTINGS
-# ================================================================
-
-# Environment: development, staging, production, testing
-ENVIRONMENT=development
-DEBUG=true
-LOG_LEVEL=INFO
-
-# Build configuration
-BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
-VCS_REF=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
-IMAGE_TAG=latest
-DOMAIN=localhost
-
-# ================================================================
-# SERVICE PORTS (used by Docker Compose)
-# ================================================================
-
-# Core services
-GATEWAY_PORT=8000
-AUTH_SERVICE_PORT=8001
-TRAINING_SERVICE_PORT=8002
-FORECASTING_SERVICE_PORT=8003
-DATA_SERVICE_PORT=8004
-TENANT_SERVICE_PORT=8005
-NOTIFICATION_SERVICE_PORT=8006
-
-# Frontend
-DASHBOARD_PORT=3000
-MARKETING_PORT=3001
-
-# Infrastructure
-REDIS_PORT=6379
-RABBITMQ_PORT=5672
-RABBITMQ_MANAGEMENT_PORT=15672
-
-# Monitoring
-PROMETHEUS_PORT=9090
-GRAFANA_PORT=3002
-
-# Development tools
-PGADMIN_PORT=5050
-REDIS_COMMANDER_PORT=8081
-
-# ================================================================
-# CORE SERVICE SETTINGS (used by applications)
-# ================================================================
-
-# Application metadata
-SERVICE_VERSION=1.0.0
-TIMEZONE=Europe/Madrid
-LOCALE=es_ES.UTF-8
-CURRENCY=EUR
-
-# ================================================================
-# DATABASE CONFIGURATION
-# ================================================================
-
-# PostgreSQL common settings
-POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=es_ES.UTF-8 --lc-ctype=es_ES.UTF-8
-
-# Auth Database
-AUTH_DB_NAME=auth_db
-AUTH_DB_USER=auth_user
-AUTH_DB_PASSWORD=auth_pass123
-AUTH_DATABASE_URL=postgresql+asyncpg://auth_user:auth_pass123@auth-db:5432/auth_db
-
-# Training Database
-TRAINING_DB_NAME=training_db
-TRAINING_DB_USER=training_user
-TRAINING_DB_PASSWORD=training_pass123
-TRAINING_DATABASE_URL=postgresql+asyncpg://training_user:training_pass123@training-db:5432/training_db
-
-# Forecasting Database
-FORECASTING_DB_NAME=forecasting_db
-FORECASTING_DB_USER=forecasting_user
-FORECASTING_DB_PASSWORD=forecasting_pass123
-FORECASTING_DATABASE_URL=postgresql+asyncpg://forecasting_user:forecasting_pass123@forecasting-db:5432/forecasting_db
-
-# Data Database
-DATA_DB_NAME=data_db
-DATA_DB_USER=data_user
-DATA_DB_PASSWORD=data_pass123
-DATA_DATABASE_URL=postgresql+asyncpg://data_user:data_pass123@data-db:5432/data_db
-
-# Tenant Database
-TENANT_DB_NAME=tenant_db
-TENANT_DB_USER=tenant_user
-TENANT_DB_PASSWORD=tenant_pass123
-TENANT_DATABASE_URL=postgresql+asyncpg://tenant_user:tenant_pass123@tenant-db:5432/tenant_db
-
-# Notification Database
-NOTIFICATION_DB_NAME=notification_db
-NOTIFICATION_DB_USER=notification_user
-NOTIFICATION_DB_PASSWORD=notification_pass123
-NOTIFICATION_DATABASE_URL=postgresql+asyncpg://notification_user:notification_pass123@notification-db:5432/notification_db
-
-# ================================================================
-# REDIS CONFIGURATION
-# ================================================================
-
-REDIS_PASSWORD=redis_pass123
-REDIS_MAX_MEMORY=512mb
-REDIS_URL=redis://:redis_pass123@redis:6379
-REDIS_MAX_CONNECTIONS=50
-
-# Redis Database Assignments (used by standardized config)
-# 0 - Auth Service
-# 1 - Training Service
-# 2 - Forecasting Service
-# 3 - Data Service
-# 4 - Tenant Service
-# 5 - Notification Service
-# 6 - Gateway Service
-
-# ================================================================
-# RABBITMQ CONFIGURATION
-# ================================================================
-
-RABBITMQ_USER=bakery
-RABBITMQ_PASSWORD=forecast123
-RABBITMQ_VHOST=/
-RABBITMQ_ERLANG_COOKIE=bakery-secret-cookie-change-in-production
-RABBITMQ_URL=amqp://bakery:forecast123@rabbitmq:5672/
-RABBITMQ_EXCHANGE=bakery_events
-RABBITMQ_QUEUE_PREFIX=bakery
-
-# ================================================================
-# AUTHENTICATION & SECURITY
-# ================================================================
-
-# JWT Configuration (CHANGE IN PRODUCTION!)
-JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production-min-32-characters-long
-JWT_ALGORITHM=HS256
-JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
-JWT_REFRESH_TOKEN_EXPIRE_DAYS=7
-
-# Service-to-Service Authentication
-SERVICE_API_KEY=service-api-key-change-in-production
-ENABLE_SERVICE_AUTH=false
-
-# Password Requirements
-PASSWORD_MIN_LENGTH=8
-PASSWORD_REQUIRE_UPPERCASE=true
-PASSWORD_REQUIRE_LOWERCASE=true
-PASSWORD_REQUIRE_NUMBERS=true
-PASSWORD_REQUIRE_SYMBOLS=false
-
-# Security Settings
-BCRYPT_ROUNDS=12
-MAX_LOGIN_ATTEMPTS=5
-LOCKOUT_DURATION_MINUTES=30
-
-# ================================================================
-# CORS & API CONFIGURATION
-# ================================================================
-
-CORS_ORIGINS=http://localhost:3000,http://localhost:3001,http://127.0.0.1:3000,https://panaderia.vercel.app
-CORS_ALLOW_CREDENTIALS=true
-
-# Rate Limiting
-RATE_LIMIT_ENABLED=true
-RATE_LIMIT_REQUESTS=100
-RATE_LIMIT_WINDOW=60
-RATE_LIMIT_BURST=10
-
-# API Documentation
-API_DOCS_ENABLED=true
-
-# ================================================================
-# SERVICE DISCOVERY URLS (used by standardized config)
-# ================================================================
-
-GATEWAY_URL=http://gateway:8000
-AUTH_SERVICE_URL=http://auth-service:8000
-TENANT_SERVICE_URL=http://tenant-service:8000
-TRAINING_SERVICE_URL=http://training-service:8000
-FORECASTING_SERVICE_URL=http://forecasting-service:8000
-DATA_SERVICE_URL=http://data-service:8000
-NOTIFICATION_SERVICE_URL=http://notification-service:8000
-
-# HTTP Client Settings
-HTTP_TIMEOUT=30
-HTTP_RETRIES=3
-HTTP_RETRY_DELAY=1.0
-
-# ================================================================
-# EXTERNAL APIS
-# ================================================================
-
-# Spanish Weather Service (AEMET)
-AEMET_API_KEY=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1YWxmYXJvQGdtYWlsLmNvbSIsImp0aSI6ImRjZWVmNTEwLTdmYzEtNGMxNy1hODZkLWQ4NzdlZDc5ZDllNyIsImlzcyI6IkFFTUVUIiwiaWF0IjoxNzUyODMwMDg3LCJ1c2VySWQiOiJkY2VlZjUxMC03ZmMxLTRjMTctYTg2ZC1kODc3ZWQ3OWQ5ZTciLCJyb2xlIjoiIn0.C047gaiEhWhH4ItDgkHSwg8HzKTzw87TOPRTRf8j-2w
-AEMET_BASE_URL=https://opendata.aemet.es/opendata
-AEMET_TIMEOUT=30
-AEMET_RETRY_ATTEMPTS=3
-
-# Madrid Open Data Platform
-MADRID_OPENDATA_API_KEY=your-madrid-opendata-key-here
-MADRID_OPENDATA_BASE_URL=https://datos.madrid.es
-MADRID_OPENDATA_TIMEOUT=30
-
-# ================================================================
-# EMAIL CONFIGURATION
-# ================================================================
-
-SMTP_HOST=smtp.gmail.com
-SMTP_PORT=587
-SMTP_USER=your-email@gmail.com
-SMTP_PASSWORD=your-app-specific-password
-SMTP_TLS=true
-SMTP_SSL=false
-DEFAULT_FROM_EMAIL=noreply@bakeryforecast.es
-DEFAULT_FROM_NAME=Bakery Forecast
-
-# ================================================================
-# WHATSAPP/TWILIO CONFIGURATION
-# ================================================================
-
-WHATSAPP_API_KEY=your-whatsapp-api-key-here
-WHATSAPP_BASE_URL=https://api.twilio.com
-WHATSAPP_FROM_NUMBER=whatsapp:+14155238886
-
-# ================================================================
-# ML & AI CONFIGURATION
-# ================================================================
-
-# Model Storage
-MODEL_STORAGE_PATH=/app/models
-MODEL_STORAGE_BACKEND=local
-MODEL_BACKUP_ENABLED=true
-MODEL_VERSIONING_ENABLED=true
-
-# Training Configuration
-MAX_TRAINING_TIME_MINUTES=30
-MAX_CONCURRENT_TRAINING_JOBS=3
-MIN_TRAINING_DATA_DAYS=30
-TRAINING_BATCH_SIZE=1000
-
-# Resource Limits (used by Docker Compose)
-TRAINING_MEMORY_LIMIT=2G
-TRAINING_CPU_LIMIT=1.5
-
-# Prophet Configuration
-PROPHET_SEASONALITY_MODE=additive
-PROPHET_CHANGEPOINT_PRIOR_SCALE=0.05
-PROPHET_SEASONALITY_PRIOR_SCALE=10.0
-PROPHET_HOLIDAYS_PRIOR_SCALE=10.0
-
-# Prediction Caching
-PREDICTION_CACHE_TTL_HOURS=6
-WEATHER_CACHE_TTL_HOURS=1
-TRAFFIC_CACHE_TTL_HOURS=1
-
-# ================================================================
-# BUSINESS CONFIGURATION
-# ================================================================
-
-# Forecasting Limits
-MAX_FORECAST_DAYS=30
-MIN_HISTORICAL_DAYS=60
-PREDICTION_CONFIDENCE_THRESHOLD=0.8
-
-# Spanish Business Context
-BUSINESS_HOUR_START=7
-BUSINESS_HOUR_END=20
-
-# Spanish Holidays & Seasonal Adjustments
-ENABLE_SPANISH_HOLIDAYS=true
-ENABLE_MADRID_HOLIDAYS=true
-SCHOOL_CALENDAR_ENABLED=true
-
-# Weather Impact Modeling
-WEATHER_IMPACT_ENABLED=true
-TEMPERATURE_THRESHOLD_COLD=10.0
-TEMPERATURE_THRESHOLD_HOT=30.0
-RAIN_IMPACT_FACTOR=0.7
-
-# Business Adjustments
-WEEKEND_ADJUSTMENT_FACTOR=0.8
-HOLIDAY_ADJUSTMENT_FACTOR=0.5
-
-# ================================================================
-# TENANT & SUBSCRIPTION CONFIGURATION
-# ================================================================
-
-# Default Settings
-DEFAULT_PLAN=basic
-TRIAL_PERIOD_DAYS=14
-
-# Plan Limits
-BASIC_PLAN_LOCATIONS=1
-BASIC_PLAN_PREDICTIONS_PER_DAY=100
-BASIC_PLAN_DATA_RETENTION_DAYS=90
-
-PREMIUM_PLAN_LOCATIONS=5
-PREMIUM_PLAN_PREDICTIONS_PER_DAY=1000
-PREMIUM_PLAN_DATA_RETENTION_DAYS=365
-
-ENTERPRISE_PLAN_LOCATIONS=50
-ENTERPRISE_PLAN_PREDICTIONS_PER_DAY=10000
-ENTERPRISE_PLAN_DATA_RETENTION_DAYS=1095
-
-# Billing (disabled by default)
-BILLING_ENABLED=false
-BILLING_CURRENCY=EUR
-BILLING_CYCLE_DAYS=30
-SPANISH_TAX_RATE=0.21
-
-# Resource Limits
-MAX_API_CALLS_PER_MINUTE=100
-MAX_STORAGE_MB=1024
-MAX_CONCURRENT_REQUESTS=10
-
-# ================================================================
-# MONITORING & OBSERVABILITY
-# ================================================================
-
-# Logging Configuration
-LOG_FORMAT=json
-LOG_FILE_ENABLED=false
-LOG_FILE_PATH=/app/logs
-LOG_ROTATION_SIZE=100MB
-LOG_RETENTION_DAYS=30
-
-# Metrics & Monitoring
-PROMETHEUS_ENABLED=true
-PROMETHEUS_RETENTION=200h
-
-# Health Checks
-HEALTH_CHECK_TIMEOUT=30
-HEALTH_CHECK_INTERVAL=30
-
-# Grafana Configuration
-GRAFANA_ADMIN_USER=admin
-GRAFANA_ADMIN_PASSWORD=admin123
-GRAFANA_SECRET_KEY=grafana-secret-key-change-in-production
-GRAFANA_ROOT_URL=http://localhost:3002/
-
-# ================================================================
-# DATA RETENTION & CLEANUP
-# ================================================================
-
-DATA_RETENTION_DAYS=365
-METRIC_RETENTION_DAYS=90
-TEMP_FILE_CLEANUP_HOURS=24
-
-# Service-specific Data Retention
-AUTH_DATA_RETENTION_DAYS=365
-RAW_DATA_RETENTION_DAYS=90
-PROCESSED_DATA_RETENTION_DAYS=365
-
-# ================================================================
-# DEVELOPMENT & TESTING
-# ================================================================
-
-# Development Features
-AUTO_RELOAD=false
-PROFILING_ENABLED=false
-MOCK_EXTERNAL_APIS=false
-
-# Testing Configuration
-TESTING=false
-TEST_DATABASE_URL=postgresql+asyncpg://test_user:test_pass@test-db:5432/test_db
-
-# Data Collection Intervals
-WEATHER_COLLECTION_INTERVAL_HOURS=1
-TRAFFIC_COLLECTION_INTERVAL_HOURS=1
-EVENTS_COLLECTION_INTERVAL_HOURS=6
-
-# Data Quality
-DATA_VALIDATION_ENABLED=true
-OUTLIER_DETECTION_ENABLED=true
-DATA_COMPLETENESS_THRESHOLD=0.8
-
-# Geolocation (Madrid, Spain)
-DEFAULT_LATITUDE=40.4168
-DEFAULT_LONGITUDE=-3.7038
-LOCATION_RADIUS_KM=50.0
-
-# ================================================================
-# NOTIFICATION CONFIGURATION
-# ================================================================
-
-# Notification Types
-ENABLE_EMAIL_NOTIFICATIONS=true
-ENABLE_WHATSAPP_NOTIFICATIONS=true
-ENABLE_PUSH_NOTIFICATIONS=false
-
-# Notification Queuing
-MAX_RETRY_ATTEMPTS=3
-RETRY_DELAY_SECONDS=60
-NOTIFICATION_BATCH_SIZE=100
-
-# Rate Limiting
-EMAIL_RATE_LIMIT_PER_HOUR=1000
-WHATSAPP_RATE_LIMIT_PER_HOUR=100
-
-# Localization
-DEFAULT_LANGUAGE=es
-DATE_FORMAT=%d/%m/%Y
-TIME_FORMAT=%H:%M
-
-# Templates
-EMAIL_TEMPLATES_PATH=/app/templates/email
-WHATSAPP_TEMPLATES_PATH=/app/templates/whatsapp
-
-# Delivery & Analytics
-IMMEDIATE_DELIVERY=true
-SCHEDULED_DELIVERY_ENABLED=true
-DELIVERY_TRACKING_ENABLED=true
-OPEN_TRACKING_ENABLED=true
-CLICK_TRACKING_ENABLED=true
-
-# ================================================================
-# FRONTEND CONFIGURATION
-# ================================================================
-
-# Frontend URLs (used by Docker Compose build args)
-FRONTEND_API_URL=http://localhost:8000/api/v1
-FRONTEND_WS_URL=ws://localhost:8000/ws
-
-# ================================================================
-# DEVELOPMENT TOOLS CONFIGURATION
-# ================================================================
-
-# pgAdmin
-PGADMIN_EMAIL=admin@bakery.local
-PGADMIN_PASSWORD=admin123
-
-# Redis Commander
-REDIS_COMMANDER_USER=admin
-REDIS_COMMANDER_PASSWORD=admin123
-
-# ================================================================
-# COMPLIANCE & GDPR
-# ================================================================
-
-# GDPR Compliance
-GDPR_COMPLIANCE_ENABLED=true
-CONSENT_REQUIRED=true
-DATA_EXPORT_ENABLED=true
-DATA_DELETION_ENABLED=true
-PRIVACY_POLICY_URL=/privacy
-
-# Email Verification
-EMAIL_VERIFICATION_REQUIRED=true
-EMAIL_VERIFICATION_EXPIRE_HOURS=24
-
-# Account Security
-ACCOUNT_LOCKOUT_ENABLED=true
-PASSWORD_HISTORY_COUNT=5
-SESSION_TIMEOUT_MINUTES=60
-CONCURRENT_SESSIONS_LIMIT=3
-
-# ================================================================
-# PERFORMANCE & OPTIMIZATION
-# ================================================================
-
-# Caching
-REALTIME_FORECASTING_ENABLED=true
-FORECAST_UPDATE_INTERVAL_HOURS=6
-
-# Batch Processing
-BATCH_PROCESSING_ENABLED=true
-BATCH_SIZE=1000
-PARALLEL_PROCESSING_WORKERS=4
-FORECAST_BATCH_SIZE=100
-
-# Circuit Breaker (Gateway)
-CIRCUIT_BREAKER_ENABLED=true
-CIRCUIT_BREAKER_FAILURE_THRESHOLD=5
-CIRCUIT_BREAKER_RECOVERY_TIMEOUT=60
-
-# Load Balancing (Gateway)
-ENABLE_LOAD_BALANCING=true
-LOAD_BALANCER_ALGORITHM=round_robin
-
-# Request Limits
-MAX_REQUEST_SIZE=10485760
-REQUEST_TIMEOUT=30
-
-# ================================================================
-# BUSINESS INTELLIGENCE & ALERTS
-# ================================================================
-
-# Alert Thresholds
-HIGH_DEMAND_THRESHOLD=1.5
-LOW_DEMAND_THRESHOLD=0.5
-STOCKOUT_RISK_THRESHOLD=0.9
-
-# Model Validation
-CROSS_VALIDATION_ENABLED=true
-VALIDATION_SPLIT_RATIO=0.2
-MIN_MODEL_ACCURACY=0.7
-
-# Data Processing
-DATA_PREPROCESSING_ENABLED=true
-SEASONAL_DECOMPOSITION_ENABLED=true
-
-# Distributed Training (Future scaling)
-DISTRIBUTED_TRAINING_ENABLED=false
-TRAINING_WORKER_COUNT=1
-
-# Support & Contact
-SUPPORT_EMAIL=soporte@bakeryforecast.es
-INVOICE_LANGUAGE=es
-
-# ================================================================
-# NOTES FOR CONFIGURATION MANAGEMENT
-# ================================================================
-
-# This .env file is the SINGLE SOURCE OF TRUTH for all configuration.
-# Docker Compose uses these variables via ${VARIABLE_NAME} substitution.
-# Application services load these via env_file: .env in docker-compose.yml
-# No duplication between .env and docker-compose.yml environment sections.
-
-# To override for different environments:
-# 1. Copy this file: cp .env .env.production
-# 2. Modify values in .env.production
-# 3. Use: docker-compose --env-file .env.production up -d
-
-# For sensitive values in production:
-# 1. Use Docker secrets or external secret management
-# 2. Override via environment variables: REDIS_PASSWORD=secret docker-compose up
-# 3. Use .env.local (gitignored) for local overrides
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 36bacf2e..0d71335a 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -27,8 +27,6 @@ volumes:
grafana_data:
model_storage:
log_storage:
- nominatim_db_data:
- nominatim_data:
# ================================================================
@@ -592,9 +590,9 @@ services:
context: ./frontend
dockerfile: Dockerfile.${ENVIRONMENT}
args:
- - REACT_APP_API_URL=${FRONTEND_API_URL}
- - REACT_APP_WS_URL=${FRONTEND_WS_URL}
- - REACT_APP_ENVIRONMENT=${ENVIRONMENT}
+ - NEXT_PUBLIC_API_URL=${FRONTEND_API_URL}
+ - NEXT_PUBLIC_WS_URL=${FRONTEND_WS_URL}
+ - NEXT_PUBLIC_ENVIRONMENT=${ENVIRONMENT}
image: bakery/dashboard:${IMAGE_TAG}
container_name: bakery-dashboard
restart: unless-stopped
diff --git a/frontend/next-env.d.ts b/frontend/next-env.d.ts
deleted file mode 100644
index 4f11a03d..00000000
--- a/frontend/next-env.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-///
-///
-
-// NOTE: This file should not be edited
-// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/frontend/src/api/base/apiClient.ts b/frontend/src/api/base/apiClient.ts
index eca97c19..56b99638 100644
--- a/frontend/src/api/base/apiClient.ts
+++ b/frontend/src/api/base/apiClient.ts
@@ -320,5 +320,5 @@ class ApiClient {
// FIXED: Create default instance with correct base URL (removed /api suffix)
export const apiClient = new ApiClient({
- baseURL: process.env.REACT_APP_API_URL || 'http://localhost:8000/api/v1'
+ baseURL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000/api/v1'
});
\ No newline at end of file
diff --git a/frontend/src/api/websocket/WebSocketManager.ts b/frontend/src/api/websocket/WebSocketManager.ts
index 06cf8c6e..d969911b 100644
--- a/frontend/src/api/websocket/WebSocketManager.ts
+++ b/frontend/src/api/websocket/WebSocketManager.ts
@@ -216,13 +216,13 @@ class WebSocketManager extends EventEmitter {
private getWebSocketBaseUrl(): string {
if (typeof window !== 'undefined') { // Check if window is defined
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
- const host = process.env.REACT_APP_WS_URL || window.location.host;
+ const host = process.env.NEXT_PUBLIC_WS_URL || window.location.host;
return `${protocol}//${host}/ws`;
} else {
// Provide a fallback for server-side or non-browser environments
// You might want to get this from environment variables or a config file
// depending on your setup.
- return process.env.REACT_APP_WS_URL || 'ws://localhost:3000/ws';
+ return process.env.NEXT_PUBLIC_WS_URL || 'ws://localhost:3000/ws';
}
}