Anthony Tran

Maintained · Nov 2024 – Jan 2025

Portfolio v1

My portfolio, built with Next.js and ShadCN. It has a contact form with spam protection and deploys automatically on Vercel.

  • Next.js
  • TypeScript
  • ShadCN
The first portfolio's hero: my name and role in white text over a dark starfield.

Overview

I built this site to show my work. It also taught me a lot about integrations like Formspree, Vercel and reCAPTCHA.

I wanted one place for my story as a software engineer, my projects and a way to reach me. I also got my own domain, ant03, a play on my name.

Goals

The site needed to:

  • Deploy automatically on every push.
  • Catch bad code before it reaches the repository.
  • Accept messages without letting spam through.
  • Respect prefers-reduced-motion.

How I built it

I chose Next.js for static generation and file-based routing. I came from Svelte, so the App Router felt familiar. I used ShadCN for accessible components I could customize, with TypeScript throughout.

Husky runs ESLint and Prettier before every commit, so errors get caught early. I deployed on Vercel with GitHub Actions. Every commit builds and deploys on its own, and the site runs on my own domain.

For the contact form I used Formspree with reCAPTCHA v3 to block spam. Zod checks the input before anything is sent.

What I learned

The integrations taught me more than the layout did. Connecting a form service, a spam check and a deploy pipeline felt like building a real application.