Premium, showcase-first portfolio + shop website for a Roblox Developer, UI Designer, and active Software Engineering student.
Live site: https://www.rehan.codes
- React
- TypeScript
- Vite
- Tailwind CSS
- Framer Motion
- React Router
- Firebase Authentication
- Polar-ready checkout architecture
- shadcn/ui primitive
- Rebuilt the app into a routed portfolio/shop product instead of a single scrolling landing page.
- Made Roblox work the primary conversion path with case-study style project pages.
- Added a secondary shop experience with product detail pages and Polar handoff structure.
- Added real Firebase frontend auth scaffolding with email/password, Google sign-in, persistent sessions, password reset, and a protected dashboard route.
- Centralized editable content into typed data files so projects, products, services, testimonials, and navigation are easy to update.
- Added route-level code splitting, lazy media handling, semantic metadata, and recruiter/client-ready page structure.
npm install
cp .env.example .env.local
npm run devProduction build:
npm run buildConfigure Firebase to enable live auth:
VITE_FIREBASE_API_KEY=
VITE_FIREBASE_AUTH_DOMAIN=
VITE_FIREBASE_PROJECT_ID=
VITE_FIREBASE_STORAGE_BUCKET=
VITE_FIREBASE_MESSAGING_SENDER_ID=
VITE_FIREBASE_APP_ID=
VITE_FIREBASE_MEASUREMENT_ID=Polar checkout links:
VITE_POLAR_SUCCESS_URL=https://www.rehan.codes/shop/success?checkout_id={CHECKOUT_ID}
VITE_POLAR_CANCEL_URL=https://www.rehan.codes/shop/cancel
VITE_POLAR_CHECKOUT_TOWER_DEFENSE_CORE_KIT=
VITE_POLAR_CHECKOUT_PREMIUM_SHOP_UI_PACK=
VITE_POLAR_CHECKOUT_PROGRESSION_TEMPLATE_BUNDLE=
VITE_POLAR_CHECKOUT_CREATOR_ASSET_PACK=src/
├─ app/ # root providers
├─ animations/ # shared motion config
├─ components/
│ ├─ auth/ # auth UI + protected route
│ ├─ common/ # SEO, media, section headings, icons
│ ├─ forms/ # contact form section
│ ├─ layout/ # header, footer, routed shell
│ ├─ sections/ # homepage / explorer sections
│ └─ ui/ # shadcn primitives
├─ context/ # auth context
├─ data/ # editable site content
├─ hooks/ # auth hook
├─ lib/ # Firebase, Polar, SEO, contact helpers
├─ pages/ # route-level pages
└─ types/ # shared content types
Most content edits happen in src/data/site.ts:
- Update hero copy and trust metrics.
- Add/remove projects and case study content.
- Add products, pricing labels, tags, and future Polar checkout URLs.
- Update services, testimonials, socials, and about timeline entries.
- Auth is real frontend auth, not mocked.
- The site will compile without Firebase env vars, but sign-in actions will stay disabled until configured.
- Persistent sessions are enabled through
browserLocalPersistence. - Protected routes are handled by ProtectedRoute.tsx.
- No fake backend checkout logic was added.
- All storefront products can resolve directly to Polar checkout links from env vars.
- Product cards resolve to either a direct Polar checkout URL or a disabled buy state until the Polar link is configured.
- Use checkout links like
https://buy.polar.sh/polar_cl_...in the Vite frontend. - Do not put
POLAR_ACCESS_TOKENor anypolar_oat_...value inVITE_...variables. Those are server secrets, not client checkout links. VITE_POLAR_SUCCESS_URLandVITE_POLAR_CANCEL_URLare appended to checkout links assuccess_urlandcancel_urlredirect parameters.- Dedicated storefront return routes are available at
/shop/successand/shop/cancel. - To activate direct purchases, add
polarCheckoutUrlvalues in site.ts. - The current shop products read their checkout links from
.envso you can paste Polar checkout URLs without touching layout code. - For future server-backed checkout sessions, extend polar.ts.
- Order sync, webhook fulfillment, gated downloads, and customer records should be added on a backend layer later.
- Project and product data already support video URLs plus poster fallbacks.
- Drop real showcase clips into
public/media/and replace the placeholder paths in site.ts. - If a video is missing, the UI falls back cleanly to poster imagery instead of breaking the layout.
- Email: rorehxn@gmail.com
- GitHub: github.com/RehanMehtaIND
- LinkedIn: linkedin.com/in/rehan-mehta-31039a362