✕

Tom Greenaway

Entrepreneur, Creator & Googler

Hi – my name's Tom and I like making things.

Receive updates on my latest games, experiments and thoughts.

✕

Articles

Games

Published by Kumobius

Experiments

Talks

At Google

Mentoring

Short Stories

Duet Quotations

Other

Building a 3D miniature of Paris, its monuments, and the métro with Gemini 4 Argon

"A city of lights."

When you live in Paris, you experience the city in two completely separate ways: the overground streets and the underground metro first created in 1900.

On a standard 2D transit map, those two worlds have nothing to do with each other. Châtelet is just a labyrinth; Chemin Vert is just a dot on a purple line. You can't see how Line 6 climbs out of the earth onto a stone viaduct to cross the Seine or how Line 4 had to be sunk in giant waterproof caissons beneath the river bed in 1908.

I wanted to see both worlds at once: a living 3D architectural maquette of Paris above ground and the subterranean tunnels underneath. An experience that could also act as a way to learn more about the history of Paris too. As I practiced for the French citizenship interview at the start of this year I thought this virtual map could help inspire and teach others about Paris too.

So I opened Antigravity with Gemini 4 Argon and built it across many iterative prompts. Here is how it came together into an interactive historical miniature of this fantastic city of lights.


Starting Prompt: A 3D Miniature of Paris and Its Métro

I kicked things off with this prompt:

"I'd like to create a web application that uses Three.JS to create a really beautiful simulation of Paris's metro system. The idea is that it will show the metro lines under the city but there will also be a visible 3D recreation of Paris itself on top. The 3D recreation of Paris can be made as a blender model using the Blender MCP server we're installing. There should also be a timeline slider that lets us rewind the look of the city and the metro lines to when the very first paris metro line was created/opened. and we should be able to slide up to 2026 today as new lines and stops are added or removed. the metro lines should be colour coded according to the real metro line colours in Paris. the individual metro stops should also be hoverable to reveal information about them. Paris should look stunning and beautiful, showing major monuments but also the haussemanian design of the buildings. The HUD / UI of the app should be minimalist."

Gemini 4 Argon stood up a complete Three.js application with animated trains, colour-coded metro lines, and a 1900–2026 timeline scrubber. To make the surface city feel authentic to the real geometry of Paris, I steered it to pull real OpenStreetMap data and let you control the surface opacity with a fade slider:

"Great start! Can we change a few things. Make the buildings opaque by default, and add a fade slider so you can make it as transparent as you like… Pull actual street map data to make it feel more accurate to the real city."

That brought in real geographic coordinate data, the actual winding curve of the Seine around Île de la Cité and Île Saint-Louis, street-aligned Haussmannian perimeter courtyard blocks, and custom 3D landmarks.


Above Ground: Live Blender MCP, Architectural Specificity, and Stroke Outlines

Daytime 3D view over Île de la Cité with Notre-Dame highlighted by a 4px black screen-space outline and its Art Deco historical dossier card

