diff --git a/BEST_PRACTICES.md b/BEST_PRACTICES.md
new file mode 100644
index 0000000..c28e740
--- /dev/null
+++ b/BEST_PRACTICES.md
@@ -0,0 +1,472 @@
+# Best Practices & Code Standards
+
+## React Hooks - CRITICAL Rules
+
+### ✅ ALWAYS Use Functional Updates with useState/useKV
+
+```typescript
+// ❌ WRONG - Creates stale closure bugs
+const [items, setItems] = useState([])
+const addItem = (newItem) => {
+ setItems([...items, newItem]) // items is STALE!
+}
+
+// ✅ CORRECT - Always current
+const [items, setItems] = useState([])
+const addItem = (newItem) => {
+ setItems(currentItems => [...currentItems, newItem])
+}
+```
+
+### ✅ NEVER Reference State Outside Setter
+
+```typescript
+// ❌ WRONG - Reading from closure
+const handleApprove = (id) => {
+ setTimesheets(current => current.map(...))
+ const timesheet = timesheets.find(t => t.id === id) // STALE!
+}
+
+// ✅ CORRECT - Get from updated state
+const handleApprove = (id) => {
+ setTimesheets(current => {
+ const updated = current.map(...)
+ const timesheet = updated.find(t => t.id === id) // CURRENT!
+ return updated
+ })
+}
+```
+
+### ✅ Use useCallback for Expensive Functions
+
+```typescript
+// ✅ Prevents recreation on every render
+const handleSubmit = useCallback((data) => {
+ // expensive operation
+}, [dependencies])
+```
+
+### ✅ Use useMemo for Expensive Calculations
+
+```typescript
+// ✅ Only recalculates when dependencies change
+const expensiveValue = useMemo(() => {
+ return data.reduce((acc, item) => acc + item.value, 0)
+}, [data])
+```
+
+## Data Persistence
+
+### Use useKV for Persistent Data
+
+```typescript
+// ✅ Data survives page refresh
+const [todos, setTodos] = useKV('user-todos', [])
+
+// ✅ ALWAYS use functional updates
+setTodos(current => [...current, newTodo])
+```
+
+### Use useState for Temporary Data
+
+```typescript
+// ✅ UI state that doesn't need to persist
+const [isOpen, setIsOpen] = useState(false)
+const [searchQuery, setSearchQuery] = useState('')
+```
+
+## TypeScript Best Practices
+
+### Use Explicit Types
+
+```typescript
+// ✅ Type all function parameters
+function processInvoice(invoice: Invoice): ProcessedInvoice {
+ // ...
+}
+
+// ❌ Avoid any
+function process(data: any) { }
+
+// ✅ Use proper types
+function process(data: InvoiceData) { }
+```
+
+### Use Type Guards
+
+```typescript
+// ✅ Type narrowing
+function isInvoice(obj: unknown): obj is Invoice {
+ return typeof obj === 'object' && obj !== null && 'invoiceNumber' in obj
+}
+```
+
+### Use Const Assertions
+
+```typescript
+// ✅ Literal types
+const status = 'approved' as const
+setTimesheet({ ...timesheet, status })
+```
+
+## Error Handling
+
+### Wrap Async Operations
+
+```typescript
+// ✅ Handle errors gracefully
+const loadData = async () => {
+ try {
+ const data = await fetchData()
+ setData(data)
+ } catch (error) {
+ console.error('Failed to load data:', error)
+ toast.error('Failed to load data')
+ setError(error)
+ }
+}
+```
+
+### Use Error Boundaries
+
+```typescript
+// ✅ Catch render errors
+
+
+
+```
+
+## Performance Optimization
+
+### Avoid Inline Functions in JSX
+
+```typescript
+// ❌ Creates new function every render
+
+
+// ✅ Use useCallback or bind
+const handleButtonClick = useCallback(() => handleClick(id), [id])
+
+```
+
+### Memo Expensive Components
+
+```typescript
+// ✅ Prevents unnecessary re-renders
+const ExpensiveComponent = memo(({ data }) => {
+ // expensive rendering
+}, (prevProps, nextProps) => {
+ return prevProps.data === nextProps.data
+})
+```
+
+### Virtual Scrolling for Large Lists
+
+```typescript
+// ✅ For lists with 100+ items
+import { useVirtualScroll } from '@/hooks/use-virtual-scroll'
+
+const VirtualList = ({ items }) => {
+ const { visibleItems, containerProps, scrollProps } = useVirtualScroll(items)
+ return (
+
+ {visibleItems.map(item => )}
+
+ )
+}
+```
+
+## Component Organization
+
+### Keep Components Under 250 Lines
+
+```typescript
+// ✅ Extract complex logic to custom hooks
+function MyComponent() {
+ const { data, actions } = useMyComponentLogic()
+ return {/* simple JSX */}
+}
+
+function useMyComponentLogic() {
+ // complex state management
+ return { data, actions }
+}
+```
+
+### Single Responsibility
+
+```typescript
+// ✅ Each component does one thing
+const UserAvatar = ({ user }) =>
+const UserName = ({ user }) => {user.name}
+const UserBadge = ({ user }) => {user.role}
+
+// Compose them
+const UserCard = ({ user }) => (
+
+
+
+
+
+)
+```
+
+## Styling
+
+### Use Tailwind Composition
+
+```typescript
+// ✅ Compose utilities
+
+```
+
+### Extract Common Patterns
+
+```typescript
+// ✅ Consistent spacing
+const cardClasses = "p-6 bg-card rounded-lg border"
+const flexRowClasses = "flex items-center gap-4"
+```
+
+### Use cn() for Conditional Classes
+
+```typescript
+import { cn } from '@/lib/utils'
+
+// ✅ Merge classes safely
+
+```
+
+## State Management with Redux
+
+### Use Typed Hooks
+
+```typescript
+// ✅ Type-safe hooks
+import { useAppSelector, useAppDispatch } from '@/store/hooks'
+
+const user = useAppSelector(state => state.auth.user)
+const dispatch = useAppDispatch()
+```
+
+### Keep Slices Focused
+
+```typescript
+// ✅ One slice per domain
+const timesheetsSlice = createSlice({
+ name: 'timesheets',
+ // only timesheet state
+})
+```
+
+### Use Redux for Global State
+
+```typescript
+// ✅ App-wide state
+- Authentication
+- UI preferences (theme, locale)
+- Current view/navigation
+
+// ✅ Component state
+- Form inputs
+- Local UI state (modals, dropdowns)
+```
+
+## Accessibility
+
+### Semantic HTML
+
+```typescript
+// ✅ Use semantic elements
+
+
+// ❌ Avoid div soup
+
Click me
+
+// ✅ Use button
+
+```
+
+### ARIA Labels
+
+```typescript
+// ✅ Label interactive elements
+
+```
+
+### Keyboard Navigation
+
+```typescript
+// ✅ Support keyboard
+