Studio TFA (The Fearlessly Authentic) is a premium, mission-driven Christian creative studio and headless e-commerce platform built with Next.js, Supabase, and modern React tooling. The site blends editorial storytelling with commerce, allowing visitors to browse products, sign in, manage carts and checkout, submit reviews, and access role-aware admin and wholesale experiences.
- A home experience focused on brand storytelling and featured products.
- Product browsing, product detail pages, cart, and checkout flows.
- Authentication with email/password and OAuth callback handling through Supabase.
- Admin dashboards for products, orders, returns, users, and access controls.
- Wholesale and artist-facing pages with role-based visibility.
- Community, refunds, shipping, privacy policy, terms of service, and about pages.
- Email support for order confirmations and payment-related notifications.
- Supabase Storage-backed uploads for product and review photos.
- Framework: Next.js 16.2.1 with App Router
- Language: TypeScript 5
- UI: React 19, Tailwind CSS 4, shadcn/ui, Radix UI, Lucide React
- Motion: Framer Motion, Lenis, GSAP
- State: Zustand with localStorage persistence for cart state
- Backend: Supabase Auth, PostgreSQL, Storage, and SSR clients
- Email: Resend and React Email
- Payments: Razorpay integration
/- landing page and featured product entry point/collectionsand/collections/[category]- product browsing and category views/product/[id]- product detail, reviews, and add-to-cart actions/checkout- checkout flow/login,/register,/auth/callback- authentication flows/community- customer photo review gallery/artists-corner- artist-facing content and actions/wholesale- wholesale experience/admin- admin dashboard/admin/products,/admin/orders,/admin/returns,/admin/users,/admin/access,/admin/custom-orders- admin sub-sections/about,/shipping,/refunds,/privacy-policy,/terms-of-service,/access-denied,/not-found
src/app- App Router pages, layouts, route handlers, and server actionssrc/components- reusable UI components and page sectionssrc/components/admin- admin-specific UIsrc/components/checkout- checkout-specific UIsrc/lib- shared business logic, Supabase helpers, payments, security, and utilitiessrc/actions- server actions for cart, checkout, and custom order workflowssrc/store- client state stores such as the cart storesrc/emails- React Email templatessupabase- SQL migrations and schema upgrades
Quick start:
- Install dependencies with
npm install. - Create
.env.localfrom.env.example. - Run the app with
npm run dev.
Install dependencies:
npm installRun the development server:
npm run devOpen http://localhost:3000 in your browser.
Other scripts:
npm run build
npm run start
npm run lintCreate a .env.local file in the repository root and set the values required by the features you use.
Core Supabase variables:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYNEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEYorNEXT_PUBLIC_SUPABASE_ANON_KEYas fallback keysSUPABASE_SERVICE_ROLE_KEY
Application and auth variables:
NEXT_PUBLIC_SITE_URLMASTER_ADMIN_EMAILMASTER_ADMIN_ALLOWED_IPS
Email variables:
RESEND_API_KEYRESEND_FROM_EMAIL
Payments variables:
RAZORPAY_KEY_IDorNEXT_PUBLIC_RAZORPAY_KEY_IDRAZORPAY_KEY_SECRETRAZORPAY_WEBHOOK_SECRET
- The app is built around the Next.js App Router and uses server actions for mutations.
- Supabase is used for authentication, storage, and database reads and writes.
- Admin and role-aware areas rely on server-side authorization checks.
- Public webhooks live under
src/app/apiwhere needed. - The design language is editorial, minimal, and brand-led rather than a generic SaaS layout.
- Global styling and brand tokens live in
src/app/globals.css.
DESIGN.mddescribes the visual direction and narrative flow.INFRASTRUCTURE-AND-PRD.mdcovers the broader architecture, feature set, and platform requirements..github/instructions/Studio tfa.instructions.mdcontains project-specific coding rules and conventions.
The project is structured for deployment on Vercel with Supabase as the backend. Before deploying, confirm that production environment variables are set and that Supabase, email, and payment webhook settings match the live domain.