Skip to main content
Cade White
Back to Blog
Development
Lessons
Tips

Building This Portfolio: Lessons Learned

March 20, 2026
6 min read

Building a portfolio sounds simple — until you actually do it. Here's what I learned along the way, including the mistakes I made and how I fixed them.

Lesson 1: Environment Variables Will Humble You

Everything worked perfectly on localhost. Then I deployed to Vercel and... nothing. The contact form failed silently. reCAPTCHA threw errors.

The problem? I forgot to add my environment variables to Vercel. Your local `.env` file doesn't magically appear in production. You have to manually add each variable in your hosting platform's dashboard.

Tip: Set up your production environment variables BEFORE you deploy, not after you're debugging why everything is broken.

Lesson 2: reCAPTCHA Domains Are Strict

Even after adding my environment variables, reCAPTCHA still failed. Turns out, Google reCAPTCHA requires you to whitelist every domain that will use your keys — including your Vercel preview URLs.

I had to add: - `localhost` (for development) - My production domain - `vercel.app` (for preview deployments)

Tip: When using third-party services with domain restrictions, add ALL your domains upfront.

Lesson 3: Accessibility Isn't Optional

I initially built the site without thinking much about accessibility. Then I learned about ARIA attributes, skip links, and keyboard navigation. Adding these after the fact took more time than if I'd built them in from the start.

What I added: - Skip to main content link - Proper ARIA labels on interactive elements - Focus indicators for keyboard users - `aria-current="page"` for navigation - Live regions for form status messages

Tip: Build with accessibility in mind from day one. It's easier than retrofitting.

Lesson 4: Mobile Navigation Is Its Own Beast

Desktop nav is easy — just a row of links. Mobile nav requires state management, animations, click-outside-to-close behavior, and making sure links actually close the menu when clicked.

I used React's `useState` for the toggle and added an effect to close the menu on route changes. Simple in hindsight, but it took some iteration.

Lesson 5: Ship It, Then Improve

I could have spent another month adding features. Instead, I launched with a solid foundation and a plan to iterate. A live portfolio that's 90% polished beats a perfect portfolio that never ships.

Final Thoughts

Building this portfolio taught me more than any tutorial could. Real projects have real problems — domain issues, environment variables, edge cases. That's where the learning happens.

If you're building your own portfolio, my advice: start simple, deploy early, and fix problems as they come. You'll learn more from debugging production issues than from following along with a YouTube video.

Good luck!