React Native LED controller app for managing custom lighting patterns through REST API.
- 16-dot LED grid with 12 animation patterns
- HSV color picker with real-time preview
- REST API hardware communication
- FileSystem persistence & context state management
Stack: React Native + TypeScript, Expo SDK 53, React Navigation, Reanimated Flow: Welcome → Settings → Editor screens
- CONTRIBUTING.md - Development standards and guidelines
- docs/README.md - Comprehensive documentation structure
- docs/ROOT.md - Root configuration files reference
- docs/src/SRC.md - Source code architecture overview
luminova/
├── src/ # Main application code
│ ├── components/ # Reusable UI components
│ │ ├── animations/ # Animation-specific components
│ │ ├── audio/ # Audio measurement components
│ │ ├── buttons/ # Button components
│ │ ├── color-picker/ # Color selection components
│ │ ├── common/ # Common shared components
│ │ ├── settings/ # Settings management components
│ │ └── welcome/ # Welcome screen components
│ ├── configurations/ # App configuration
│ │ ├── constants.ts # API endpoints and app constants
│ │ ├── patterns.ts # Animation pattern definitions
│ │ └── defaults.ts # Default settings data
│ ├── context/ # React Context providers
│ │ └── ConfigurationContext.tsx
│ ├── hooks/ # Custom React hooks
│ │ └── useDebounce.ts
│ ├── screens/ # Main application screens
│ │ ├── Welcome.tsx # Entry point with LED toggle
│ │ ├── Settings.tsx # Main settings management
│ │ ├── ColorEditor.tsx # Color editing interface
│ │ ├── FlashingPatternEditor.tsx # Animation pattern configuration
│ │ ├── ChooseModification.tsx # Choice between colors/patterns
│ │ └── Info.tsx # Help and information
│ ├── services/ # API and service layers
│ │ ├── ApiService.ts # Hardware API communication
│ │ ├── SettingsService.ts # Settings data management
│ │ ├── IpConfigService.ts # IP address persistence
│ │ └── FirstTimeUserService.ts # Onboarding state management
│ ├── styles/ # Centralized styling
│ │ └── SharedStyles.ts # Colors, fonts, and common styles
│ ├── types/ # TypeScript interfaces
│ │ └── SettingInterface.ts
│ └── utils/ # Utility functions
│ └── settingUtils.ts # Setting ID generation and utilities
├── assets/ # Static assets
│ ├── fonts/ # Custom fonts
│ └── images/ # App icons and images
├── android/ # Android build configuration
├── .github/ # GitHub configuration
│ ├── workflows/ # CI/CD pipelines (iOS build automation)
│ ├── docs/ # Documentation
│ ├── README.md # This file
│ └── CONTRIBUTING.md # Contribution guidelines
- Entry point with LED on/off toggle
- First-time user tutorial with guided onboarding
- Animated text display and status indicators
- IP address configuration and connection testing
- Responsive layout: Dynamically scales across iPhone sizes (iPhone 15 to iPhone 16 Plus)
- Adaptive sizing: Title and button text scale with screen dimensions
- Touch optimization: Responsive hit areas and touch targets for all devices
- Main settings management with carousel view
- Real-time animation previews
- Direct editing access for focused settings
- Add, delete, and reorder lighting configurations
- Advanced color editing interface
- 16-dot color grid (2 rows of 8)
- HSV color picker with gesture controls
- Color presets and hex input keyboard
- Name editing for both new and existing settings
- Animation pattern and timing configuration
- 12 distinct animation patterns (0-11)
- Real-time pattern preview
- BPM measurement and audio-reactive features
- Name editing for both new and existing settings
- Comprehensive usage instructions
- Step-by-step feature explanations
- Hidden debug mode for development
- Feedback and support information
- Animated dot patterns for previewing effects
- 12 different animation patterns with timeout management
- Memory leak prevention and performance optimization
- Unified setting display component for carousel and focused views
- Direct edit functionality and responsive touch areas
- Memoized rendering for optimal performance
- Modular LED dot display and interaction component
- Configurable layouts (single-row for previews, two-rows for editing)
- Customizable dot size and spacing
- Button.tsx: Base component with consistent styling foundation
- ActionButton.tsx: Reset/Save/Preview actions with variant support
- BackButton.tsx, InfoButton.tsx: Icon-based navigation buttons
- ColorButton.tsx: White/Black color preset buttons
- EditButton.tsx: Setting management actions
- FlashButton.tsx: Hardware flash/preview functionality
- MetronomeButton.tsx: Audio BPM measurement trigger
- RandomizeButton.tsx: Color randomization controls
- AnimatedTitle.tsx: Animated text component for screen titles
- HexKeyboard.tsx: Custom modal keyboard for hex color input
- WelcomeTutorial.tsx: Multi-page onboarding modal
- DismissKeyboardView.tsx: Keyboard dismissal wrapper
- Dot.tsx: Individual LED dot representation component
- Centralized color palette and typography
- Common layout patterns and responsive dimensions
- Consistent button and container styles
- Dark theme optimization
- Centralized API communication with hardware
- Consistent error handling and type safety
- Methods:
flashSetting(),toggleLed(),getStatus()
- IpConfigService: Persistent IP address management
- SettingsService: Settings data persistence and validation
- FirstTimeUserService: Onboarding state management
- Stable ID generation for React component keys
- Content-based hashing for deterministic key generation
- Prevention of "Text strings must be rendered within a component" errors
npm run format- Format code with Prettiernpm run lint- Run ESLint for code quality checksnpm run lint:fix- Run ESLint with automatic fixesnpm run format:check- Check code formatting without writing changes
npm run format-lint- Run Biome and ES linter and Biome auto-formatter with safe fixesnpm run format- Format all filesnpm run format-lint-org- Run Biome's full suite including organizing imports
npm start- Start Expo development servernpm run android- Run on Android device/emulatornpm run ios- Run on iOS device/simulator
The project uses ESLint and Prettier as the primary code quality tools:
- ESLint Configuration:
.eslintrcwith TypeScript, React, and React Native rules - Prettier Configuration:
.prettierrc.yamlwith consistent formatting rules - VS Code Integration: Automatic format-on-save and lint-on-save enabled
- Biome Support: Legacy Biome tooling maintained for compatibility
- Biome Formatting Applied: Comprehensive code formatting across all components
- Import Statement Cleanup: Standardized single quotes and consistent formatting
- Component Refinement: Removed redundant CreateButton component and consolidated button architecture
- Type Safety Enhancement: Improved TypeScript interfaces and parameter handling
- API Service Formatting: Enhanced readability and error handling consistency
- Button Architecture Refactoring: Organized button system with base component
- ActionButton Integration: Eliminated repetitive button patterns
- Shared Styling System: Centralized theming and constants
- API Service Layer: Unified error handling and communication
- Animation State Isolation: Prevents state bleeding between components
- Stable Key Management: Content-based React keys for optimal rendering
- Memoization Strategy: Strategic use of React.memo() and useCallback
- Debounced Input Handling: Optimized user interaction response
- TypeScript Integration: Comprehensive type safety throughout codebase
- ESLint Pipeline: Automated code quality enforcement with React and React Native rules
- Prettier Formatting: Consistent code style across the entire project
- VS Code Integration: Format-on-save and lint-on-save configuration
- Documentation: Comprehensive guides and inline documentation
- Testing Standards: Component validation and integration testing
- Clone the repository
- Install dependencies:
npm install - Start development server:
npm start - Run on device:
npm run androidornpm run ios
The repository includes automated iOS build and submission workflow via GitHub Actions.
Prerequisites:
- Expo Account: Ensure project is linked to Expo account
- App Store Connect: Configure app in Apple Developer Console
- GitHub Secrets: Add
EXPO_TOKENto repository secrets
Workflow Configuration:
- Automatic Builds: Triggered on pushes to
mainbranch - Manual Builds: Available via GitHub Actions tab with custom options
- Build Profiles: Support for
production,preview, anddevelopment - Store Submission: Optional automatic submission to App Store
Usage:
- Manual Trigger: Go to Actions > iOS Build and Submit > Run workflow
- Automatic: Push to main branch triggers build
- Store Submit: Enable submission checkbox for App Store release For detailed contribution guidelines, see CONTRIBUTING.md.
- LED Controller Hardware compatible with REST API
- Network Connection between device and LED controller
- Android/iOS Device for running the React Native application
This project is part of the Luminova Controller system. See project documentation for licensing information.