July 3, 2026

For the past few weeks, I used OpenAI Codex to change huge parts of this website. I debated for a long time whether to use GenAI to [improve/modify] a project that feels so personal to me. This website, its interface, and its content act as extensions of who I am, and augmenting my handwritten code with that from a statistics machine changed something intangible about Zach Fox Photography.

Visual Studio Code's autocomplete suggested some changes to this post, and then I disabled it

Until now, Zach Fox Photography was built on top of Gatsby, a React web framework saddled with some controversy. Gatsby has been all but abandoned for the past several years; I knew someday I would have to switch over to using a different framework if I wanted to update dependencies such as ThreeJS and React. Astro was my top choice, having used it to successfully build a couple of small sites.

I knew the migration from Gatsby to Astro would be a tedious task. I also knew I would get distracted along the way, rearchitecting and refactoring obsolete code. I would need to spend precious weeknights writing code I did not want to write just to get the website to feel the same way it always has.

Or I could spend $20 and tell Claude or Cursor or Codex to do this migration work for me, and it'd take an hour.

Codex worked perfectly for this task, requiring minimal steering and exceeding my expectations. Gatsby was gone, four and a half years after I started using it. With Astro, my site's build and navigation times are drastically reduced and I can finally update my website's dependencies to the latest versions.

The Zach Fox Photography logo looks like a fox in the shape of a camera's aperture

Fueled by late nights and loud EDM, the zachfox.photography codebase grew and grew and grew. Features I'd dreamed about for years materalized after prompting a quick spec document, like this augmented reality photo viewer. I couldn't stop! I didn't want to stop!

This addictive feeling is one of the dangers of generative AI. The "just one more prompt" dependency loop feels so good because the product works: if you can explain what you want in English, the computer will probably produce something that resembles what you want, even if it's not what you need.

Two weeks of working flew by and I pushed the changes from the codex-astro-migration branch into main. In that time, the AI changed 446 files, added 184,886 lines of code, and subtracted 42,805 lines of code.

For only fourteen days of programming, these numbers are superhuman. They don't make sense outside the context of code generation. That is more code than anyone could possibly understand in two weeks, which means I committed more code to my repository than I can or want to explain.

This ever-changing instantiation of myself, birthed from code and growing, now feels less like something I've crafted and more like something I'm discovering. I've realized that generating code feels more ethically acceptable to me than generating images or movies or music. Maybe that's because humanity still doesn't think about programming as accessible art. I hope to see that change.

I'm not sure what I'll do after my month of Codex expires. It's hard to return to slow-programming after experiencing the rush of GenAI-enhanced programming. Perhaps I will focus on understanding my new codebase, or focus on adding new photography to the site, or preparing to open-source the code. No matter what I choose to do next, I love the latest version of this portfolio.

The Zach Fox Photography logo looks like a fox in the shape of a camera's aperture

The changes I (we?) made to this website include:

  • React framework migrated from Gatsby to Astro
  • Homepage changed to a zoomable, interactive color-sorted mosaic of all website's images:

    Reminiscent of my pre-AI ColorSortedImageGrid

  • A new augmented reality gallery view which works in AR headsets, VR headsets, and on flat screens. You can pick up and move the photos in 3D space. The viewer presents 2D images, 3D images, and Multidimensional Memories:

    Exif data for each photo is printed on its back

  • A new, more performant, distortion-free, shader-based MDM viewer with novel navigation methods like hands-as-controller support:

    You can grab the MDM Orbs and put them over your head to view them in "focused" mode

  • More deep-linking capabilities, like for story filters. Here's a filter to show only Gigapixel Panoramas before July 5, 2023.
  • The FullScreenImageViewer now supports swipe gestures to navigate on desktop and mobile. Try it in this gallery.
  • New gallery thumbnail layout. Surprisingly, most people who visit here don't click to the full screen image viewer, instead opting to scroll through galleries in preview mode. Thus, making the preview gallery more beautiful and usable was a high priority for me. Here's a fun gallery to scroll.
  • A new "relevant stories" scoring algorithm in hopes more people will click through more of my portfolio.
  • Upgraded the frontend and backend of forms like my Contact form to reCAPTCHA v3. Google's documentation for how to do this is astoundingly poor, but Codex had no problem with the migration
  • All-new screen-agnostic page navigation drawer and breadcrumbs
  • Fixed tons of bugs dormant within my old hand-generated code, mostly related to React and MDM AudioContext state gotchas I wouldn't have caught by myself
  • All site dependencies were updated to their latest versions, like the ThreeJS 3D rendering engine and its XR components
  • ...and way, way more.
The Zach Fox Photography logo looks like a fox in the shape of a camera's aperture