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:
+40
-17
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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" },
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user