Prerequisites
Before you begin, make sure you have:- Node.js 18+ — Download from nodejs.org
- npm (bundled with Node.js)
- Git
- A Supabase account — supabase.com (free tier works)
- A Cloudflare account with R2 enabled — cloudflare.com
Setup steps
Install dependencies
Create your environment file
Create a See Environment Variables for details on where to find each value.
.env.local file in the project root:.env.local
Set up your Supabase project
- Create a new Supabase project at app.supabase.com
- Go to Settings → API and copy your Project URL and anon public key
- Create the
registrationstable — the schema is documented in Supabase Integration - Enable Google OAuth under Authentication → Providers → Google for admin access
- Add
http://localhost:3000/auth/callbackas an allowed redirect URL
Set up Cloudflare R2
- In the Cloudflare dashboard, go to R2 → Create bucket
- Name your bucket (e.g.,
rajat-mahotsav-uploads) - Go to R2 → Manage R2 API Tokens → Create API Token
- Select Object Read & Write permissions scoped to your bucket
- Copy the Access Key ID, Secret Access Key, and S3 API endpoint
Start the development server
Available scripts
| Command | Description |
|---|---|
npm run dev | Start the development server with hot reload |
npm run build | Create a production build |
npm start | Start the production server (requires npm run build first) |
npm run lint | Run ESLint (note: disabled during builds) |
Build configuration
Thenext.config.mjs has several notable settings:
next.config.mjs
ESLint and TypeScript errors are ignored during builds because the project uses the Cloudflare CDN for image optimization rather than Next.js Image Optimization. Run
npm run lint separately during development.TypeScript path aliases
The project uses path aliases defined intsconfig.json for clean imports:
| Alias | Resolves to |
|---|---|
@/components | /components |
@/lib | /lib |
@/hooks | /hooks |
@/contexts | /contexts |
@/utils | /utils |
Example usage
Custom fonts
The project uses three font families via CSS variables:| Variable | Font | Usage |
|---|---|---|
--font-figtree | Figtree | Default sans-serif body text |
--font-instrument-serif | Instrument Serif | Decorative headings |
--font-gujarati | Noto Sans Gujarati | Gujarati script text |
Styling system
The project uses Tailwind CSS v4 with a custom color palette. Custom preset colors defined in global CSS:| Token | Usage |
|---|---|
preset-deep-navy | Primary dark background |
preset-navy-accent | Navigation and card backgrounds |
preset-zodiac-blue | Accent blue |
preset-light-gray | Light text on dark backgrounds |
preset-red | Brand red (#df212b) |
preset-bluish-gray | Subtle borders and dividers |
