Tera, because Simulate was already spoken for

Two names in this repo were quietly colliding with things that already ship.

`lumbridge-simulate` is a Rust crate in the private monorepo — the Governor's
memory-admission simulator, with a public product page — and in its vocabulary
a "Scene" is a set of models, not a three.js scene. Naming a 3D engine the same
thing would have put two different meanings on both words at once.

Meanwhile world1.lumbridgecorp.com has been serving <title>Tera — Lumbridge</title>
since before any of this: the world already had a name.

So the map view is Tera, the interiors product is Spaces, an Office is one
building's interior and a Space is a room inside it. ARCHITECTURE.md opens with
that table now, because the next few thousand lines all depend on it.

The Phaser 2D world comes down rather than being migrated. Its tileset is
precisely what stopped it being open-sourceable, and there are no real users to
strand.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Karti Tripathi
2026-08-04 22:09:44 -07:00
parent 67f8df8d53
commit 36471bbad7
7 changed files with 58 additions and 34 deletions
+40 -17
View File
@@ -1,16 +1,39 @@
# Lumbridge Simulate Engine — architecture # Tera — architecture
**LSE** is the third of the three: `lumbridge-compute`, `lumbridge-bench`, **Tera** is the map view: a city from above, rendered in three.js, public and
`lumbridge-simulate`. A 3D engine for walkable places — a city from above, an self-hostable. **Spaces** is the other half — the offices you walk into. They
office from inside, one renderer and one asset library. are one engine and one asset library, seen from outside and from inside.
Ships at `lumbridgecorp.com/live`. Apache 2.0, self-hostable, Gitea. Lives at `tera.lumbridgecorp.com`. Apache 2.0, on the fleet's own Gitea.
## The names
Getting these straight early matters, because two of them were nearly overloaded
onto things that already exist.
| name | what it is |
| --- | --- |
| **Lumbridge Simulate** | the product line these sit under |
| **Tera** | the map view. Cities — SF, LA, NYC — from above. Public, no login. |
| **Spaces** | the interiors product. Offices you enter, host, and self-host. |
| **Office** | one building's interior, belonging to a tenant. You go *into* an office. |
| **Space** | a room or zone inside an Office — a desk bay, a meeting room, a lounge. |
Two things this avoids. `lumbridge-simulate` is already a **Rust crate** in the
private monorepo — the Governor's memory-admission simulator — and in its
vocabulary a **"Scene" is a set of models**, not a three.js scene. This engine
therefore does not take either word for itself: it is Tera, and its three.js
scene stays an implementation detail behind `createScene()`.
One overload survives on purpose: *Spaces* the product versus *a Space* the
room. It sits at two different levels and matches how people already talk about
offices, so it is kept rather than invented around.
--- ---
## 1. Why this is its own repo, and why it is public ## 1. Why this is its own repo, and why it is public
LSE began as `/live` inside Workie, the private career portal. That is now Tera began as `/live` inside Workie, the private career portal. That is now
**deleted**, not deprecated — a 3D city engine has no business living in a job **deleted**, not deprecated — a 3D city engine has no business living in a job
tracker, and Workie is a private repo besides. tracker, and Workie is a private repo besides.
@@ -22,21 +45,21 @@ extraction is a chance to ship something private by accident. The point of this
project — a reusable asset library other people can build on and self-host — needs project — a reusable asset library other people can build on and self-host — needs
a repo that *is* the open-source artefact. a repo that *is* the open-source artefact.
So: **`lumbridge-public/lumbridge-simulate` on the fleet's own Gitea.** Not So: **`lumbridge-public/tera` on the fleet's own Gitea.** Not
GitHub. Self-hosting the forge is the same claim the engine makes: the whole GitHub. Self-hosting the forge is the same claim the engine makes: the whole
thing runs on hardware you own, and nothing about it requires somebody else's thing runs on hardware you own, and nothing about it requires somebody else's
platform to stay alive. platform to stay alive.
### World 1 is this ### The 2D world comes down
This is the part that makes LSE load-bearing rather than a demo. The existing The existing Lumbridge world at `world1.lumbridgecorp.com` is a Phaser 2D
Lumbridge world is a Phaser 2D office, and its tileset is what stops it being office, and its tileset is exactly what stops it being open-sourceable. It has
open-sourceable. World 1 becomes **the San Francisco city view plus the office no real users, so it is being retired rather than migrated — Tera and Spaces
interiors**, rendered here, with original assets. replace it outright, with original assets, which is the whole point.
That reframes the whole repo: LSE is not a map that happens to live next to the That reframes this repo: it is not a map that happens to sit next to the
platform, it is the platform's renderer. The city is the outside of the world platform, it is the platform's renderer. The city is the outside of the world,
and the offices are the inside of it, and a tenant moves between them. offices are the inside, and a tenant moves between them.
--- ---
@@ -188,7 +211,7 @@ now. LA gets six. NYC, later, gets Manhattan plus the inner boroughs.
## 6. How Workie feeds it ## 6. How Workie feeds it
Workie stays the system of record for companies. LSE never gets a database. Workie stays the system of record for companies. Tera never gets a database.
``` ```
Workie GET /api/live/markers (private, tailnet) -> status colours Workie GET /api/live/markers (private, tailnet) -> status colours
@@ -238,7 +261,7 @@ are the outside and the inside of one world, and moving between them is a camera
transition, not a different application. transition, not a different application.
Reference point: the per-office spatial products in this space (Simile and Reference point: the per-office spatial products in this space (Simile and
friends) are the shape to aim at. The difference LSE is going for is that this friends) are the shape to aim at. The difference Spaces is going for is that this
one is Apache 2.0 and self-hostable — you can run your own world on your own one is Apache 2.0 and self-hostable — you can run your own world on your own
hardware, which is the same claim `lumbridge-compute` makes about compute. hardware, which is the same claim `lumbridge-compute` makes about compute.
+5 -5
View File
@@ -1,4 +1,4 @@
LSE — Lumbridge Simulate Tera — the map view of Lumbridge Simulate
Copyright 2026 Lumbridge Corp. Copyright 2026 Lumbridge Corp.
This product includes software developed at Lumbridge Corp. This product includes software developed at Lumbridge Corp.
@@ -8,17 +8,17 @@ Licensed under the Apache License, Version 2.0 (see LICENSE).
ORIGIN AND ORIGINALITY ORIGIN AND ORIGINALITY
---------------------- ----------------------
LSE's city view was inspired by the interaction model of two prior works — Tera's city view was inspired by the interaction model of two prior works —
Levels.fyi Atlas, and Nutlope's NYC AI Atlas (https://github.com/Nutlope/ Levels.fyi Atlas, and Nutlope's NYC AI Atlas (https://github.com/Nutlope/
nyc-ai-atlas), which itself credits Levels.fyi. What was taken is the *idea*: nyc-ai-atlas), which itself credits Levels.fyi. What was taken is the *idea*:
a left-hand chapter legend, animated camera flights into map areas, clickable a left-hand chapter legend, animated camera flights into map areas, clickable
place labels, and ambient motion in the scene. place labels, and ambient motion in the scene.
No code, geometry, or asset from either work is present here. LSE's renderer, No code, geometry, or asset from either work is present here. Tera's renderer,
its terrain system, its block-lattice building placement, and every coordinate its terrain system, its block-lattice building placement, and every coordinate
in every city pack were written from scratch. The two projects do not even in every city pack were written from scratch. The two projects do not even
share a subject: the NYC atlas renders hand-traced Manhattan on flat ground, share a subject: the NYC atlas renders hand-traced Manhattan on flat ground,
and LSE's premise is relief — a city you cannot read without its section. and Tera's premise is relief — a city you cannot read without its section.
Stating this plainly matters, because at the time of writing the NYC AI Atlas Stating this plainly matters, because at the time of writing the NYC AI Atlas
repository carries no LICENSE file. Absent a licence grant, the default is that repository carries no LICENSE file. Absent a licence grant, the default is that
@@ -46,7 +46,7 @@ TRADEMARKS
This repository contains no third-party logos, wordmarks, or brand assets. This repository contains no third-party logos, wordmarks, or brand assets.
Organisation logos displayed by applications built on LSE are fetched at Organisation logos displayed by applications built on Tera are fetched at
runtime and are never redistributed as part of this project. All trademarks, runtime and are never redistributed as part of this project. All trademarks,
service marks, and trade names are the property of their respective owners. service marks, and trade names are the property of their respective owners.
Any use is nominative — to identify the organisation referred to — and does not Any use is nominative — to identify the organisation referred to — and does not
+7 -6
View File
@@ -1,9 +1,10 @@
# Lumbridge Simulate Engine # Tera
**Lumbridge Simulate**a 3D engine for walkable places. Cities from above, The map view of **Lumbridge Simulate**cities from above, in three.js.
buildings from inside, one renderer and one asset library. Its other half, **Spaces**, is the offices you walk into: one engine and one
asset library, seen from outside and from inside.
Apache 2.0. Runs at [lumbridgecorp.com/live](https://lumbridgecorp.com/live). Apache 2.0. Runs at [tera.lumbridgecorp.com](https://tera.lumbridgecorp.com).
![San Francisco](docs/sf.jpg) ![San Francisco](docs/sf.jpg)
@@ -29,8 +30,8 @@ npm run dev
## Using the engine ## Using the engine
```ts ```ts
import { createScene } from "@lumbridge/simulate/engine/scene.ts"; import { createScene } from "@lumbridge/tera/engine/scene.ts";
import SAN_FRANCISCO from "@lumbridge/simulate/cities/sf.ts"; import SAN_FRANCISCO from "@lumbridge/tera/cities/sf.ts";
const scene = createScene(canvas, { const scene = createScene(canvas, {
city: SAN_FRANCISCO, city: SAN_FRANCISCO,
+1 -1
View File
@@ -36,7 +36,7 @@
<div id="panel"> <div id="panel">
<div class="card"> <div class="card">
<h1>San Francisco</h1> <h1>San Francisco</h1>
<p>Lumbridge Simulate Engine</p> <p>Tera · Lumbridge Simulate</p>
</div> </div>
<nav id="chapters"></nav> <nav id="chapters"></nav>
<p class="card" id="blurb"></p> <p class="card" id="blurb"></p>
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "@lumbridge/simulate", "name": "@lumbridge/tera",
"version": "0.1.0", "version": "0.1.0",
"description": "Lumbridge Simulate Engine (LSE) — a 3D engine for walkable places. Cities from above, buildings from inside.", "description": "Tera \u2014 the map view of Lumbridge Simulate. Cities from above; with Spaces, offices you can walk into.",
"license": "Apache-2.0", "license": "Apache-2.0",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
+1 -1
View File
@@ -1,5 +1,5 @@
/** /**
* San Francisco — a LSE city pack. * San Francisco — a Tera city pack.
* *
* Pure data. Coastlines, hills, districts, landmarks and camera chapters, * Pure data. Coastlines, hills, districts, landmarks and camera chapters,
* traced by hand to be recognizable rather than survey-accurate: the * traced by hand to be recognizable rather than survey-accurate: the
+2 -2
View File
@@ -1,8 +1,8 @@
import { defineConfig } from "vite"; import { defineConfig } from "vite";
export default defineConfig({ export default defineConfig({
// Mounted under lumbridgecorp.com/live/ in production; the trailing // Mounted under tera.lumbridgecorp.com in production; the trailing
// slash matters, since every asset URL is resolved against it. // slash matters, since every asset URL is resolved against it.
base: process.env.LSE_BASE ?? "/", base: process.env.TERA_BASE ?? "/",
build: { outDir: "dist", target: "es2022" }, build: { outDir: "dist", target: "es2022" },
}); });