# Copilot Instructions for in-car-system-fe ## Project Overview - **Type:** React + TypeScript SPA using Vite - **Purpose:** In-car system frontend for camera management, sighting history, and system settings - **Key Directories:** - `src/components/`: UI components grouped by feature (Camera, Sighting, Settings, etc.) - `src/context/`: React context for global state (e.g., AlertHit, NPEDUser, SightingFeed) - `src/hooks/`: Custom React hooks for data fetching, config, and UI logic - `src/pages/`: Top-level route views (Dashboard, Camera, Session, SystemSettings) - `src/types/`: Shared TypeScript types - `src/utils/`: Utility functions and config helpers ## Architecture & Patterns - **Component Structure:** - Feature-based folders (e.g., `CameraSettings`, `SightingOverview`) - Components are mostly functional, using hooks and context for state - **State Management:** - Uses React Context for cross-component state (see `src/context/providers/`) - Reducers in `src/context/reducers/` for complex state updates - **Data Flow:** - Data is fetched and managed via custom hooks (see `src/hooks/`) - Context providers wrap the app in `main.tsx` - **Styling:** - CSS modules (e.g., `App.css`, `index.css`) - No CSS-in-JS or styled-components ## Developer Workflows - **Install:** `npm install` - **Start Dev Server:** `npm run dev` - **Build:** `npm run build` - **Preview Build:** `npm run preview` - **Lint:** `npm run lint` (uses ESLint, see `eslint.config.js`) - **Type Check:** `tsc --noEmit` - **Test:** _No test framework configured by default_ ## Project Conventions - **TypeScript:** - All components and hooks are typed; shared types in `src/types/types.ts` - **Component Naming:** - Use PascalCase for components and folders - Suffix with `Container`, `Card`, or `Modal` for UI roles - **Assets:** - Images in `public/` or `src/assets/` - Sounds in `src/assets/sounds/` - **No Redux, MobX, or external state libraries** - **No backend API code in this repo** ## Integration Points - **External:** - No direct backend integration code; data is assumed to come from context/hooks - Sound assets for UI feedback in `src/assets/sounds/ui/` ## Examples - **Add a new camera setting:** - Create a new component in `src/components/CameraSettings/` - Add state via context or a custom hook if needed - **Add a new page:** - Add a file to `src/pages/` and update routing in the main app (see `main.tsx`) ## References - See `README.md` for Vite/ESLint setup details - See `src/context/` and `src/hooks/` for app-specific state/data patterns --- _If any conventions or workflows are unclear, please ask for clarification or examples from the codebase._