Kidrove Workshop is a responsive React landing page for the AI & Robotics Summer Workshop with a validated registration form and a Supabase-backed enquiry flow.
- Hero section with workshop title, description, and enroll CTA
- Workshop details cards
- Learning outcomes section
- FAQ accordion
- Registration form with validation and loading state
- Express
POST /api/enquiryendpoint - Supabase storage for workshop enquiries
- Mobile-first, Vercel-ready setup
- React + Vite
- Framer Motion
- React Hook Form + Zod
- Express.js
- Supabase
- Tailwind CSS
src/pages/WorkshopLanding.jsx- the workshop landing pageapi/enquiry.js- serverless API entry pointapi/enquiry-service.js- shared enquiry logic and Supabase insertapi/enquiry-core.js- validation and response helperssupabase/workshop_enquiries.sql- table + RLS migrationVERCEL_DEPLOYMENT.md- copy-paste deployment guidePRD.md- project requirements doc
- Install dependencies:
npm install- Create
.env.localin the project root:
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_URL=your_supabase_project_url
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key- Run the app:
npm run devOpen:
http://127.0.0.1:4173/- Optional backend-only run:
npm run serve:enquiryRun the SQL in supabase/workshop_enquiries.sql inside the Supabase SQL Editor if the table is not already present.
This creates:
workshop_enquiries- row level security
- RLS policies for
service_roleand authenticated read access
npm run lint
npm run buildThe form submits to POST /api/enquiry and stores the enquiry in Supabase.
SUPABASE_SERVICE_ROLE_KEYstays in.env.localonly.- Do not commit secrets to GitHub.
- Rotate the service role key if it was ever shared externally.
I built a responsive workshop landing page with clear hierarchy, child-friendly visuals, and a complete enquiry flow. The page includes workshop details, learning outcomes, FAQs, and a validated registration form. The backend uses an Express endpoint that saves enquiries into Supabase with RLS enabled. If I had more time, I would add email confirmations, an admin dashboard, and automated follow-up workflows.