A personal portfolio site for Md. Fahim Hassan, a Computer Science & Engineering student at BRAC University. Built as a full-stack TanStack Start app with a hand-crafted "deep space / terminal" aesthetic — animated starfield background, glassmorphism cards, and a monospace-accented UI — showcasing education, experience, skills, and projects.
Live site: https://personal-portfolio-rho-lac-91.vercel.app/
| Layer | Choice |
|---|---|
| Framework | TanStack Start (SSR) + TanStack Router (file-based routing) |
| UI | React 19, Tailwind CSS 4 |
| Data/state | TanStack Query |
| Icons | lucide-react |
| Contact form | EmailJS (client-side, no backend needed) |
| Build tool | Vite, bundled via @lovable.dev/vite-tanstack-config |
| Runtime target | Nitro (deploys cleanly to Vercel, Cloudflare, Netlify, etc.) |
This project originated in Lovable and was exported to this repo. The Lovable-specific runtime helpers (
src/lib/error-page.ts,src/lib/error-capture.ts) provide a graceful fallback error page for SSR failures and are framework-level, not editor-only — they're kept intentionally.
src/
├── assets/ # Static images (profile photo, etc.)
├── components/ # Page sections (Hero, About, Experience, Skills, Projects, Contact, ...)
├── hooks/ # use-typewriter (Hero heading animation)
├── lib/ # SSR error-handling helpers
├── routes/ # File-based routes (__root.tsx = app shell, index.tsx = home page)
├── router.tsx # Router + QueryClient setup
├── server.ts # SSR server entry
├── start.ts # TanStack Start config + error middleware
└── styles.css # Tailwind theme tokens & global styles
- Node.js 18+ (or Bun — this repo ships a
bunfig.toml)
git clone https://github.com/MdFahimHassan/PersonalPortfolio.git
cd PersonalPortfolio
npm install # or: bun install
cp .env.example .envFill in .env with your own EmailJS service ID, template ID, and public key so the contact form can send mail. See Environment variables below.
npm run dev # or: bun run devOpens at http://localhost:3000 (TanStack Start's dev server) with hot module reload.
npm run build
npm run preview| Variable | Description |
|---|---|
VITE_EMAILJS_SERVICE_ID |
EmailJS service ID |
VITE_EMAILJS_TEMPLATE_ID |
EmailJS template ID |
VITE_EMAILJS_PUBLIC_KEY |
EmailJS public (client-side) key |
These are EmailJS's public/client keys, meant to ship in the browser bundle — but keep your real .env out of git (it already is, via .gitignore), and restrict allowed origins for your EmailJS service in the EmailJS dashboard so only your deployed domain can send through it.
The app builds via Nitro, so it deploys with zero extra config to most platforms that support Node/SSR output:
- Vercel — import the repo at vercel.com/new; framework is auto-detected.
- Cloudflare / Netlify — supported via Nitro presets if you need a different target.
Remember to add the same environment variables from .env.example in your hosting provider's dashboard.
The code in this repository is licensed under the MIT License — feel free to use it as a reference or starting point for your own portfolio.
This does not extend to personal content: my name, bio, photo, resume/CV details, and project descriptions are not licensed for reuse — please swap those out with your own if you fork this.
