# Chocolate Tempering Machine - Frontend

A modern React TypeScript frontend for the industrial chocolate tempering machine control system. Designed for touch-friendly operation on industrial tablets with real-time monitoring capabilities.

## Features

- **Touch-Optimized Interface**: Designed for industrial tablets with large buttons and touch-friendly interactions
- **Real-time Monitoring**: WebSocket-based live updates of temperature, process status, and system health
- **Responsive Design**: Works on desktop, tablet, and mobile devices
- **Industrial Theme**: Professional interface suitable for industrial environments
- **Process Control**: Start, pause, resume, and monitor tempering processes
- **Recipe Management**: Create, edit, and manage chocolate tempering recipes
- **Hardware Monitoring**: Real-time status of temperature sensors, motors, and communication
- **Safety Alerts**: Visual and audio alerts for safety conditions and alarms
- **User Management**: Role-based access control with operator, supervisor, and admin roles
- **Data Visualization**: Temperature charts and process analytics

## Technology Stack

- **React 18** - Modern React with hooks and concurrent features
- **TypeScript** - Type-safe development
- **Vite** - Fast build tool and development server
- **Tailwind CSS** - Utility-first CSS framework for rapid styling
- **React Router** - Client-side routing
- **Zustand** - Lightweight state management
- **React Query** - Server state management and caching
- **Socket.IO Client** - Real-time WebSocket communication
- **Recharts** - Charts and data visualization
- **Lucide React** - Modern icon library
- **React Hook Form** - Form management
- **React Hot Toast** - Toast notifications

## Quick Start

### Prerequisites

- Node.js 18+ and npm
- Running backend API server (see `../` for Python backend)

### Installation

```bash
# Install dependencies
npm install

# Copy environment configuration
cp .env.example .env

# Start development server
npm run dev
```

The application will be available at `http://localhost:3000`

### Build for Production

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Project Structure

```
src/
├── components/           # Reusable UI components
│   ├── common/          # Generic components (buttons, modals, etc.)
│   ├── layout/          # Layout components (header, sidebar, etc.)
│   ├── process/         # Process control components
│   ├── recipe/          # Recipe management components
│   └── charts/          # Data visualization components
├── pages/               # Page components
│   ├── Dashboard.tsx    # Main dashboard
│   ├── ProcessControl.tsx
│   ├── RecipeManagement.tsx
│   ├── HardwareStatus.tsx
│   ├── SystemSettings.tsx
│   └── UserManagement.tsx
├── hooks/               # Custom React hooks
│   ├── useWebSocket.ts  # WebSocket connection management
│   ├── useApi.ts        # API data fetching
│   └── useLocalStorage.ts
├── stores/              # Zustand state stores
│   ├── systemStore.ts   # System status and configuration
│   ├── processStore.ts  # Process state management
│   └── userStore.ts     # User authentication and preferences
├── services/            # External service integrations
│   ├── api.ts           # REST API client
│   ├── websocket.ts     # WebSocket service
│   └── auth.ts          # Authentication service
├── types/               # TypeScript type definitions
│   └── index.ts         # All type definitions
├── utils/               # Utility functions
│   ├── formatting.ts    # Data formatting helpers
│   ├── validation.ts    # Form validation
│   └── constants.ts     # Application constants
└── styles/              # Global styles and themes
    └── index.css        # Tailwind CSS and custom styles
```

## Key Components

### Dashboard
- System overview with status cards
- Real-time temperature displays
- Process monitoring
- Quick action buttons
- Hardware status indicators

### Process Control
- Recipe selection and start controls
- Live temperature monitoring with charts
- Process phase indicators
- Emergency stop functionality
- Process history and logs

### Recipe Management
- Recipe CRUD operations
- Temperature profile visualization
- Recipe validation and testing
- Import/export capabilities

### Hardware Status
- Modbus communication status
- Temperature sensor readings
- Motor status and control
- Diagnostic information

### Safety Monitoring
- Active alarm display
- Safety system status
- Alarm acknowledgment
- Emergency procedures

## Configuration

### Environment Variables

Create a `.env` file with the following variables:

```env
VITE_API_BASE_URL=http://localhost:8000
VITE_WEBSOCKET_URL=ws://localhost:8000
VITE_APP_TITLE=Tempering Control System
VITE_APP_ENV=development
```

### API Integration

The frontend communicates with the Python backend through:

- **REST API**: HTTP requests for CRUD operations
- **WebSocket**: Real-time updates for live data
- **Authentication**: JWT token-based authentication

### Touch Optimization

The interface is optimized for industrial tablets:

- Minimum touch target size of 44px
- Large, clearly labeled buttons
- High contrast colors for visibility
- Disabled text selection and zoom
- Touch-friendly gestures

## Development

### Code Style

The project uses:

- **ESLint** - Code linting
- **Prettier** - Code formatting
- **TypeScript strict mode** - Type checking
- **Tailwind CSS classes** - Consistent styling

### State Management

- **Zustand** for global application state
- **React Query** for server state caching
- **React hooks** for local component state

### Real-time Updates

WebSocket connection provides:

- Process status updates every 1-2 seconds
- Temperature readings every 5 seconds
- Immediate safety alerts
- System health monitoring

## Deployment

### Docker Deployment

The frontend can be containerized and deployed with Docker:

```dockerfile
FROM node:18-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
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;"]
```

### Production Considerations

- Enable HTTPS for secure communication
- Configure proper CORS settings
- Set up monitoring and error tracking
- Implement proper caching strategies
- Configure WebSocket proxy in production

## Browser Support

- Chrome 90+ (recommended for industrial use)
- Firefox 88+
- Safari 14+
- Edge 90+

Chrome is recommended for industrial environments due to its excellent WebSocket support and performance on touch devices.

## Troubleshooting

### Common Issues

1. **WebSocket Connection Failed**
   - Check backend server is running
   - Verify WebSocket URL in environment variables
   - Check firewall settings

2. **API Requests Failing**
   - Verify API base URL configuration
   - Check backend server health endpoint
   - Review CORS settings

3. **Touch Interface Issues**
   - Ensure proper viewport meta tag
   - Check touch-action CSS properties
   - Verify button minimum sizes

### Development Tips

- Use React DevTools for component debugging
- Enable WebSocket debugging in browser DevTools
- Use Zustand DevTools for state management debugging
- Check Network tab for API request issues

## License

This project is part of the chocolate tempering machine control system. See the main project license for details.
