How I Brought My Old Websites Back to Life with AI (and a Bit of Docker)

Last weekend, while normal people were out having coffee or strolling through the market, I decided to open the drawers of my digital past.
Old projects sleeping on hard drives: PHP 3, PHP 4, ancient MySQL, even some Flash here and there.

A kind of treasure hunt, developer-style. Or maybe Alice in Wonderland, but with corrupted MySQL tables instead of white rabbits.
Inside: my first scripts, my first interfaces, my first bugs. And a few surprises.

I didn’t know yet that I was about to spend the whole weekend running code from the early 2000s… with a little help from an AI.

1. The Archives: A Chaos of Folders and Memories

It all started out of curiosity. I’d been digging through archive.org to find my old sites, and then I thought: I’m pretty sure I still have all that stuff somewhere, on old burned CDs or ancient external drives.
So I started digging, and stumbled upon an old public_html folder, then another, then a site_old with .php3, .inc files, and some SQL dumps.
Some projects didn’t even have a database anymore, just code calling ghost tables.

I reopened everything with ChatGPT, line by line, trying to understand how I had built it.
The AI started “reading” my old scripts like an archaeologist decoding hieroglyphics:

“Here you probably had a cartes table with these fields: id, message, image, email…”

And together, we rebuilt lost SQL schemas from PHP code.

2. Docker: My Web Time Machine

The next idea was to isolate everything.
No way I was going to install prehistoric versions of PHP or MySQL on my machine.

So we used Docker to spin up custom environments:

  • An Apache/PHP 3 or 4 container, recompiled from source
  • A MySQL 4.1 or 5.0 container
  • A phpMyAdmin to check that everything was still readable
  • And a local Docker network to tie it all together

Each site had its own folder and its own docker-compose.yml.
That let me browse to http://site2002.local like I’d traveled twenty years back in time.
And every time a site finally loaded without errors, I’d get that little rush of adrenaline:

“Oh wow, I actually coded this!”

3. Rebuilding with No Blueprint—Just the Code

Some projects had nothing left to work with.
We had to rebuild the tables from scraps: a leftover INSERT in a script, an implicit join in a SELECT, a $row['message'] field betraying the original structure.

Bit by bit, the pieces came together: the PHP code, the rebuilt database, the missing images found in an old uploads/ folder.

And suddenly, the site would open again like a time capsule.
What I had coded in my twenties, awkwardly, still held up.

4. The Surprise: FlyCMS, My Homemade CMS from the Spaghetti Code Era

And then, there was the surprise. While digging through a folder I thought was empty, I stumbled on FlyCMS.

My very own content management system, coded back in 2003-2004.

I had completely forgotten about it.

What I Discovered

Reopening the files, I realized I was already pretty organized in my code, even though PHP 3 and 4 were peak spaghetti code era.

But above all, I discovered that I was obsessed with documentation.

This CMS, which I was the only one using, had full documentation:

  • Step-by-step installation
  • Detailed config with screenshots
  • Instructions for creating pages, managing the page tree, editing templates
  • Even a “If it doesn’t work, check folder permissions” section

I found it hilarious. And honestly, kind of touching.

The Architecture (Surprisingly Modern)

Reading through the code, I realized I had already built:

  • A templating system with override: I could use the dynamic PHP/DB/templates system or override any page with a static HTML file
  • Multilanguage support: everything was ready to translate the admin interface
  • A page tree system with customizable order
  • Modules that could be enabled or disabled
  • Clean separation between config, templates, CSS, and content

For 2003, with PHP 4, that wasn’t bad at all.

The Killer Detail

In the docs, I had written:

“FlyCMS is a content management tool for easily creating websites. It works with a page tree and template system. It was slapped together in 3 days, so I totally deserve a beer!

And to explain how to find the full server path:

“Don’t know what to put here?
Create a file called test.php
Putzy (yes, spelled like that) this code in it: <?php echo realpath('test.php'); ?>

Apparently, I’ve always been like this 😄

Thanks, Past Me

Reading that documentation, with its .gif screenshots, detailed walkthroughs and little jokes, I had a weird emotional moment.

The Jennifer from 2003 had taken the time to document everything.
For herself, but also for a future user.

And 22 years later, that future user was me.
Thank you, past me. Seriously.

5. The Flash Projects Were Something Else

The wildest moment was finding my old Flash projects.
One in particular was a little tool I had called “Dessine?” (“Draw?”): you’d make a drawing by coloring squares in the browser, add a message, and it would create an e-card stored in the database, with a unique link to send to someone.

When I reopened the .swf, I laughed at first.
Then I realized it was real code: the Flash file sent POST requests to a save.php that saved the image and message.
Everything was still there in the folder.

Except… Flash itself was gone.

So we used Ruffle, a modern Flash emulator in WebAssembly.
With a few tweaks in the Docker backend (PHP 4 + MySQL + the original save.php), Dessine? came back to life.

The SWF runs in the browser, images get saved again, and the unique links lead to real view pages.
Twenty years later, the e-cards still work.

6. The Role of AI

I would never have started all this without a patient assistant to help me decipher my own relics.

ChatGPT helped me:

  • Decode old PHP scripts and recover data structures
  • Fix encoding issues (é)
  • Set up the right Docker versions
  • Recompile an old PHP to load missing extensions
  • And even emulate Flash without Flash Player

But most importantly, it forced me to read my old code like a story, to understand what I was thinking when I wrote it.
And that part was unexpected.

7. What I’m Taking Away from This

Bringing those sites back wasn’t just a technical exercise.
It was a deep dive into my journey as a developer.

Each Docker container became a little time bubble where I could revisit my beginnings, my mistakes, my little discoveries.

And I got to see that 2003 Jennifer, who “slapped together a CMS in 3 days” but still documented every step with care, was already on the right path.
She didn’t know it yet, but she was already building things that would last.
Even if they were going to sleep on a hard drive for 22 years.

Now I’ve started archiving those old sites and experimental projects on GitHub—because let’s be honest, those CDs and hard drives aren’t going to last forever…

Conclusion

What I learned by recreating all this with the help of an AI is that no line of code is truly lost.
Everything can be rebuilt, everything can be understood, if you take the time to listen to what the code is telling you.

Docker gave me the infrastructure.
AI gave me the memory.
And I gave life back to a piece of my own story.

PS: If you also have old projects lying around early 2000s websites you’d love to bring back to life, or if you’re just curious how we did things “back then”… let’s talk. I’d love to hear your stories.