To build the 3D landmarks, I connected Antigravity and Gemini 4 Argon to Blender using the Blender MCP server. The setup is delightfully direct: you leave the Blender desktop app open and running in the background with the MCP add-on enabled, which gives the model a live connection into Blender. Through MCP tools like execute_blender_code (which runs Python scripts directly inside the live Blender instance), get_scene_info, and look (which snaps multi-angle viewport renders — front, right, top, three_quarter — and feeds the images straight back into the model's context), Argon can sculpt a model, look at what it just built, spot proportion issues, and refine the geometry before exporting it to Three.js.

Even with a live Blender connection, though, my first pass at the monuments was too vague. If you just ask for "major Paris monuments," you get simplistic geometric primitives — a couple of grey boxes for Notre-Dame and a glorified cone for the Eiffel Tower — all hidden underneath giant glowing indicator pillars.

First, I got rid of the pillars so you could actually see the geometry:

"At the moment the monuments have a column above them so we can't really see the 3D representations of them. Can we make that much more subtle and really show off the 3D models on the map."

Then, to get the monuments looking like real miniature architecture rather than board-game tokens, I had to be much more explicit with Argon about using Blender to capture each building's defining silhouette and structural anatomy:

"Let's make the 3D models of the monuments much more detailed and recognisable using Blender. Use execute_blender_code and look to inspect each monument from multiple angles as you build it. I want to see the actual architectural features that define each silhouette: Notre-Dame's twin western bell towers, rose window, flying buttresses, and Viollet-le-Duc spire; the Eiffel Tower's four arched base piers, three observation levels, and tapered iron lattice; the white Romano-Byzantine domes of Sacré-Cœur; the Corinthian portico and colonnaded dome of the Panthéon; the golden dome of Les Invalides; the glass pyramid in the Cour Napoléon at the Louvre; and all 9 historic Grandes Gares railway terminals with their glass-and-iron train sheds and clock towers."

The Paris monument collection sculpted in Blender 5.2 via the Blender MCP server

Giving the model concrete architectural vocabulary — and telling it to verify its own work with look inside the live Blender session — completely changed the output. You can see the collection lined up on the Blender grid above: from the Eiffel Tower, Notre-Dame, the Arc de Triomphe, Sacré-Cœur, and the golden dome of Les Invalides, down to the Centre Pompidou (complete with its red exterior escalator tube), the Grand Palais glass roof, the Concorde Obelisk, the four open-book towers of the Bibliothèque Nationale de France, and the Grande Arche de la Défense.

Once the 3D monuments were in place, we hit a classic 3D UX problem: hover hijacking. When you tried to hover your mouse over Notre-Dame on the densely packed Île de la Cité, the cursor kept snapping to nearby underground Métro stations (Cité or Châtelet) instead of the cathedral. And because the monuments were assembled from lots of small details — flying buttresses, spires, and iron trusses — hovering over a building felt finicky.

I asked Gemini 4 Argon to make monument selection unmistakable:

"Let's make it so that when you hover over the monuments in the map, they get a 4px black outline."

To make hovering feel effortless, Argon wrapped each of the 22 monuments in an invisible hit-box (so you don't have to pixel-hunt thin spires or open iron lattice), gave surface monuments priority over underground stations when you're viewing the city from above, and drew a crisp 4px black ink outline around the hovered monument — paired with an Art Deco information card right next to your cursor.


Night Mode: Fixing Purple Light Rings and Sparkling the Eiffel Tower

Nighttime 3D view of the Eiffel Tower illuminated with 1,500 diamond xenon strobes, counter-rotating volumetric searchlights, and the 2D SVG Paris Skyline Explorer

If you build a 3D simulation of Paris, the Eiffel Tower at night is non-negotiable. It has to glow in warm golden floodlights from the inside out, sweep its dual rotating searchlight beacons across the sky, and burst into its famous five-minute diamond sparkle (le scintillement).

Our first attempt at night mode had three bugs that made me laugh out loud when I zoomed in:

  1. The Seine was mysteriously enormous right next to the Eiffel Tower ("why is the Seine so wide by the Eiffel Tower?" — a subtle map-coordinate bug near the Pont d'Iéna was ballooning the river width before reaching the Île aux Cygnes).
  2. The Eiffel Tower only sparkled around its ankles, while its upper lattice was striped in flat orange and black segments.
  3. The rotating searchlight cones had a glowing dark-purple ring floating at the far end of the light beams.

Why would a golden searchlight cone produce a dark purple ring at its tip?

When Gemini 4 Argon inspected the light-beam code, it found the culprit right away: at the far edge where the beam fades out into the night sky, a tiny negative number was sneaking into the lighting calculation. Once the scene's glow filter tried to blur those invalid pixels, it turned the tip of the beam into a neon purple halo. Clamping the fade to zero and smoothing out the falloff erased the purple ring immediately.

Next, I overhauled the tower's night illumination:

"Can we make the Eiffel Tower illuminated in a gradient from dark orange to yellow? And can we add a button to trigger the sparkle effect."

Instead of flat colour bands, Argon lit the iron lattice with a warm vertical gradient from dark amber at the base up to bright gold at the tip — with a dedicated ✨ Sparkle Eiffel button in the top bar so you never have to wait for the top of the hour.


Reworking the <select> Dropdown: The SVG Skyline Explorer

Look closely at the right-hand panel in the nighttime screenshot above.

For the first 10 or more prompts, selecting a Métro line or jumping to a monument used standard HTML <select> dropdowns, and every control panel was open on screen at once. Functional but ugly.

"We have a lot of UI visible by default. Could we minimise as much as possible, maybe just a single settings button in the top right… Can we rethink the way the user selects and views details about the metro lines and monuments? At the moment it's a very boring select dropdown."

I followed up with another prompt:

"For the skyline silhouettes of the buildings, can we make it so the image/column is actually a 2d silhouette of the corresponding building ?"

We stripped the HUD back to the bone:


X-Ray Mode & Turning the Map into a French Naturalisation Walking Tour

X-Ray cutaway view of the subterranean Paris Métro network with the French Naturalisation Historical Walking Tour open to Stop 8: Les Invalides, Louis XIV & Napoleon's Civil Code

Once we had both the 3D surface architecture and the deep underground Métro network working in harmony, I wanted the historical layer to do more than just list construction dates.

If you go through the French citizenship process, you sit an oral interview at the Préfecture called the entretien d'assimilation. You are expected to know the foundational milestones, figures, institutions, and Republican values of France.

Studying those questions from a flat PDF list of flashcards feels abstract. But almost every single milestone in that curriculum happened at a physical place in Paris.

So in the following prompt, I asked Gemini 4 Argon to weave the two together:

"Could you add a historical walking tour that connects the monuments to the history of France and Paris as needed by the French naturalisation exam?"

That became the 📜 History Tour tab shown in the third screenshot above — here paired with X-Ray Mode, which fades the Haussmannian surface into an obsidian ghost blueprint so the subterranean engineering takes centre stage:


Conclusion

Looking back through the 20+ prompts in the session log, the thing that impressed me most about Gemini 4 Argon wasn't that it generated a working 3D app on the first prompt — plenty of models can scaffold a basic Three.js scene.

What stood out was how well it understood my clarifications and directions for iterating, improving the 3D world, and the UX itself:

  1. Debugging visual symptoms: I never had to tell Argon how to fix the purple ring on the searchlight cones or why the Seine looked bloated near Pont d'Iéna. I just described what my eyes saw on screen, and it traced the visual symptom straight back to the technical issue.
  2. Architectural specificity: When I asked for Grandes Gares rail corridors or Haussmannian blocks, it didn't drop generic grey boxes onto the map — it built curved glass-and-iron train sheds and zinc roofs.
  3. Rapid UX reinvention: Going from "this select dropdown is boring" to a bespoke 2D SVG West-to-East Paris skyline silhouette chart and an interactive metro network took two quick prompts.

It turns out the best way to understand how Paris fits together — above ground, underground, and across its history — is to build your own.

Article published on: 15 Oct, 2026