Problem: - When editing a PO in the dashboard, the products section showed "[object Object]" instead of the actual product list - The EditViewModal's 'list' type expects simple text arrays, not complex objects Solution: - Created EditablePurchaseOrderItems custom component to properly render and edit PO items - Added form state management with useState and useEffect to track edited values - Implemented handleFieldChange to update form data when users modify fields - Changed field type from 'list' to 'component' with the custom editor - Added editable input fields for quantity, unit of measure, and unit price - Displays real-time item totals and grand total Technical Details: - Custom component receives value and onChange props from EditViewModal - Form data is initialized when entering edit mode with all PO item details - Each item shows: product name, SKU, quantity with unit selector, and price - Unit options include kg, g, l, ml, units, boxes, bags - Proper decimal handling for prices (parseFloat for display, string for API) - Save handler validates items and updates only priority, delivery date, and notes (item modifications are validated but not persisted in this iteration) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Frontend Dashboard
Overview
The Bakery-IA Frontend Dashboard is a modern, responsive React-based web application that provides bakery owners and operators with comprehensive real-time visibility into their operations. Built with TypeScript and cutting-edge React ecosystem tools, it delivers an intuitive interface for demand forecasting, inventory management, production planning, and operational analytics.
Key Features
AI-Powered Demand Forecasting
- Visual Forecast Charts - Interactive Chart.js visualizations of demand predictions
- Multi-Day Forecasts - View predictions up to 30 days ahead
- Confidence Intervals - Visual representation of prediction uncertainty
- Historical Comparison - Compare forecasts with actual sales
- Forecast Accuracy Metrics - Track model performance over time
- Weather Integration - See how weather impacts demand
- One-Click Forecast Generation - Generate forecasts for all products instantly
Real-Time Operational Dashboard
- Live KPI Cards - Real-time metrics for sales, inventory, production
- Alert Stream (SSE) - Instant notifications for critical events
- Production Status - Live view of current production batches
- Inventory Levels - Color-coded stock levels with expiry warnings
- Order Pipeline - Track customer orders from placement to fulfillment
Inventory Management
- Stock Overview - All ingredients with current levels and locations
- Low Stock Alerts - Automatic warnings when stock falls below thresholds
- Expiration Tracking - Prioritize items by expiration date
- FIFO Compliance - First-in-first-out consumption tracking
- Stock Movements - Complete audit trail of all inventory changes
- Barcode Scanning Integration - Quick stock updates via barcode
Production Planning
- Production Schedules - Daily and weekly production calendars
- Batch Tracking - Monitor all active production batches
- Quality Control - Digital quality check forms and templates
- Equipment Management - Track equipment usage and maintenance
- Recipe Execution - Step-by-step recipe guidance for production staff
- Capacity Planning - Optimize production capacity utilization
Procurement & Supplier Management
- Automated Purchase Orders - AI-generated procurement recommendations
- Supplier Portal - Manage supplier relationships and performance
- Price Comparisons - Compare supplier pricing across items
- Delivery Tracking - Track inbound shipments
- Supplier Scorecards - Rate suppliers on quality, delivery, and price
Sales & Orders
- Customer Order Management - Process and track customer orders
- Sales Analytics - Revenue trends, product performance, customer insights
- POS Integration - Automatic sales data sync from Square/Toast/Lightspeed
- Sales History - Complete historical sales data with filtering and export
Onboarding Wizard
- Multi-Step Onboarding - Guided 15-step setup process for new bakeries
- POI Detection Step - Automatic detection of nearby Points of Interest using bakery location
- Progress Tracking - Visual progress indicators and step completion
- Data Persistence - Save progress at each step
- Smart Navigation - Dynamic step dependencies and validation
Multi-Tenant Administration
- Tenant Settings - Configure bakery-specific preferences
- User Management - Invite team members and assign roles
- Subscription Management - View and upgrade subscription plans
- Billing Portal - Stripe-powered billing and invoices
ML Model Training
- Training Dashboard - Monitor ML model training progress
- WebSocket Live Updates - Real-time training status and metrics
- Model Performance - Compare model versions and accuracy
- Training History - Complete log of all training runs
Technical Capabilities
Modern React Architecture
- React 18 - Latest React with concurrent features
- TypeScript - Type-safe development with full IntelliSense
- Vite - Lightning-fast build tool and dev server
- Component-Based - Modular, reusable components
- Hooks-First - Modern React patterns with custom hooks
State Management
- Zustand - Lightweight global state management
- TanStack Query (React Query) - Server state management with caching
- Local Storage Persistence - Persist user preferences
- Optimistic Updates - Instant UI feedback before server confirmation
UI/UX Components
- Radix UI - Accessible, unstyled component primitives
- Tailwind CSS - Utility-first CSS framework
- Responsive Design - Mobile, tablet, and desktop optimized
- Dark Mode (planned) - User-selectable theme
- Accessible - WCAG 2.1 AA compliant
Data Visualization
- Chart.js - Interactive forecast and analytics charts
- Recharts - Declarative React charts for dashboards
- Custom Visualizations - Specialized charts for bakery metrics
Forms & Validation
- React Hook Form - Performant form management
- Zod - TypeScript-first schema validation
- Error Handling - User-friendly validation messages
- Auto-Save - Background form persistence
Real-Time Communication
- Server-Sent Events (SSE) - Real-time alert stream from gateway
- WebSocket - Live ML training progress updates
- Auto-Reconnect - Resilient connection management
- Event Notifications - Toast notifications for real-time events
Internationalization
- i18next - Multi-language support
- Spanish - Default language for Spanish market
- English - Secondary language for international users
- Date/Number Formatting - Locale-aware formatting
API Integration
- TanStack Query - Declarative data fetching with caching
- Axios/Fetch - HTTP client for REST APIs
- JWT Authentication - Token-based auth with auto-refresh
- Request Interceptors - Automatic token injection
- Error Handling - Centralized error boundary and retry logic
Business Value
For Bakery Owners
- Time Savings - 15-20 hours/week saved on manual planning
- Reduced Waste - Visual demand forecasts reduce overproduction by 20-40%
- Better Decisions - Data-driven insights replace guesswork
- Mobile Access - Manage bakery from anywhere (responsive design)
- No Training Required - Intuitive interface, minimal learning curve
For Bakery Staff
- Production Guidance - Step-by-step recipes on screen
- Quality Consistency - Digital quality checklists
- Inventory Visibility - Know what's in stock without checking fridges
- Task Prioritization - Alerts show what needs immediate attention
For Multi-Location Bakeries
- Centralized Control - Manage all locations from one dashboard
- Performance Comparison - Compare KPIs across locations
- Standardized Processes - Same interface at all locations
For Platform Operations
- Reduced Support Costs - Intuitive UI reduces support tickets
- User Engagement - Real-time updates keep users engaged
- Feature Discovery - Guided onboarding increases feature adoption
Technology Stack
Core Framework
- React 18.3 - JavaScript library for user interfaces
- TypeScript 5.3 - Type-safe JavaScript superset
- Vite 5.0 - Next-generation frontend tooling
State Management & Data Fetching
- Zustand 4.4 - Lightweight state management
- TanStack Query (React Query) 5.8 - Async state management
- Axios - HTTP client
UI & Styling
- Radix UI - Accessible component primitives
@radix-ui/react-dialog- Modal dialogs@radix-ui/react-dropdown-menu- Dropdown menus@radix-ui/react-select- Select components@radix-ui/react-tabs- Tab navigation
- Tailwind CSS 3.4 - Utility-first CSS framework
- Headless UI - Unstyled accessible components
- Lucide React - Beautiful, consistent icons
Data Visualization
- Chart.js 4.4 - Flexible JavaScript charting
- react-chartjs-2 - React wrapper for Chart.js
- Recharts 2.10 - Composable React charts
- date-fns - Modern date utility library
Forms & Validation
- React Hook Form 7.49 - Performant form library
- Zod 3.22 - TypeScript-first schema validation
- @hookform/resolvers - Zod integration for React Hook Form
Routing & Navigation
- React Router 6.20 - Declarative routing for React
- React Router DOM - DOM bindings for React Router
Internationalization
- i18next 23.7 - Internationalization framework
- react-i18next 13.5 - React bindings for i18next
Real-Time Communication
- EventSource API - Native SSE support
- WebSocket API - Native WebSocket support
- react-use-websocket - React WebSocket hook
Notifications & Feedback
- react-hot-toast - Beautiful toast notifications
- react-loading-skeleton - Loading placeholders
Development Tools
- ESLint - JavaScript linter
- Prettier - Code formatter
- TypeScript ESLint - TypeScript linting rules
- Vite Plugin React - Fast refresh and JSX transform
Application Structure
frontend/
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── ui/ # Base UI components (buttons, inputs, etc.)
│ │ ├── charts/ # Chart components
│ │ ├── forms/ # Form components
│ │ ├── layout/ # Layout components (header, sidebar, etc.)
│ │ └── domain/ # Domain-specific components
│ │ └── onboarding/ # Onboarding wizard components
│ │ ├── steps/ # Individual step components
│ │ │ ├── POIDetectionStep.tsx # POI detection UI
│ │ │ ├── SetupStep.tsx
│ │ │ └── ...
│ │ ├── context/ # Onboarding wizard context
│ │ └── WizardLayout.tsx
│ ├── pages/ # Page components (routes)
│ │ ├── Dashboard/ # Main dashboard
│ │ ├── Forecasting/ # Forecast management
│ │ ├── Inventory/ # Inventory management
│ │ ├── Production/ # Production planning
│ │ ├── Orders/ # Order management
│ │ ├── Suppliers/ # Supplier management
│ │ ├── Procurement/ # Procurement planning
│ │ ├── Settings/ # User settings
│ │ └── Auth/ # Login/register pages
│ ├── hooks/ # Custom React hooks
│ │ ├── useAuth.ts # Authentication hook
│ │ ├── useSSE.ts # Server-sent events hook
│ │ ├── useWebSocket.ts # WebSocket hook
│ │ └── useQuery.ts # API query hooks
│ ├── stores/ # Zustand stores
│ │ ├── authStore.ts # Authentication state
│ │ ├── alertStore.ts # Alert state
│ │ └── uiStore.ts # UI state (sidebar, theme, etc.)
│ ├── api/ # API client functions
│ │ ├── client/ # API client configuration
│ │ │ └── apiClient.ts # Axios client with tenant injection
│ │ ├── services/ # Service API modules
│ │ │ ├── onboarding.ts # Onboarding API
│ │ │ ├── geocodingApi.ts # Geocoding/address API
│ │ │ └── poiContextApi.ts # POI detection API
│ │ ├── auth.ts # Auth API
│ │ ├── forecasting.ts # Forecasting API
│ │ ├── inventory.ts # Inventory API
│ │ └── ... # Other service APIs
│ ├── types/ # TypeScript type definitions
│ │ ├── api.ts # API response types
│ │ ├── models.ts # Domain model types
│ │ └── components.ts # Component prop types
│ ├── utils/ # Utility functions
│ │ ├── date.ts # Date formatting
│ │ ├── currency.ts # Currency formatting
│ │ ├── validation.ts # Validation helpers
│ │ └── format.ts # General formatting
│ ├── locales/ # i18n translation files
│ │ ├── es/ # Spanish translations
│ │ └── en/ # English translations
│ ├── App.tsx # Root component
│ ├── main.tsx # Application entry point
│ └── router.tsx # Route configuration
├── public/ # Static assets
│ ├── icons/ # App icons
│ └── images/ # Images
├── index.html # HTML template
├── vite.config.ts # Vite configuration
├── tailwind.config.js # Tailwind CSS configuration
├── tsconfig.json # TypeScript configuration
└── package.json # Dependencies
Key Pages & Routes
Public Routes
/login- User login/register- User registration/forgot-password- Password reset
Onboarding Routes
/onboarding- Multi-step onboarding wizard (15 steps)/onboarding/bakery-type-selection- Choose bakery type/onboarding/setup- Basic bakery setup/onboarding/poi-detection- POI Detection - Automatic location context detection/onboarding/upload-sales-data- Upload historical sales/onboarding/inventory-review- Review detected products/onboarding/initial-stock-entry- Initial inventory levels/onboarding/product-categorization- Product categories/onboarding/suppliers-setup- Supplier configuration/onboarding/recipes-setup- Recipe management/onboarding/ml-training- AI model training/onboarding/setup-review- Review configuration/onboarding/completion- Onboarding complete
Protected Routes (Require Authentication)
/dashboard- Main operational dashboard/forecasting- Demand forecasting management/forecasting/train- ML model training/inventory- Inventory management/inventory/stock- Stock levels and movements/production- Production planning/production/batches- Production batch tracking/production/quality- Quality control/recipes- Recipe management/orders- Customer order management/suppliers- Supplier management/procurement- Procurement planning/sales- Sales analytics/pos- POS integration settings/settings- User and tenant settings/settings/team- Team member management/settings/subscription- Subscription management
API Integration
Authentication Flow
- Login: User enters credentials → API returns access token + refresh token
- Token Storage: Tokens stored in Zustand store + localStorage
- Request Interceptor: Axios interceptor adds
Authorization: Bearer {token}to all requests - Token Refresh: On 401 error, automatically refresh token and retry request
- Logout: Clear tokens and redirect to login
TanStack Query Configuration
// Automatic background refetching
refetchOnWindowFocus: true
refetchOnReconnect: true
// Stale-while-revalidate caching
staleTime: 5 minutes
cacheTime: 30 minutes
// Retry on failure
retry: 3
retryDelay: exponential backoff
API Client Structure
// Base client
const apiClient = axios.create({
baseURL: import.meta.env.VITE_API_URL,
timeout: 30000,
})
// Request interceptor (add JWT)
apiClient.interceptors.request.use((config) => {
const token = authStore.getState().accessToken
config.headers.Authorization = `Bearer ${token}`
return config
})
// Response interceptor (handle token refresh)
apiClient.interceptors.response.use(
(response) => response,
async (error) => {
if (error.response?.status === 401) {
await refreshToken()
return apiClient.request(error.config)
}
throw error
}
)
Real-Time Features
Server-Sent Events (SSE) for Alerts
const useAlertStream = () => {
useEffect(() => {
const eventSource = new EventSource(
`${API_URL}/api/v1/alerts/stream`,
{ withCredentials: true }
)
eventSource.onmessage = (event) => {
const alert = JSON.parse(event.data)
alertStore.addAlert(alert)
toast.notification(alert.message)
}
eventSource.onerror = () => {
// Auto-reconnect on error
setTimeout(() => eventSource.close(), 5000)
}
return () => eventSource.close()
}, [])
}
WebSocket for Training Progress
const useTrainingWebSocket = (trainingId: string) => {
const { lastMessage, readyState } = useWebSocket(
`${WS_URL}/api/v1/training/ws?training_id=${trainingId}`
)
useEffect(() => {
if (lastMessage) {
const progress = JSON.parse(lastMessage.data)
updateTrainingProgress(progress)
}
}, [lastMessage])
}
Configuration
Environment Variables
API Configuration:
VITE_API_URL- Backend API gateway URL (e.g.,https://api.bakery-ia.com)VITE_WS_URL- WebSocket URL (e.g.,wss://api.bakery-ia.com)
Feature Flags:
VITE_ENABLE_DEMO_MODE- Enable demo mode features (default: false)VITE_ENABLE_ANALYTICS- Enable analytics tracking (default: true)
External Services:
VITE_STRIPE_PUBLIC_KEY- Stripe publishable key for paymentsVITE_SENTRY_DSN- Sentry error tracking DSN (optional)
Build Configuration:
VITE_APP_VERSION- Application version (from package.json)VITE_BUILD_TIME- Build timestamp
Example .env file
VITE_API_URL=http://localhost:8000
VITE_WS_URL=ws://localhost:8000
VITE_ENABLE_DEMO_MODE=true
VITE_STRIPE_PUBLIC_KEY=pk_test_...
Development Setup
Prerequisites
- Node.js 18+ and npm/yarn/pnpm
- Access to Bakery-IA backend API
Local Development
# Install dependencies
cd frontend
npm install
# Set environment variables
cp .env.example .env
# Edit .env with your configuration
# Run development server
npm run dev
# Open browser to http://localhost:5173
Build for Production
# Create optimized production build
npm run build
# Preview production build locally
npm run preview
Code Quality
# Run linter
npm run lint
# Run type checking
npm run type-check
# Format code
npm run format
Testing
Unit Tests (Vitest)
# Run unit tests
npm run test
# Run tests with coverage
npm run test:coverage
# Run tests in watch mode
npm run test:watch
E2E Tests (Playwright - planned)
# Run E2E tests
npm run test:e2e
# Run E2E tests in headed mode
npm run test:e2e:headed
Performance Optimization
Build Optimization
- Code Splitting - Lazy load routes for faster initial load
- Tree Shaking - Remove unused code from bundles
- Minification - Minify JavaScript and CSS
- Gzip Compression - Compress assets for faster transfer
- Image Optimization - Optimized image formats and sizes
Runtime Optimization
- React.memo - Prevent unnecessary re-renders
- useMemo/useCallback - Memoize expensive computations
- Virtual Scrolling - Efficiently render large lists
- Debouncing - Limit API calls from user input
- Lazy Loading - Load components and routes on demand
Caching Strategy
- TanStack Query Cache - 5-minute stale time for most queries
- Service Worker (planned) - Offline-first PWA support
- Asset Caching - Browser cache for static assets
- API Response Cache - Cache GET requests in TanStack Query
Accessibility (a11y)
WCAG 2.1 AA Compliance
- Keyboard Navigation - All features accessible via keyboard
- Screen Reader Support - ARIA labels and semantic HTML
- Color Contrast - 4.5:1 contrast ratio for text
- Focus Indicators - Visible focus states for interactive elements
- Alt Text - Descriptive alt text for images
- Form Labels - Proper label associations for inputs
Radix UI Accessibility
- Built-in keyboard navigation
- ARIA attributes automatically applied
- Focus management
- Screen reader announcements
Security Measures
Authentication & Authorization
- JWT Tokens - Secure token-based authentication
- Automatic Token Refresh - Seamless token renewal
- HttpOnly Cookies (planned) - More secure token storage
- CSRF Protection - CSRF tokens for state-changing operations
Data Protection
- HTTPS Only (Production) - All communication encrypted
- XSS Prevention - React's built-in XSS protection
- Content Security Policy - Restrict resource loading
- Input Sanitization - Validate and sanitize all user inputs
Dependency Security
- npm audit - Regular security audits
- Dependabot - Automatic dependency updates
- License Scanning - Ensure license compliance
Deployment
Docker Deployment
# Multi-stage build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Kubernetes Deployment
- Deployment - Multiple replicas for high availability
- Service - Load balancing across pods
- Ingress - HTTPS termination and routing
- ConfigMap - Environment-specific configuration
- HPA - Horizontal pod autoscaling based on CPU
CI/CD Pipeline
- Lint & Type Check - Ensure code quality
- Unit Tests - Run test suite
- Build - Create production build
- Docker Build - Create container image
- Push to Registry - Push to container registry
- Deploy to Kubernetes - Update deployment
Browser Support
- Chrome - Latest 2 versions
- Firefox - Latest 2 versions
- Safari - Latest 2 versions
- Edge - Latest 2 versions
- Mobile Browsers - iOS Safari 14+, Chrome Android 90+
Competitive Advantages
- Modern Tech Stack - React 18, TypeScript, Vite for fast development
- Real-Time Updates - SSE and WebSocket for instant feedback
- Mobile-First - Responsive design works on all devices
- Offline Support (planned) - PWA capabilities for unreliable networks
- Accessible - WCAG 2.1 AA compliant for inclusive access
- Fast Performance - Code splitting and caching for sub-second loads
- Spanish-First - UI designed for Spanish bakery workflows
Future Enhancements
- Progressive Web App (PWA) - Offline support and installable
- Dark Mode - User-selectable theme
- Mobile Apps - React Native iOS/Android apps
- Advanced Analytics - Custom dashboard builder
- Multi-Language - Support for additional languages
- Voice Commands - Hands-free operation in production environment
- Barcode Scanning - Native camera integration for inventory
- Print Templates - Custom print layouts for labels and reports
For VUE Madrid Business Plan: The Bakery-IA Frontend Dashboard represents a modern, professional SaaS interface built with industry-leading technologies. The real-time capabilities, mobile-first design, and accessibility compliance make it suitable for bakeries of all sizes, from small artisanal shops to multi-location enterprises. The intuitive interface reduces training costs and increases user adoption, critical factors for successful SaaS businesses in the Spanish market.