The production portfolio for Amir Mohammad Akbarpour, a software engineer working across full-stack product systems, applied machine learning, computer vision, and developer tooling.
Live site: akbarpour.dev
- Editorial, portrait-led interface with responsive GSAP motion
- Lenis smooth scrolling synchronized through the GSAP ticker
- Custom cursor, magnetic interactions, and single-rAF project previews
- Dual-curtain project transitions and scroll restoration
- Static case studies for Abniran, BSEZ, Hojir, and Flect
- Environment-driven Telegram contact delivery
- Reduced-motion and keyboard-accessible fallbacks
Requires Node.js 20.9 or newer.
git clone https://github.com/aakbarpour/portfolio.git
cd portfolio
npm install
cp .env.example .env.local
npm run devThe contact form sends a formatted private message through Telegram. Create a bot with @BotFather, send the bot a message (or add it to the destination group), and set these server-only variables in .env.local:
TELEGRAM_BOT_TOKEN=123456:replace-with-your-token
TELEGRAM_CHAT_ID=replace-with-your-user-or-group-idNever prefix either value with NEXT_PUBLIC_; both secrets must remain server-side.
The supplied transparent portrait is stored at:
public/me/amir-portrait.png
Next.js generates responsive AVIF/WebP variants for the hero and About compositions.
Vercel detects the Next.js app automatically, so no custom build adapter is required. Import the repository, keep the default build command (npm run build), and add TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID under Project Settings → Environment Variables for Production and Preview. Redeploy after adding or changing either secret.
npm run lint
npx tsc --noEmit
npm run build| Command | Purpose |
|---|---|
npm run dev |
Start the local development server |
npm run build |
Create a production build |
npm run start |
Serve the production build |
npm run lint |
Run ESLint |
Based on the open-source portfolio by Aitezaz Sikandar and customized under its MIT license. The upstream copyright and license notice remain in LICENSE.