This document provides guidance for LLM agents working on this React codebase.
SaccadeSync is an eye-tracking application for identifying traits of ADHD or fatigue through saccade tests.
- React 18 - UI library
- React Router DOM 6 - Client-side routing
- Redux Toolkit - State management
- React Redux - React bindings for Redux
- Create React App - Build tooling
src/
├── index.js # App entry point, providers setup
├── App.js # Main app with route definitions
├── components/ # Reusable UI components
│ ├── index.js # Component exports
│ ├── Button/ # Button component
│ ├── Input/ # Form input component
│ ├── Layout/ # Page layout wrapper
│ └── Navbar/ # Navigation bar
├── views/ # Page-level components (routes)
│ ├── index.js # View exports
│ ├── Home/ # Homepage (/)
│ ├── Login/ # Login page (/login)
│ └── Results/ # Results page (/results)
├── store/ # Redux store configuration
│ ├── index.js # Store setup
│ └── authSlice.js # Authentication state slice
└── styles/ # Global styles
└── global.css # Base styles, resets
Each component follows this pattern:
ComponentName/
├── index.js # Component logic and JSX
└── ComponentName.css # Component-specific styles
- Create folder in
src/components/ - Add
index.jswith component code - Add CSS file for styles
- Export from
src/components/index.js
- Create folder in
src/views/ - Add
index.jswith view component - Add CSS file for styles
- Export from
src/views/index.js - Add route in
src/App.js
- Use
createSlicefrom Redux Toolkit - Define selectors in slice files
- Export actions and selectors together
- Access state via
useSelectorhook - Dispatch actions via
useDispatchhook
Routes are defined in App.js using React Router:
/- Home page/login- Login page/results- Results page (shows user data if authenticated)
Use <Link> for navigation, useNavigate() for programmatic navigation.
{
user: { email, name } | null,
isAuthenticated: boolean,
loading: boolean,
error: string | null
}Available actions: login, logout, setLoading, setError
Available selectors: selectUser, selectIsAuthenticated, selectAuthLoading, selectAuthError
- Create view in
src/views/NewPage/ - Add route in
App.js - Add navigation link in
Navbar
- Create slice file in
src/store/ - Add reducer to store in
src/store/index.js - Export actions and selectors
- Keep styles in component's CSS file
- Use BEM-like naming:
.component__element--modifier - Import shared components from
../../components
- Components/Views: PascalCase folders,
index.jsfor main file - Redux slices: camelCase with
Slicesuffix (e.g.,authSlice.js) - CSS files: Match component/view name (e.g.,
Button.css,Home.css) - Utilities/Helpers: camelCase (future:
src/utils/,src/helpers/)
- All imports use relative paths
- CSS is component-scoped (each component has its own CSS file)
- Global styles only in
src/styles/global.css - Use
index.jsbarrel exports for cleaner imports - Redux state should be accessed only through selectors