Portfolio and gallery app for Dustin Lapuz built with Next.js 16, React 19, and Supabase.
- Cinematic marketing homepage with current collection highlights
- Collection galleries with popup viewing, sharing, and full-gallery ZIP downloads
- Supabase-backed admin panel for captions, featured picks, and sort order
- Supabase-backed booking request form surfaced on the public site
- Optional hosted payment/deposit CTA via
NEXT_PUBLIC_BOOKING_DEPOSIT_URL
- Install Node.js 20+.
- Copy
.env.exampleto.env.local. - Fill in:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYNEXT_PUBLIC_BOOKING_DEPOSIT_URLif you want a hosted Stripe or payment-link CTA
- Apply
supabase-schema.sqlin Supabase SQL Editor. - Install dependencies with
npm install. - Run
npm run dev.
npm run dev: prepare gallery assets and start the webpack dev servernpm run dev:turbopack: prepare gallery assets and start the default Next dev servernpm run build: prepare gallery assets and create a production buildnpm run lint: run ESLint
The schema creates:
admin_usersfor admin accesscollection_photosfor captions, featured picks, and custom sort orderbooking_requestsfor public booking leads
After creating the admin user in Supabase Auth, insert that user into admin_users so the /admin route can authenticate correctly.
This project is set up for hosted payment links instead of a custom checkout flow. Put a Stripe Payment Link or other hosted deposit URL into NEXT_PUBLIC_BOOKING_DEPOSIT_URL and the public site will expose a reserve-coverage CTA automatically.
If you later want full cart or per-photo checkout, add a server-side checkout session route and keep the current payment-link CTA as the fallback.
Vercel is the easiest deployment target.
- Import the repo into Vercel.
- Add the same environment variables from
.env.local. - Make sure the build command stays
npm run build. - Deploy once so
prepare-gallery-assets.mjscopiesimages/intopublic/collections/during build. - In Supabase Auth, set the site URL and email redirect URL to your production domain.
- Confirm
/auth/confirm,/admin, gallery downloads, and booking requests work on the deployed URL.
This repo includes local agent instructions noting that this Next.js version has breaking changes relative to older releases. Before making future framework-level changes, read the relevant guide in node_modules/next/dist/docs/ after dependencies are installed.