First Voices — a gallery of humanity's earliest surviving religious words
Concept
A small, slow, museum-grade gallery inside the web explorer: one ancient passage per page, presented as an artifact, not as a quote. Five rooms to start, ordered by attestation date:
| # | Voice | Date (attested) | Script | Cited edition |
|---|---|---|---|---|
| 1 | Pyramid Texts utterance (pyramid of Unas, Saqqara) | c. 2350 BCE | Egyptian hieroglyphs | Faulkner 1969 → faulkner-pyramid-texts-1969 |
| 2 | Kesh Temple Hymn (Abu Salabikh / OB recensions) | c. 2600 BCE tablets (gap — see below) | Sumerian cuneiform | ETCSL 4.80.2 / Black et al. — tier-1 record needed |
| 3 | Rigveda 10.129 (Nāsadīya Sūkta) | composed c. 1500–1200 BCE (3-reconstruction); MS 1040/1464 CE | Vedic Sanskrit (oral; romanized with accents) | Jamison & Brereton 2014 — tier-1 record needed |
| 4 | Oracle-bone divination charge (Anyang, Wu Ding reign) | c. 1250 BCE (radiocarbon) | Oracle bone script | Keightley → keightley-sources-of-shang-history |
| 5 | Baal Cycle lines (KTU 1.5–1.6: "Baal is dead… mightiest Baal lives") | tablets c. 1400–1200 BCE | Ugaritic alphabetic cuneiform | Smith & Pitard → ugaritic-baal-cycle |
Each room is one screen, vertically composed:
1. Photorealistic backdrop — the physical place and moment of inscription/recitation (GPT-5.5, atmosphere only — see Images).
2. The original script, rendered large in real Unicode (hieroglyphs, cuneiform, Ugaritic) via vendored Noto webfonts — typeset by us, never baked into generated images (AGENTS §5: no text in images; also keeps the script copyable, accessible, and honest about being a modern typesetting of an ancient text).
3. Transliteration line-by-line under the script.
4. Translation, with translator + edition + page cited inline — the exact wording verified against the cited edition before shipping, never from memory (AGENTS §1.7 discipline applied to quotes, not just URLs).
5. "What this person was asking for" — a short emic human reading, visibly framed in its own labeled panel (mirroring the existing Emic/Etic section styling in renderNote), e.g. for Unas: a dead king's attendants insisting, in carved stone, that he has not died but departed alive. For the oracle bone: a royal court asking whether Lady Hao's childbirth will go well. No advocacy, no debunking — just what was being asked, in its own terms.
6. A one-line etic footer: attestation date, evidence class, and the composition-vs-attestation caveat where it bites (Rigveda especially).
The whole thing is dark, quiet, and slow: black background, one warm light source, generous whitespace, no navigation chrome except "next voice →". Cards on the gallery landing page show only the script glyphs glowing on the artifact backdrop — you must enter the room to read.
Why it takes you back in time
Everything else in this vault is about ancient religion. This is the only place where the user is addressed by it. The oldest words humans ever wrote down to a god are mostly requests — don't let him be dead, let the birth go well, where did all this come from, will the harvest survive Death — and they are recognizably the requests we still make. Reading "O King, you have not departed dead, you have departed alive" while standing (visually) inside the torch-lit chamber where a craftsman carved it 4,400 years ago collapses the distance in a way no synthesis essay can. The emic panel does the time travel; the etic footer keeps us honest about how we know the date. That tension — this is a real person's voice + here is exactly how thin the thread is that carried it to you — is the experience.
It also embodies the vault's method: each room is literally a tier-1 source record turned into a place you can stand.
Experience walkthrough
1. User clicks First Voices from the explorer home (new card under the hero, next to the domain grid).
2. Gallery hall (/voices): five dark cards in a single row/column, each showing its backdrop with the original script glowing over it and only a date — "c. 2350 BCE", "c. 2600 BCE"… No titles. Curiosity does the navigation.
3. User clicks the oldest card. Room 1 (/voices/unas): the Saqqara chamber backdrop fades in (CSS only), then the hieroglyphs render line by line (CSS animation-delay per line — feels like reading by torchlight, costs zero JS).
4. Scroll: transliteration aligns under each line, then Faulkner's translation, then the emic panel — "What was being asked: that the king's death not be a death." — then the small etic footer: attested c. 2350 BCE · 2-text · inscribed copy is the datum, not the composition date → pyramid-texts-oldest-large-corpus.
5. "next voice →" walks chronologically forward: Kesh → Unas → Baal → oracle bone → Nāsadīya (which closes the gallery on the only voice that asks rather than petitions — "Who really knows?" — a deliberate curatorial ending).
6. Every room deep-links to its tier-1 source note and the relevant tier-2 claims, so the experience is a front door into the research, not a detour from it.
Data from the vault
Already in the vault (ready to ship):
- Pyramid Texts: faulkner-pyramid-texts-1969 (tier 1) + pyramid-texts-oldest-large-corpus (tier 2,
confidence: high, attestation c. 2350 BCE, with the inscription-vs-composition caveat already written — reuse it verbatim as the etic footer). Candidate passage: Utterance 213 ("O King, you have not departed dead, you have departed alive"), to be verified against Faulkner before shipping. - Baal Cycle: ugaritic-baal-cycle (tier 1,
status: reviewed) already contains the exact lines and context — Baal's death announcement and "mightiest Baal lives, the prince, lord of the earth, exists" (KTU 1.6 iii, Smith & Pitard), with the broken-tablet reliability note that belongs in the room's footer. Feeds dying-rising-god — link it. - Oracle bones: oracle-bones-earliest-dated-chinese-religious-writing (tier 2,
confidence: high, radiocarbon 1254–1197 BCE) + keightley-sources-of-shang-history + eno-shang-state-religion-pantheon. Candidate charge: the Fu Hao (Lady Hao) childbirth divination from Wu Ding's reign — charge, crack, verification — exact text and HJ/Bingbian number to be taken from Keightley's edition. The note's emic paragraph ("records of something done, not something believed") is the room's emic frame, ready-made. - Rigveda 10.129: rigveda-oral-gap-composition-vs-attestation (tier 2,
confidence: high) supplies the mandatory etic footer — composition c. 1500–1200 BCE is 3-reconstruction, manuscripts 1040/1464 CE, ~2,500-year oral gap. vedic-religion already names the Nāsadīya as the cosmogonic-speculation exemplar. Curatorial consequence: this room must display the gap prominently — it is the one voice carried by mouths, not objects, and that is its own kind of awe.
Gaps (gather before those rooms ship):
- Kesh Temple Hymn: no tier-1 record exists. Needs
02_mesopotamian/1_sources/kesh-temple-hymn.mdciting ETCSL 4.80.2 (Black et al., The Electronic Text Corpus of Sumerian Literature) and the Abu Salabikh attestation (Biggs 1971/1974, OIP 99) — the c. 2600 BCE tablets are the load-bearing date claim and must be sourced before the room exists. - Rigveda 10.129 edition: no tier-1 record for Jamison & Brereton 2014 (The Rigveda, Oxford UP). Needs
04_indo_european/1_sources/or06_dharmic/1_sources/entry (url_verified: not-onlineis fine). - Exact passage wording for rooms 1 and 4 must be transcribed from the cited editions, not from model memory — treat unverified quotes exactly like hallucinated URLs: catastrophic. Until verified, a room renders with the script + paraphrase and a visible
passage: unverifiedbadge, or doesn't ship.
Both gaps become entries in 00_meta/OPEN_QUESTIONS.md / the gather queue, per AGENTS §3.6 — the experience drives gathering, which is the loop working as designed.
Implementation sketch (bun, zero npm deps, in existing tools/server.ts)
- Data: new
tools/voices.tsexportingconst VOICES: Voice[]—{ slug, date, dateSort, scriptLines: string[], translitLines: string[], translationLines: string[], edition, emic, eticFooter, sourceNote, claimNotes, backdrop, verified: boolean }. Plain TypeScript module, imported byserver.ts. Script lines are Unicode strings (hieroglyphs U+13000 block, cuneiform U+12000, Ugaritic U+10380; oracle-bone script has no Unicode block → that room uses kaishu-modernized hanzi with an explicit "modern character forms" label, or a traced SVG of the actual bone — decide at build). - Routes: two new branches in the existing
Bun.servefetch handler before the markdown fallthrough:/voices(gallery hall) and/voices/:slug(room). Both reuse the existingpage()wrapper andesc(); rooms get a<style>block extending the current CSS (the dark theme is already there). The/api/versionlive-reload script comes free viapage(). - Fonts: vendor
NotoSansEgyptianHieroglyphs,NotoSansCuneiform,NotoSansUgariticwoff2 files intoassets/fonts/(static files, no package manager involved — zero npm deps holds). Serve through the existing static-asset path;@font-facein the room CSS withunicode-rangeso only the needed font loads per room. - Animations: pure CSS — backdrop
opacityfade, per-lineanimation-delayreveal. No client JS beyond whatpage()already injects. - Read-only invariant preserved: no new write paths, still binds 127.0.0.1 (public exposure stays whatever god.olibuijr.com already does).
- INDEX link: one line under Infrastructure / a card on the explorer home — implemented experiences are linked from INDEX per AGENTS §5.
Estimated diff: ~120 lines in server.ts, ~150 lines voices.ts, 3 font files, 6 PNGs.
Images needed (numbered GPT-5.5 photorealistic prompts)
All prompts inherit the standing constraints: photorealistic, cinematic, archaeologically grounded, no legible text or signs of any kind in the image (script is typeset in HTML on top — any carved/inscribed surfaces must be out of focus or in shadow so no character is readable), no recognizable living people, no devotional framing. Output to assets/illustrations/.
1. voices-hall.png (gallery banner) — A long, dark museum-like stone corridor receding into blackness, five warm pools of torchlight on the left wall at regular intervals, each pool illuminating a patch of bare ancient stone; dust motes in the light shafts; cold dawn light barely visible at the far end; cinematic 35mm, deep shadows, photorealistic, no text, no people's faces.
2. voice-unas.png (Pyramid Texts room) — Interior of an Old Kingdom Egyptian pyramid burial chamber c. 2350 BCE, raking warm lamplight across a finely dressed limestone wall whose dense carved columns are softly out of focus, a gabled ceiling of massive stone slabs overhead, a black basalt sarcophagus edge in the foreground shadow; the air thick with stone dust; single oil lamp as the only light source; photorealistic, archaeological accuracy, no legible glyphs, no people.
3. voice-kesh.png (Kesh Temple Hymn room) — A Sumerian mudbrick temple platform at dusk c. 2600 BCE, southern Mesopotamian plain, reed marshes and irrigation channels catching the last orange light, a fresh damp clay tablet and a cut reed stylus resting on a woven mat in the near foreground with its surface angled away into shadow, smoke rising from a distant offering fire; photorealistic, cinematic wide shot, no legible signs, no faces.
4. voice-nasadiya.png (Rigveda 10.129 room) — Pre-dawn darkness on a northwest South Asian river plain c. 1200 BCE, a small ritual fire of stacked wood burning in a cleared earthen enclosure, two robed figures seen only as distant silhouettes from behind, an immense star-filled sky taking up two thirds of the frame with the Milky Way arching overhead, faint mist on the river; photorealistic, long-exposure night-photography feel, no faces, no text, contemplative not devotional.
5. voice-oraclebone.png (oracle-bone room) — A Shang dynasty diviner's workshop interior at Anyang c. 1250 BCE, night, a glowing bronze rod just withdrawn from a brazier, a large prepared ox scapula held over the coals with a fresh heat crack catching the ember light, the bone's surface angled into shadow so no marks are readable, bronze vessels and stacked plastrons blurred in the background dark; photorealistic macro-to-medium shot, dramatic ember lighting, no legible characters, hands only — no faces.
6. voice-baal.png (Baal Cycle room) — A scribe's room in the palace quarter of Ugarit c. 1200 BCE, late afternoon Mediterranean light through a small window, a damp clay tablet and bone stylus on a wooden table with the tablet's face turned from the camera, and through the window a violent dark storm front advancing over the sea toward the coast — rain columns, lightning inside the cloud mass; photorealistic, cinematic contrast of warm interior and storm light, no legible cuneiform, no people.
Effort (S/M/L + what ships first)
M overall. Breakdown:
- S — ships first (one evening):
/voices+ two rooms whose vault data is already verified-grade: Unas (after the Faulkner passage check) and Baal (the KTU lines are already extracted in ugaritic-baal-cycle). Fonts vendored, images 1, 2, 6 generated. This is a complete, linkable experience with two voices — better two real rooms than five rushed ones (calibrated confidence over coverage applies to experiences too). - M — wave two: oracle-bone room (passage transcription from Keightley) + Nāsadīya room (Jamison & Brereton tier-1 record + passage), images 4, 5.
- M — wave three: Kesh room, blocked on the new tier-1 source note (ETCSL + Biggs/Abu Salabikh dating); image 3. Open-question entries filed at wave one so the gather loop starts immediately.
- L (explicitly out of scope for now): audio recitations, more voices (Coffin Texts, Gathas, Homeric hymns), and any interactivity beyond scroll + next.