A React 18 + TypeScript + Vite build of the public wall for everything people are tired of re-explaining to AI every single session.
- React 18 + TypeScript
- Plain CSS in
src/styles.css - Supabase for storage + realtime
- Anthropic Claude via
api/categorize.ts - Vercel for deployment
- Install dependencies:
npm install-
Run the SQL in
supabase.sqlin your Supabase SQL editor. -
Fill in
.env:
VITE_SUPABASE_URL=https://xxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJ...- Start the frontend:
npm run devNotes:
- The app will still submit locally if
/api/categorizeis unavailable by falling back to a lightweight client-side category guess. - To exercise the real Claude path locally, run the app through Vercel dev tooling instead of plain Vite.
- Add
CLAUDE_API_KEYin the Vercel dashboard. - Deploy:
npx vercel --prod- Confirm:
- submissions load from Supabase
- voting increments once per browser
- opening two tabs reflects new submissions in realtime
POST /api/categorizereturns{ "category": "..." }
src/App.tsxcoordinates state, filtering, voting, toasts, and sharingsrc/componentscontains the UIsrc/lib/supabase.tswraps all data accesssrc/lib/fingerprint.tshandles local vote dedupapi/categorize.tskeeps the Claude key server-side