An ultra-premium, highly animated personal portfolio for Sifat Hasan (Tawhid Hassan Sifat), Senior Flutter Developer & Software Engineer.
Built for polish: glassmorphism, smooth scrolling, scroll-linked animations, a magnetic custom cursor, particle fields, and seamless dark/light theming.
| Concern | Choice |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS v4 (CSS-first tokens) |
| Animation | Motion (Framer Motion v12) + GSAP ScrollTrigger |
| Smooth scroll | Lenis (synced to GSAP ticker) |
| Theming | next-themes — dark by default, View Transitions wipe |
| Icons | lucide-react + custom brand SVGs |
npm install
npm run dev # http://localhost:3000
npm run build # production build
npm start # serve production build
All content lives in a single source of truth:
src/lib/data.ts
Update profile, social links, experience, skills, projects, achievements, education, and SEO metadata there — every section reads from it.
Set your production domain in siteMeta.url (used by metadata, sitemap, robots).
src/
├── app/ # routes, layout, globals, SEO (sitemap/robots/manifest/og)
├── components/
│ ├── providers/ # ThemeProvider, SmoothScroll (Lenis + GSAP)
│ ├── layout/ # Navbar, Footer, Preloader
│ ├── sections/ # Hero, About, Experience, Skills, Projects, Achievements, Contact
│ └── ui/ # reusable primitives (cards, cursor, buttons, text, ...)
├── hooks/ # useMediaQuery, useMounted, useMousePosition
├── lib/ # data.ts (content), motion.ts (variants), utils.ts
└── types/ # global type augmentations
The contact form composes a mailto: to the configured email. Swap the handler
in src/components/sections/Contact.tsx for an API route or a service like
Resend / Formspree when a backend is available.
© Tawhid Hassan Sifat