A modern React + Vite app that loads CSSBattle battle and daily targets from Supabase, with a responsive grid, theme switch, and client-side cache.
- React 18
- Vite 5
- Supabase JavaScript client
- ESLint 9 (flat config)
- Node.js 20 or newer
- npm 10 or newer
Copy-Item .env.example .env
# then set VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY
npm install
npm run devnpm run dev # start development server
npm run build # create production build in dist/
npm run preview # preview the production build locally
npm run lint # run ESLint- Source tables:
battle_targets,daily_targets - Mode switch in UI: Battle / Daily
- Cache strategy: localStorage per mode
- Revalidation windows (UTC):
01:00and18:00
- Use only the Supabase anon key in frontend apps.
- Never expose the Supabase service role key in this project.