- Create
client/src/hooks/useIntersectionObserver.ts— reusable IntersectionObserver hook - Modify
client/src/pages/Home.tsx— infinite scroll, sentinel, spinner, scroll position preservation - Run
npm run buildin client to verify zero TypeScript errors (our files compile cleanly; 13 pre-existing errors in other files)
- Next page loads automatically when sentinel is visible
- Scroll position is preserved on back navigation via sessionStorage
- "No more raffles" indicator shown at end of list
- No duplicate cards between pages (deduplicated via Map by id)