A city that grows from the chain
Network
Tezos mainnet
Contracts
Plots, ads, and gifts
Engine
Three.js isometric WebGL
Launched
September 2026
Land you can visit
Most virtual land lives in a spreadsheet and a marketplace listing. TezTowers puts it on a street you can open in a browser tab and watch. Cars queue at the turning circle. A patrol helicopter picks a rooftop helipad and lands on it. A sailboat crosses the harbour every six minutes, and the lighthouse beam sweeps at night. Owning a plot means owning a building people pass, with your art on its billboard and your link behind it. The chain records who owns what and how tall it stands, and the city renders that state.
Claim, build, climb
Claim the next open plot on Main St for 10 ꜩ. Owners pay half that for every plot after their first.
Upgrade for 5 ꜩ a floor. A tower crane hoists steel up the facade, the scaffolding slides away, and fireworks go up from the roof.
Six archetypes (Monolith, Twin Spires, Stepped Deco, Glass Center, Terraced Zigzag, Classical Arcade) gain features at levels 3, 8, 15, and 30, then keep growing their crowns once height levels off.
Name, description, link, billboard image, and palette are inscribed straight into contract storage.
Perks with real geometry
Rooftop helipads the patrol helicopter lands on, holograms in the owner's colour, neon trim traced to each archetype's silhouette, and billboards that play GIFs.
Eight ground-floor storefronts, from a burger joint to Chez Tez with a red carpet and valet, each with its own clickable menu card.
Level gates live in the contract: neon and animated billboards unlock at level 3, the hologram at 4, the helipad at 5.
Anyone can gift a plot balloons or rooftop search lights for a day, three days, or a week. The gifter's wallet and message are recorded on chain.
A street worth scrolling
A day/night cycle lights windows, street lamps, headlights, and aviation beacons, and the procedural Web Audio ambience swaps traffic hum for crickets after dark.
The West End harbour has a stone quay, a pier out to a lighthouse, moored boats, and a custom water shader with reflections at night.
One season file dresses the whole city: jack-o'-lanterns for Halloween, snow and a lit tree in December, fireworks for New Year and the Tezos birthday.
Plot search, deep links, and share cards for X, Bluesky, and Telegram bring visitors straight to a building.
Self-serve advertising
Street billboards and airplane sky banners sell by the hour through a separate on-chain ads contract.
Campaigns rotate by weight at 1×, 2×, or 5× visibility, paid in tez with no account and no sales call.
Advertisers can swap creative or extend a flight after booking.
Non-profits, education projects, and Tezos public goods get placements for free.
Dynamic NFTs that stay current
Marketplaces can't run a Three.js scene, so the token image has to be drawn somewhere else. A render daemon polls TzKT for plots flagged for a render, draws the building headless as a 2:3 portrait with a square rooftop thumbnail, stamps each PNG with its plot and contract, pins it to IPFS, and signs set_token_metadata. That signing key can write metadata and do nothing else. It holds a few tez for gas and has no reach into the treasury. Old pins get cleaned up from chain history, keeping the current and previous version for slow indexers.
Fixing an immutable contract
Tezos contracts can't be patched. During testing, the first contract let a level 1 owner buy a rooftop perk the renderer would never draw, and the fix meant a new contract with every existing plot moved across, no wipe allowed. I wrote a v2 with on-chain level gates, a global pause, and a one-way migration entrypoint, then a runbook: freeze, snapshot at a pinned block, migrate in batches, verify key by key against the snapshot, seal. Plot numbers, owners, metadata, and perks all came across intact before mainnet launch.
Stack
React + Vite
Three.js / WebGL
TypeScript
SmartPy (3 contracts)
octez.connect
Taquito
TzKT indexer
IPFS / Pinata
Netlify Functions + Blobs
Web Audio API
PostHog (consent-gated)
Wallet-gated admin console
Telegram bot
A token with an address
TezTowers gives an NFT a place to stand. Holders get a building on a street people visit, artists get a billboard, advertisers get a slot paid in tez, and all of that state lives on chain where objkt, TzKT, or any other client can read it.

