Back in 2024 when we were getting married, my wife designed a beautiful paper wedding invitation:

Wedding invitation picture

With some pretty art on the front, it opens like double doors to show the invitation in the middle and contains information about venue, food, and clothing on the sides. We wanted to find a way to distribute this invitation digitally, and being the lazy programmer I am, I thought it would be a good idea to create a website for it that we could just send to people.

I spent half a weekend coming up with a concept, but I never managed to get it into a state I was satisfied with. Especially the folding effect was always slightly off in my attempts.

With the breakthrough in LLM coding, I tried again and asked it to generate a working version. It ran into the same issue I did. Specifically, the folding animation had problems showing the inside and outside correctly without text overlapping during rotation.

This was the best attempt at the time. You can clearly see the problem:

RIGHT
LEFT
RIGHT INSIDE
LEFT INSIDE
(Click to open)

Over the past few years, this turned into my personal benchmark for measuring progress in LLM coding ability. Every now and then I would try again to see if the models could make a fully working version of this folding animation.

In late 2025, when the Claude 4.5 models were released, I ran the benchmark again. This time, it actually managed to make the sides properly foldable:

LEFT
INSIDE LEFT
RIGHT
INSIDE RIGHT
(Click to open)

It figured out how to use CSS 3D perspective correctly, adjust the transform origins, and hide the backface so the inside and outside did not bleed into each other during the animation.

For nearly two years, this had been my small proof that LLMs still did not really get layout.

Apparently, they do now.

This is the first time I have used an LLM to solve a problem that I did not already have a solution for. Before this, my successes with coding agents were mostly around boilerplate. Things I could easily write myself, just faster.

Prompting a bit more, I ended up with this version:

✦ ◈ ✦
Wedding Celebration
Sarah & Michael

Together with their families
invite you to share in their joy
as they exchange wedding vows

June 15, 2026

3:00 PM · The Garden Estate
123 Celebration Lane

✦ ◈ ✦
You're Invited
Reception

Dinner & Dancing
to follow immediately
after the ceremony

Cocktail Hour · 5:00 PM
Dinner · 6:30 PM
First Dance · 8:00 PM

You're Invited
Location

The Garden Estate
123 Celebration Lane
Riverside, CA 92501

Parking available on-site
Garden ceremony
Ballroom reception

Formal attire requested

Click to open

It does not include the original artwork on the front page, but it is finally a decent looking web version of the invitation. The vision I had back in 2024 has finally been fulfilled.

I am still not sure whether I should feel excited or slightly uncomfortable that LLMs are now able to solve problems like this. Problems that required spatial reasoning, debugging visual glitches, and iterating on subtle UI details.

For now, I will just say this:

My wedding invitation benchmark has officially been broken.