A personal portfolio website built with React + Vite, styled using Tailwind CSS and shadcn/ui, with subtle animations via Framer Motion.
This portfolio presents my background as a Data Engineer with a focus on geospatial, climate, and environmental data, highlighting selected projects, skills, education, and interests.
Detailed professional experience is intentionally kept in the downloadable CV.
👉 https://sukanto54cl.github.io/portfolio/
- Responsive, mobile-first design
- Dark / Light mode (follows system preference)
- Smooth animations with Framer Motion (respects
prefers-reduced-motion) - SEO-ready — meta description, Open Graph, and Twitter Card tags
- Functional contact form powered by EmailJS
- Downloadable resume
- Dockerized production build with Nginx
- React (TypeScript) — UI development
- Vite — fast build tool & dev server
- Tailwind CSS — utility-first styling
- shadcn/ui — accessible UI components
- Framer Motion — subtle animations
- EmailJS — contact form backend
- Lucide React — icon set
- Radix UI Icons — UI icons
- Docker (Nginx, multi-stage build)
Build the image
docker build -t portfolio .Run the container
docker run -p 8080:80 portfolioClone the repository and run:
npm installCopy .env.example to .env.local and fill in your EmailJS credentials (required for the contact form):
cp .env.example .env.localThen start the dev server:
npm run devThe site will be available at http://localhost:5173
This project is automatically deployed to GitHub Pages using GitHub Actions.
- On every push to
main, a CI pipeline runs linting and build checks - If successful, the site is built with the GitHub Pages base path and deployed automatically
The source code of this project is licensed under the MIT License.
The content of this portfolio (text, CV, images, and project descriptions) is personal and may not be reused verbatim without permission.
portfolio/
├── LICENSE
├── index.html
├── .env.example # Required env vars for EmailJS
├── src/
│ ├── Portfolio.tsx # Main portfolio component (all content + logic)
│ ├── App.tsx # Renders <Portfolio />
│ ├── main.tsx # React entry point
│ ├── index.css # Tailwind styles
│ └── components/
│ └── ui/ # shadcn/ui components
├── public/
│ ├── cv_sukanto_das.pdf # Resume (downloadable)
│ ├── sukanto_das.jpg # Profile photo
│ └── favicon.svg # Branded SD favicon
├── vite.config.ts
├── tailwind.config.js
├── tsconfig*.json
└── package.json