Files
bakery-ia/frontend
Claude 3a1a19d836 Complete AI inventory step redesign & add recipes next button
 RECIPES STEP FIX:
- Add onComplete prop handling to RecipesSetupStep.tsx
- Add "Next" button when recipes.length >= 1
- Show success message with recipe count
- Button hidden when in adding mode

🎯 AI INVENTORY STEP - COMPLETE REDESIGN:
Following suppliers/recipes pattern with list-based management and deferred creation.

**NEW DATA MODEL**:
- InventoryItemForm interface with isSuggested tracking
- Items stored in list (NOT created in database yet)
- Support both AI suggestions and manual entries

**NEW UI PATTERN**:
- List view with expandable cards showing AI confidence badges
- Edit/Delete buttons per item (like suppliers)
- "Add Ingredient Manually" button with full form
- Next button creates ALL items at once (deferred creation)

**KEY CHANGES**:
1. Items added to list first (not created immediately)
2. Can edit/delete both AI and manual items before creation
3. Manual ingredient addition form with full validation
4. All items created when clicking "Next" button
5. Progress indicator during creation
6. Sales data import happens after inventory creation

**UI IMPROVEMENTS**:
- "Why This Matters" info box explaining workflow
- Ingredient cards show: name, category, stock, cost, shelf life, sales data
- AI confidence badges (e.g., "IA 95%")
- Visual success indicator when minimum met
- Gradient form section matching recipe template pattern

**FILES**:
- UploadSalesDataStep.tsx: Completely rewritten (963 lines)
- RecipesSetupStep.tsx: Added Next button (2 lines)
- REDESIGN_SUMMARY.md: Complete documentation of changes

Build:  Success (21.46s)
Pattern: Now matches suppliers/recipes workflow exactly
Creation: Deferred until "Next" click (user can review/edit first)
2025-11-06 15:09:23 +00:00
..
2025-09-27 11:18:13 +02:00
2025-08-28 10:41:04 +02:00
2025-08-28 10:41:04 +02:00
2025-08-28 10:41:04 +02:00
2025-09-27 17:19:00 +02:00
2025-08-03 20:16:19 +02:00
2025-11-06 11:04:50 +01:00
2025-10-18 16:03:23 +02:00
2025-10-06 15:27:01 +02:00
2025-08-28 10:41:04 +02:00

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

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.)
│   ├── 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.ts        # Axios client setup
│   │   ├── 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

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

  1. Login: User enters credentials → API returns access token + refresh token
  2. Token Storage: Tokens stored in Zustand store + localStorage
  3. Request Interceptor: Axios interceptor adds Authorization: Bearer {token} to all requests
  4. Token Refresh: On 401 error, automatically refresh token and retry request
  5. 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 payments
  • VITE_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

  1. Lint & Type Check - Ensure code quality
  2. Unit Tests - Run test suite
  3. Build - Create production build
  4. Docker Build - Create container image
  5. Push to Registry - Push to container registry
  6. 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

  1. Modern Tech Stack - React 18, TypeScript, Vite for fast development
  2. Real-Time Updates - SSE and WebSocket for instant feedback
  3. Mobile-First - Responsive design works on all devices
  4. Offline Support (planned) - PWA capabilities for unreliable networks
  5. Accessible - WCAG 2.1 AA compliant for inclusive access
  6. Fast Performance - Code splitting and caching for sub-second loads
  7. 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.