Leveling Up The Gales of November: 3D Lakers and Historical Storytelling with Gemini
When you build a weekend TypeScript simulator around a real historical wreck, getting the basic loop to run is the easy part. For The Gales of November, my CRT bridge simulator tracing the final voyage of the SS Edmund Fitzgerald on November 10, 1975, the initial version wired up a barometer, some

Posted on Nov 3 • Edited on Nov 3 • AI-assisted
When you build a weekend TypeScript simulator around a real historical wreck, getting the basic loop to run is the easy part. For The Gales of November, my CRT bridge simulator tracing the final voyage of the SS Edmund Fitzgerald on November 10, 1975, the initial version wired up a barometer, some ballast pumps, and a basic 3D view. You could hit deploy and steer through the storm.
Then you look a little closer at what you actually shipped. Why does the 729-foot "Queen of the Lakes" look like a generic, low-poly ocean cargo barge? And why does the whole experience abruptly cut to a "Game Over" modal without telling the story of the ship and the 29 men aboard her?
Rebuilding a live web simulation without tanking browser performance or getting lost in thousands of lines of Three.js and Coast Guard archives introduces a tricky set of hurdles. This post builds the story up in four parts: how I teamed up with Gemini 4 and Antigravity to sculpt an accurate procedural 3D freighter, wire it into the React physics loop, compile the historical record, and redesign the site around an interactive museum.
The first hurdle in any 3D Great Lakes simulator is the vessel itself. A classic laker has a silhouette that looks nothing like an ocean-going container ship: the pilothouse sits all the way forward over the bow, the engine room sits at the stern, and stretched between them is a long spar deck lined with 21 hatch covers.
If you try to drop a museum-grade.glb mesh into a lightweight browser game, you immediately bloat your bundle size and take a quite noticeable performance hit on mobile devices. Imagine trying to tow a literal 26,000-ton iron ore freighter behind a rowboat: your browser tab is going to sink before the storm even starts.
To get the silhouette right without external asset bloat, I worked with Gemini 4 to generate a procedural Three.js model from scratch. Gemini 4 wrote parametric hull equations scaled directly to the Fitzgerald 's architectural blueprints ( 1 unit = 10 feet, mapping her 729 x 75 x 39 ft hull):
Getting the simulation physics working exposed a bigger gap: the human story. If a player fights through hurricane-force gusts and either reaches a safe sanctuary in Whitefish Bay or vanishes on the radar scope, a simple popup box falls flat.
One thing to note though is that the historical record around the wreck is spread across hundreds of pages of dense government PDFs. I used Gemini as a research partner to synthesize Coast Guard Marine Board investigation reports, NOAA storm analyses, and underwater expedition logs into a single structured dataset. Together, we pulled together three core pillars:
With all of that research compiled, the final challenge was fitting it natively inside the retro phosphor-green CRT aesthetic so the site still felt like an interactive bridge console rather than a wall of text.
Working with Gemini 4, we blended the title artwork into the home screen's scanlines, added a direct entry button, and split the post-game experience into The Story of the Edmund Fitzgerald hub ( /museum ) with three dedicated interactive exhibits:
Whether you are taking the helm on desktop or panning across Lake Superior on your phone, you now get an architecturally accurate 3D laker, synthesized VHF radio calls, and a complete interactive history of the Edmund Fitzgerald.
If you want to explore the simulation or check out the new historical exhibits, dive in here:
Let me know how your run toward Whitefish Point goes, and happy sailing!