Developer Portfolio
All Projects
Astro Tailwind CSS GSAP

Developer Portfolio

Animation-driven personal portfolio and blog built with Astro, Tailwind CSS, and GSAP

01

Overview

A statically-generated developer portfolio website that showcases projects, technical skills, work experience, and a Markdown-powered blog. Built with Astro 5 for fast static output, styled with Tailwind CSS v4 and DaisyUI, and enhanced with GSAP scroll-triggered animations and Lenis smooth scrolling. Deployed automatically to GitHub Pages via a Bun-based CI/CD pipeline.

02

Problem & Solution

The Problem

Generic portfolio templates lack personality and performance. Most are either over-engineered SPAs that hurt load times, or static HTML pages with no interactivity. A developer portfolio needs to be fast, visually engaging, easy to maintain, and simple to extend with new projects and blog posts.

The Solution

Built a static site with Astro 5 that ships zero JavaScript by default and hydrates only the interactive React islands that need it. Projects are defined as typed data objects for easy updates, blog posts are authored in Markdown with syntax highlighting, and GSAP handles scroll-driven motion design without compromising performance.

03

Tech Stack

Astro 5

Astro's island architecture ships zero client JS by default and only hydrates interactive components, keeping the portfolio fast while still supporting React where needed.

React 19

Used for interactive UI primitives (buttons, cards) via shadcn/ui, hydrated as Astro islands only where interactivity is required.

Tailwind CSS 4 + DaisyUI 5

Provides the utility-first styling system and the dark-mode 'forest' theme, keeping the design consistent without writing custom CSS.

GSAP + ScrollTrigger

Powers the scroll-triggered reveal animations and the sequenced hero entrance timeline, giving the site a polished motion design layer.

Lenis

Adds smooth inertial scrolling synced with GSAP's ticker for a buttery scroll experience across the entire site.

Bun + GitHub Actions

Bun handles dependency installation and builds. A GitHub Actions workflow deploys the static output to GitHub Pages on every push to main.

04

Key Features

  • Data-driven project gallery with typed project definitions and featured filtering
  • Markdown blog with Astro Content Collections and Shiki syntax highlighting
  • GSAP scroll-triggered reveal animations with directional variants (left, right, up, down)
  • Sequenced hero entrance timeline animation
  • Lenis smooth scrolling integrated with GSAP ticker
  • SEO-ready with Open Graph and Twitter Card meta tags per page
  • Responsive sidebar navigation with DaisyUI forest theme
  • Automated CI/CD deployment to GitHub Pages via GitHub Actions
  • Reading time estimation for blog posts
05

Challenges & Learnings

#01

Coordinating GSAP with Astro page transitions

Astro's client-side navigation fires astro:page-load events that require re-initialising GSAP timelines and ScrollTrigger instances. Lenis also needs to be destroyed and recreated on each navigation to avoid stale scroll state.

#02

Balancing zero-JS defaults with interactive islands

Astro ships no JavaScript by default, so React components like shadcn/ui buttons and cards need explicit hydration directives. Deciding which components need client-side interactivity versus static rendering required careful scoping.

#03

Respecting reduced motion preferences

All GSAP animations check prefers-reduced-motion before running, ensuring the site remains accessible to users who have motion sensitivity without maintaining a separate animation-free codebase.