avatar
The Stack Behind My Portfolio & What I’d Do Differently
April 8, 2025
7 min read

The Stack Behind My Portfolio & What I’d Do Differently

⚡ Building My Portfolio: Clean, Fast & Dev-Centric

My goal wasn’t just to create a personal website — I wanted something that felt lightning-fast, looked modern, and stayed developer-friendly under the hood. The kind of portfolio I’d actually enjoy maintaining and extending.

Developer Portfolio UI

🛠️ Stack Breakdown

  • Frontend: Next.js + React + TypeScript — for speed, scalability, and static generation.
  • Styling: Tailwind CSS + Shadcn UI — utility-first CSS with composable components that actually look good out of the box.
  • Animations: Framer Motion — smooth transitions, page fades, and micro-interactions.
  • Deployment: Vercel — one push to deploy, with instant preview URLs for every branch.

This setup gives me the flexibility of a full app while still feeling like a static site. Perfect for a portfolio.

🔁 Example: Dynamic Blog Routing

I wanted my blog to feel seamless, but still statically generated for speed and SEO. Here's how I handle dynamic routes for blog posts:

// pages/blog/[slug].tsx

export async function getStaticPaths() {
  const paths = getAllSlugs()
  return { paths: paths, fallback: false }
}

export async function getStaticProps({ params }) {
  const post = getPostBySlug(params.slug)
  return { props: { post: post } }
}

This makes every blog post a statically rendered page with blazing speed and zero runtime cost.

Blog page generation

🎨 Visual Consistency with Tailwind + Shadcn

I didn’t want to wrestle with design systems or custom themes, so I leaned on Shadcn UI. It plays beautifully with Tailwind and lets me create things like modals, cards, and forms that feel consistent and polished.

{/* components/ui/button.tsx */}  
import { Button } from "@/components/ui/button";

export default function ContactCTA() {
  return (
    <Button className="rounded-2xl px-6 py-3 text-base font-medium">
      Let’s Talk
    </Button>
  )
}

Just plug and play. And everything responds beautifully across devices.

💨 Animations Without the Overkill

I love a subtle page fade or a component that glides into view — but I don’t want a full-blown animation studio on my site. With Framer Motion, I got just the right amount of polish:

import { motion } from "framer-motion";

export default function PageWrapper({ children }) {
  return (
    <motion.div
      initial={ opacity: 0 }
      animate={ opacity: 1 }
      exit={ opacity: 0 }
      transition={ duration: 0.3 }
    >
      {children}
    </motion.div>
  )
}

Pages fade in cleanly, modals scale in with elegance, and I can tune every detail if I want to.

🚀 Vercel = Zero DevOps

Each push triggers a deployment. I get instant feedback, preview links for PRs, and analytics built-in. Hosting on Vercel lets me focus on building — not setting up CI pipelines or servers.

Vercel deploy preview screenshot

🧠 Final Thoughts

This portfolio was built with developers in mind — but also future-me. It’s fast to load, easy to update, and doesn’t require me to Google how it works every time I want to tweak a page. Mission accomplished.

If you're building your own, don't overcomplicate it. Start small, pick the tools you enjoy, and make something you're proud to share.