CityTales 3D Engine Piazza San Marco · c.1500
you validating…
0 fps  ·  x 0 · z 0
WASD walk  ·  click to look  ·  Esc release
Approach the Doge, then press E to speak.
Press E to speak with the Doge
SoafAii Health · sensory
CityTales 3D Engine
assembling the scene…

The scene could not be assembled

CityTales Immersive
Living historical worlds

Choose an experience

Each experience is a self-contained world the same engine renders — walk it in your browser, speak with its inhabitants, and feel its period through synchronized sensory cues. Author new ones without code in the Studio.

All Tourism & culture Clinical (locked)
Scenario Studio
New experience
Setting
Clinical / therapeutic content authoring is embargoed pending the clinical brief and regulatory clearance. The engine supports the clinical domain architecturally; content cannot be created here yet.
Environment
glTF/.glb on Cloudflare R2/Pages for photoreal scenery.
.env (preferred) or .hdr for image-based lighting.
Character — your virtual host
Anything after this year is unknown to them.
Leave blank for the placeholder figure. A hosted glTF avatar gives a photoreal person.
Sensory & commerce
Fill the form — validation runs live.
    CityTales Back office
    Pricing & configuration

    Session-pass pricing

    The purchasable unit is one user for one session. Each rule sets a price for a combination of user type, country and group — leave a field as “any” for a wildcard. The most specific active rule wins, so you can layer (e.g. a partner group is free, EU guests pay one price, everyone else another). Prices sync to your Supabase project; add a Paddle price id to a rule to make it checkout-ready.

    User typeCountryGroupPricePaddleActive

    Price preview

    Check what a given visitor would pay — the resolver runs exactly as it does live.

    Resolved price

    Payments (Paddle)

    Paste your Paddle client-side token and pick the environment. Use a test_ token with “Sandbox” to validate with test cards, then switch to a live_ token + “Live” to go live. The token is safe in the browser; each pricing rule above carries its own Paddle price id (pri_…) created in the matching environment.