static
Middle Earth Map
Working summary of the design conversation so far. Nothing here is verified against the books yet. Not legal advice.
The idea
A Minecraft-first, platform-neutral world of Middle-earth where the author's text decides what is fixed and everything else is open to the reader's imagination. Exploring the world triggers on-demand generation of content from a canon database. Paul is building it first for his kids, with the option of pursuing licensing later if it goes further.
Guiding principles
- Canon is the map, exploration is rendering. Every chunk is a pure function of position, seed and canon. Unvisited places are fully determined but not yet computed. First arrival must never change the result.
- A fact is locked only if a publication says so. No citation means open.
- Three states: Stated (text says it directly, locked), Implied (inferred, for example from travel times, locked within a tolerance with the derivation recorded), Open (text is silent, free for interpretation).
- Footnotes are the interaction model. A footnote is either a citation or an interpretation, and it carries its author. Footnotes on open facts become selectable "lenses" that a player or server can choose. Footnotes on locked facts can only challenge a reading, with a citation, and go to review.
- Source tiers: record whether a fact comes from the published novels or from posthumous drafts and the History of Middle-earth, since those contradict each other.
Why Minecraft works as the pilot
- Deterministic on-demand chunk generation is built in.
- Mature Java server ecosystem (Paper, datapack worldgen, WorldEdit, WorldGuard).
- Building is the core mechanic, so plots and review workflows fit.
- Weaknesses: one-block resolution, limited height, about 100–200 players per server, and Mojang's EULA limits on commercial use.
- Real-city replicas (for example Arnis, WorldPainter) generate the bulk from data and hand-build the landmarks. Our canon database plays the role OpenStreetMap plays for them.
The altitude problem
- Vanilla overworld height is 384 blocks (y -64 to 320).
- A datapack custom dimension type can reportedly go to about 4,064 blocks. This is unchecked for the target version. Test that a vanilla client can join, and check performance.
- Put sea level low and spend little on depth, except Moria and the goblin tunnels.
- If canon heights don't fit, use a vertical scale near 1:2. Get the canon figures with citations first.
- Extra worlds add width, not height. An altitude handoff between worlds is a last resort.
Legal approach
- Private use: a purchased copy, kept private and used for your own research, is the strongest position.
- Public output is only facts, your own wording and citations. Facts and ideas aren't protected. Citations aren't copies. Don't paraphrase closely or summarise scenes beat by beat, and cap any quote length.
- Cite the edition (publisher, year, ISBN) or use book and chapter, because page numbers vary.
- Not covered by buying a book: trademarks, game rights, and Tolkien's maps. Draw our own geography.
- "Every user buys the book" is a good feature, because citations point to the books, but it does not license derived output and the estate hasn't agreed to it.
- If this goes public at scale, pay for an hour with an IP lawyer or approach the estate.
- Rules differ by country. Canada's fair dealing is narrower than US fair use.
Handling the book copies
- Keep the corpus private: an encrypted disk, outside any git or cloud-sync folder.
- Never put it in a logged or public repo (
my-history,ideas/scratch, the canon repo). - If theIdea.club gets a files section, it needs encryption at rest with keys held off the repos, snippet-capped tool output, tool output excluded from chat logs, and per-user files only.
- Encryption rotation limits future exposure but can't undo a past leak.
- Don't strip DRM if there is any.
Source file status
- The "complete works" ePub fails to open in Foliate ("End of central directory not found"), which means a damaged or truncated zip, not DRM. It opened in one other viewer.
- Checks to run:
file,unzip -t, andzip -FFto repair. Calibre is the most tolerant reader. Ask the seller for a replacement if it's an official store. - Update (latest): Paul also has a legally purchased PDF of the complete works. Text can be selected and copied, for example the Hobbit's note on dwarves and orcs, so it has a real text layer and can be indexed and searched.
Suggested way to use the PDF: extract the text locally (pdftotext -layout), split it by work and chapter for stable citations, and index it with ripgrep or SQLite FTS. Record the PDF's edition details. Give Claude only short passages for one question at a time.
Build plan (thin vertical slices)
- Slice 0, setup: a private folder for the books, and a public repo of canon records as JSON or YAML (one per fact or place) with id, statement in own words, location, source (work, chapter, edition, page), tier, confidence and status.
- Slice 1, Misty Mountains canon: extract every fact about the range (peaks, passes, rivers, neighbours, travel times, Goblin-town), each as a short neutral statement with a citation. Review together and mark each stated, implied or open. Store distances and bearings as constraints with derivations, not coordinates.
- Slice 2, geometry and terrain: choose a coordinate frame and scale, place anchors from the constraints, make our own coarse heightmap (WorldPainter or noise forced through the anchors). Run the altitude datapack prototype early.
- Slice 3, playable result: load on a Paper server and fly the range, tuning scale and relief.
- Slice 4, Goblin-town: fix only what the text fixes (entrance near the pass, the great hall, the long descent, the back door). Generate the tunnel graph from the place ID as seed, render one lens.
- Slice 5, footnotes and lenses: add a second contributor interpretation and switch lenses by server setting. That proves the core idea.
Next steps
- Extract the PDF text locally and build the search index.
- Draft the canon record schema and three or four sample Misty Mountains records, marked unverified until checked against the PDF.
- Run the altitude datapack prototype in parallel.
- Decide whether chat attachments should be excluded from logs before ever attaching book text.