This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Onyx is a React web application that interfaces with the Volcano Hybrid vaporizer via Web Bluetooth API. It provides a custom alternative to the official Volcano web application with enhanced workflow management and device control features.
npm run dev- Start development server with Vitenpm run dev-host- Start development server with host accessnpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint for code quality
No test commands are currently configured in package.json. Tests would use the @testing-library setup already installed.
- Redux Toolkit with 4 main slices:
deviceInformation- BLE firmware versions, serial numbers, hours of operationdeviceInteraction- Temperature control, fan/heat status, current workflow executionsettings- User preferences, themes, auto-shutoff, LED brightnessworkflow- Workflow creation, editing, and execution state
src/features/- Feature-based architecture with each feature containing components, containers, and slicesrc/services/- Core BLE communication, characteristic caching, and utilitiessrc/themes/- Comprehensive theming system with seasonal and custom themessrc/constants/- Bluetooth UUIDs, actions, enums, and device-specific constants
- Web Bluetooth API for Volcano Hybrid communication
- Multiple service UUIDs for different device capabilities
- BLE characteristic caching system for performance
- iOS compatibility with WebBLE/Bluefy apps
- React 18 with React Router for SPA routing
- Bootstrap 5 with styled-components for theming
- React DnD for workflow item drag-and-drop
- Touch and desktop support with different backends
- Drag-and-drop workflow editor with configurable items
- JSON-based workflow configuration with validation
- Real-time workflow execution with step tracking
- Conditional heat items and loop commands
- Feature-based organization under
src/features/ - Container components for Redux connections
- Styled components using theme provider
- PropTypes for type checking
- Redux slices with extraReducers for store reinitialization
- Local storage integration for persistent settings
- Action constants in separate files
- Styled-components with centralized theme system
- Bootstrap integration for base styling
- Responsive design with mobile touch support
- Custom fonts (digital-7.mono.ttf) for display elements
- Always think about how your changes effect the complex themeing structure. Pay special attention to pridetext
- Everything you do must work for mobile
- Always import the conversion function for changing between c and f instead of creating your own
- Always take the isF flag and the correct temperature conversion into account when dealing with temperature