Hello, my name is Andrew!

I'm a full-stack web developer.

I'd love to help you convert ideas into fast, functional, and user-friendly web applications.

Where I Shine

A briefcase with a cog in front of it.
Git logoJira logoAWS logoFigma logo

An Extensive Toolbelt

With over a decade of experience across nearly all facets of development, I've come to know which tools solve problems—rather than create them.
A two-dimensional laptop with the outline of an eye over it.
Vue logoReact logoTypescript logoSASS logo

Front-End

I love reusability! I craft front-ends to scale over the product lifecycle, rather than relying on duct tape or tangled stylesheets!
A web page with a cog overlayed on top of it.
PHP logoLaravel logoNode.js logoPostgresQL logo

Back-End

Let's make your back-end boring! I value stability, predictability, and a general lack of drama in my API designs.

Where I Don't Shine

  • 🖥️ Keeping my desktop tidy. Please ignore those 300 shortcuts.
  • 📚 Finishing books. I've read about 75% of everything.
  • 📝 Making lists. //TODO: finish this list.

Featured Projects

Screen capture of the Take Space to Pause website.

Take Space to Pause

takespacetopause.org
  • Nuxt.js logo.
  • SASS logo.
  • AWS logo.

Take Space to Pause is a multi-lingual platform where teenagers can learn how to identify & reduce stress. It was built to comply WCAG 2.1 compliance standards.

The biggest challenge with this site was building the Plan Your Pause digital experience. The Plan Your Pause tool is a dynamically-branching quiz, built with Vuex. It guides users through a personalized journey based on their responses, across multiple thematic sections (Body, Thoughts, Connection). Within the quiz logic, each step is defined in a configurable steps array, and user inputs shape both the flow and the resulting plan. Behind the scenes, it:

  • Tracks step progression and completion state
  • Saves key decisions like mood, answers, and selected “plans”
  • Dynamically calculates quiz progress and renders contextual components (e.g., questions, intros, results)
  • Supports ~200 branching outcomes in both English and Spanish

Optimizations such as smooth, animated transitions and state-saving create a seamless experience.

Screen capture of the ZBV Invitational website.

ZBV Invitational Golf Tournament

Coming soon! (ETA June 2025)
  • Laravel logo.
  • Inertia logo.
  • Vue logo.
  • Stripe logo.

The Zeke Bondy-Villa Invitational Golf Tournament is a 501(c)(3) charity I do pro-bono work for. Over the last several months, I've undertaken a complete re-build of the site from the ground up. This includes a much faster front-end, built using Inertia.js and Vue.

Being a charity and a golf tournament, there are several important e-commerce aspects to this site as well. Using Laravel + Laravel Cashier + Stripe, I have built a full-fledged platform for managing donations, registering for tournaments, and managing sponsors.

Pixelated icons of various computer-related items, such as a cursor, pointer, screen, and hour glass.

Quit the Hit - Revitalizing a legacy codebase

  • Node.js logo.
  • Sequelize logo.

I didn't build this project, but I was brought in to save it. Quit the Hit is a teen vaping cessation platform, that over the years, gradually exceeded its technical limitations, resulting in long (>60 second) loading times, and the occasional memory exhaustion crash.

The task was simple: make it usable again. The first step here was profiling & optimizing the least efficient queries to eliminate n+1 patterns. Next, I offloaded several expensive calculations from the front-end into Sequelize virtual columns, greatly improving performance. However, I didn't stop there. I rebuilt several front-end components from scratch, utilizing strategies such as lazy loading and pagination to seamlessly render views. Bloated datatables were replaced with high-performance, scalable tables, all while maintaining backwards-compatibility.

The result? Page loading times between 2 and 3.5 seconds and a few tears of joy from the admin who had to work in here on a day-to-day basis.

Screen capture of the Flagle website.

Flagle

andydeforest.github.io/flagle
  • Nuxt.js logo.
  • GitHub Actions logo.

A simple (and hopefully addicting) flag geo-guessing game. A flag is shown to the user, who then gets 6 tries to guess which country it belongs to! If a wrong answer is guessed, the user is shown the distance between their guess and the correct answer, as well as the relative direction.

The game was built as a fun weekend project on Nuxt and deployed to GitHub Pages using GitHub Actions. Behind the scenes, it uses a custom JSON file with every country listed, as well as it's geographic center for distance calculations. It uses fuse.js for fuzzy searching, as well as Pinia for guess and statistics tracking. The Pinia instance persists using local storage so if the user inadvertently refreshes, or wants to come back later, their progress is saved.

Let's Connect

Whether you're interested in working together, talking shop, or just want to say hi — I’d love to hear from you. Reach out through a link below: