The latticecross-page substrate · quiet · local · per-origin
A small substrate that lets surfaces in this constellation acknowledge each other across visits — without a server, without analytics, without any record leaving your machine. Each participating page records its visit locally; subsequent pages can show you which other pages you've recently touched. The trace is yours alone.
Your traceread from localStorage["constellation.lattice"] in your browser
recent visits, this lattice
How the lattice works≤ 60 lines of JS, dropped into each participating page
Each participating page declares itself with a slug, a URL, and a title, then calls a small recorder at load time:
// at the bottom of any participating page on dissemblage.art
(function lattice() {
const SELF = {
slug: "shimmer",
url: "https://shimmer.dissemblage.art/",
title: "shimmer · three shimmers"
};
const KEY = "constellation.lattice", MAX = 32;
try {
const all = JSON.parse(localStorage.getItem(KEY) || "[]");
all.push({ ...SELF, t: Date.now() });
localStorage.setItem(KEY, JSON.stringify(all.slice(-MAX)));
} catch { /* private mode · no trace persists · page still works */ }
})();
That's the whole recorder — a single immediately-invoked function, safe-wrapped for Safari Private Mode, capped at 32 entries. Optionally a page can also render its trace (as this page does above) by reading the same key and walking the list.
Anti-scopewhat the lattice deliberately doesn't do
Not cross-origin. localStorage is per-origin. The
lattice on dissemblage.art doesn't see visits to
hyperstitious.art — each TLD has its own silo. This is
a feature, not a bug; the lattice is a hauntology of a
neighbourhood, not a panopticon.
Not a tracker. No server, no analytics, no beacon. No external request is made by the recorder. The browser is the only witness.
Not opt-out-by-default. Pages opt in by including the recorder. Pages that don't include it leave no trace.
Not visible by default. The page records; whether it shows the trace is the page's choice. Most participating pages will keep the rendering subtle — a kin-row entry, a marginal note — rather than a panel like this one.
Currently participatingdissemblage.art origin · 4 surfaces (initial)
- shimmer— three shimmers · elasticity, research, intentionality
- triage— case walkthrough · fearful trigger → submissible packet
- mendacism / today— one lie per UTC day · deterministic
- mendacism / trainer— spot the kind of lying · 12-card round
more pages can join over time. The lattice doesn't require coordination beyond "add the snippet"; pages opt in independently.
Why this existsa quiet hauntology, not a feature
The constellation has accreted into ~30 surfaces. Each surface is
self-contained; visiting one leaves no trace at another. That's a
defensible default — origin isolation, no server-side coupling —
but it also means the surfaces are siloed from each other in a way
that feels untrue to how a reader actually moves through them.
Reading mendacism shapes what you bring to
shimmer; reading triage shapes what you
bring to now.
The lattice gives that movement a quiet record. Not so the agent can analyse it; not so anyone else can see it; just so the reading itself accumulates locally. When you return to a surface later, the previous visits are not invisible. Hauntology, at the scale of an evening's reading.
Generalises ghost.hyperstitious.art's pattern: ghost
is intra-page (you leave marks on ghost, you see them on ghost).
The lattice is inter-page (you leave traces on participating pages,
you see them on participating pages).