A premium, mobile-first Next.js app for Beat Drops Music Class in Bhubaneswar with:
- public marketing website
- admission inquiry form
- Google login foundation for student/admin access
- Supabase-ready schema, seed data, and route protection structure
- Beautiful public website pages:
//about/courses/gallery/admission/contact/login/student/dashboard/admin/dashboard
- Public admission inquiry form with validation
- API route scaffold at
/api - Supabase-ready SQL schema and seed data in
/supabase - Middleware-based route protection for private dashboard routes
- Google OAuth callback route scaffold
- Vercel-ready env example
These flows are coded but require the remaining credential/config setup to work live:
- saving admission form directly into Supabase
- admin live dashboard summaries and lead management
- full Google Sign-In session flow
- gallery/banner storage upload management
Create .env.local or set these in Vercel:
NEXT_PUBLIC_BASE_URL=https://your-vercel-domain.vercel.app
NEXT_PUBLIC_SUPABASE_URL=https://pvpbnmslpkbiahvzkgps.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key_here
# or use publishable key if your Supabase project uses it
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your_publishable_key_here
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key_here
ADMIN_ACCESS_CODE=your_admin_access_code_hereOpen Supabase SQL Editor and run:
supabase/schema.sqlsupabase/seed.sql
Inside Supabase:
- Authentication → Providers → Google
- enable Google provider
- add Google Client ID + Client Secret
- set redirect URLs for:
http://localhost:3000/**- your Vercel preview URL
- your production domain
The seed file already prepares this admin email:
beatdrops2022@gmail.com
After the first Google login, the trigger links the auth user automatically by email.
Create public buckets:
gallerybanners
Then add storage policies for authenticated admin uploads.
yarn installThe app already runs under supervisor in this environment.
- Admission form submits to
/api/admission - If
SUPABASE_SERVICE_ROLE_KEYis missing, the API returns a helpful setup error instead of silently failing - The code supports either:
NEXT_PUBLIC_SUPABASE_ANON_KEYNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
Once the remaining Supabase key is added, the next best step is:
- live admin CRUD for leads/students/media
- Supabase storage upload UI for gallery and banners
- final branding assets and real testimonials