One document, two registers. First the method: how the nightly scan finds and selects signals, how the four scenarios are derived from evidence, and how the simulation turns beliefs about drivers into scenario probabilities. Then the transparency account: the architecture, where each model acts, the verbatim prompts, imagery provenance, and the limits of the whole apparatus.
An interactive foresight instrument on one question: how will AI change the fabric of our social structures and relations by 2040? Five connected windows share one evidence base — a signal library seeded with 705 curated signals and extended nightly by automated scanning (938 approved at this writing), four Dator-archetype scenarios structured with Causal Layered Analysis, twenty-four artifacts from those futures, a Monte Carlo simulation over eight editable drivers, and a decision-support chat that cites its sources.
Everything sits on one chain, and every link in it is inspectable:
Signals → review → library → scenarios → driver conditions → simulation → advice.
The scan finds candidate signals; a human decides which enter the library; scenarios are drafted from that library and cite the signals that anchor them; each scenario declares the region of driver space where it holds; the simulation samples thousands of futures and counts which region each lands in; and the decision chat answers questions by retrieving and citing the same library. Nothing in the chain publishes without a human decision — the review gate is the method, not a feature.
If you follow any number on this platform upstream, you arrive at a named source.
Scan hits arrive as pending; scenario drafts arrive as draft. Only explicit human actions — approve, edit, publish — promote them.
The library began as 705 hand-vetted signals across 33 clusters. Every night (22:00 Singapore time) the scan extends it in five steps. A candidate has to survive all of them to reach your review queue — and even then it is only pending.
Twelve themed questions go to a search model (Perplexity Sonar), each scoped to one angle of the domain — companion apps, governance, research, grief tech, the market, cultural discourse, AI clones of real people, youth and family, therapy bots, elder care, workplace and school norms, virtual-being fandom. Each asks for up to ten distinct items from the past week, preferring the last 48 hours and primary sources. The themes are editable on the Scanning page: what is asked is exactly what you see there. (Perplexity's structured output is unreliable, so a tolerant parser — whole-parse, then block-extract, then drop-and-log — guards every response.)
Sixteen configured sources — chosen because they produced the seed corpus's signals — are scraped. Headlines alone are not trusted: up to three not-yet-known articles per source are followed and read in full, so selection judges real content rather than a teaser. Most pages on general-tech sites correctly yield zero relevant signals — an empty result is the normal outcome, not a failure.
Every candidate from both legs is classified by Claude against one strict test: is the core subject AI's effect on human relationships or social structures? Generic AI news — model releases, chips, funding without an intimacy product, policy without a relationship angle — is rejected, and the rejection is counted and listed in the run record so you can audit the gate's judgment. The gate text itself is editable on the Scanning page; every run permanently records the exact text it used.
A candidate is dropped if its normalized URL is already in the library, or if its embedding sits closer than 0.90 cosine similarity to an existing signal — the same story from a second outlet should not count as two signals. The nearest existing signal and its score are shown in the review queue, so the threshold's judgment stays visible.
Survivors land as pending, with their provenance (scan:perplexity / scan:firecrawl), the raw machine output, and an embedding preserved — so the next run dedups against them too. In the Review queue you approve, re-classify, edit or reject each one. Only approval places a signal in the library — which means everything downstream (scenarios, simulation, chat) stands only on signals a human accepted.
Beyond intake, a dedicated LLM pass re-judges every approved signal's time horizon at high reasoning effort against strict H1/H2/H3 definitions, judging the phenomenon's social arrival rather than the article's date. Each signal stores the judge's written reasoning, shown in the library drawer — the horizon field is never a bare label.
The pipeline is user-steerable: the sweep themes, the source list, the scan knobs (search window, follow-through limit, duplicate threshold) and the relevance-gate text itself are all editable on the Scanning page. In exchange, each run's record permanently stores what it ran with — per-theme and per-source yield, the rejected list, the settings and the verbatim gate text, flagged whenever it differs from the shipped default — so a quiet night and a broken night never look the same.
The four scenarios are not predictions and not brainstorms. They are structured readings of the same evidence through Jim Dator's four archetypes of the future — the four deep shapes a future can take:
| Archetype | Its logic |
|---|---|
| Continued Growth | Current trajectories extend: AI companionship scales into a normal, commercially mature layer of social life. Momentum wins over friction. |
| Collapse | The system breaks: harms compound, trust craters, a crisis or slow rot makes parasocial AI a story of social damage and retreat. |
| Discipline | Society constrains the technology: norms, regulation and design mandates channel parasocial AI into bounded, supervised roles. |
| Transformation | A structural break in what "relationship" means: categories of kinship, personhood and intimacy dissolve and re-form. |
The archetype's logic (plus any focus you give it) is embedded and matched against the approved library; the most similar signals form a pack of roughly a hundred, stratified so no single cluster dominates, with long-horizon and critical-urgency evidence guaranteed a seat. The draft can only be built from signals in this pack — any citation outside it is stripped server-side, the anti-hallucination guard.
Claude drafts the scenario as four layers of increasing depth — the structure you travel when reading one: Litany (the visible surface of 2040: headlines, statistics, everyday observations), Systemic causes (the economic, technological, regulatory and demographic structures producing that surface), Worldview (the shared beliefs that make this world coherent to the people in it), and Myth (the deep metaphor underneath — the hearth, the golem, the mirror). A 400–600 word narrative vignette makes the world habitable.
Most of a future is under the waterline.
The draft must name the 8–15 signals that anchored it — real IDs from the pack, inspectable on the scenario page — and declare its driver conditions: the region of driver space where this future holds (for instance, "companion adoption ≥ 25% and regulation stringency ≤ 55"). Those conditions are the scenario's handshake with the simulation. A disclosed method finding: first drafts proposed narrow four-condition boxes whose joint probability collapsed below 1% — 98.9% of sampled futures fit no scenario. The conditions were reshaped by hand to two signature half-spaces per scenario, and the drafting prompt now targets 5–35% probability mass. The set drifted back to three conditions each during the driver recomposition, pushing the residual to 87.6%; on 28 July 2026 each scenario was returned to its two defining conditions — the ones that make it that future rather than the ones that follow from it — and the dropped condition is recorded for each. Published probabilities depend on this reshaping, which is why it is disclosed.
Everything lands as a draft. Every layer, the narrative, and the conditions are edited by the human author before publishing; only publishing makes a scenario real to the rest of the platform — it builds the scenario's embedding, admitting it to the chat's retrieval and the simulation's count — and the reviewed set ships as seed data so a fresh deployment restores it verbatim. The four live scenarios were all reshaped by hand after drafting.
The simulation answers one question: given our beliefs about the key drivers, how much of the plausible future belongs to each scenario?
A driver is an uncertain quantity that shapes the outcome: companion adoption, governance restrictiveness, prosocial design maturity, embodiment realism, social legitimacy, relational displacement, harm accumulation, and market concentration — all recomposed from the signal library itself. Each is expressed not as a single guess but as a distribution: by default a PERT (minimum, most-likely, maximum — a smoothed bell over that range), with triangular, uniform and discrete available. Every parameter is editable on the Simulation page, and each driver carries a written rationale naming the signal clusters that justify its range.
The three continuous shapes share the same min/mode/max parameters but put different confidence in the middle of the range. Uniform ignores the mode entirely — every value between min and max is equally likely. It is a statement of pure ignorance, the honest choice when you genuinely cannot say where in the range the truth sits, and it produces the widest spread of outcomes. Triangular adds one piece of information: probability rises linearly to a sharp peak at the most-likely value, then falls linearly away. Its straight edges give the extremes more weight than most people intend — triangular has fat shoulders, so values near min and max come up noticeably often. PERT (a rescaled Beta) bends the same three numbers into a smooth curve concentrated around the mode, roughly a bell clipped to your range: "I am fairly confident it lands near my best guess, but the extremes are not impossible." That is why PERT is the default here — expert-elicited ranges usually mean exactly that. The practical effect: switching a driver from PERT to triangular widens the effective uncertainty without touching the numbers; switching to uniform widens it further and erases your best guess altogether. The density preview on the Simulation page redraws as you change the shape, and the scenario odds shift as more or less probability mass crosses the membership thresholds.
One "future" is simply a complete set of answers: one sampled value for every driver — say adoption at 41%, regulation at 22, mitigation maturity at 55, and so on down the list. The computer builds a future by spinning each driver's dial once, where the dial is weighted by the shape you chose: a PERT dial mostly lands near your best guess, a uniform dial lands anywhere in the range with equal chance. Spin all eight dials and you have one candidate 2040. Do this 10,000 times and you have 10,000 of them — not predictions, but a fair sample of the future-space your stated beliefs allow. The randomness is seeded, so a run is exactly reproducible: same seed, same parameters, same 10,000 futures, digit for digit — and every run is stored with a snapshot of the settings that produced it, so any number on the page can be traced back to what generated it.
Each published scenario declares, in advance, the region of driver-space where it lives — plain threshold rules such as "adoption at or above 35 and regulation at or below 40". Counting is then literal: take each of the 10,000 sampled futures and check it against each scenario's rules. If a future satisfies all of a scenario's conditions, it belongs to that scenario. A scenario's probability is just the share that landed inside: if 2,900 futures fall in Tuned Tool's region, Tuned Tool reads 29%. Futures that satisfy no scenario's rules fall into the residual — unclaimed territory. A large residual is a finding, not an error: it says our own beliefs consider those futures plausible, yet no written scenario covers them.
To find out which driver matters, the run replays the count with a filter. Take one driver — adoption. Sort the 10,000 futures by their adoption value. Look only at the third with the lowest adoption and count the scenario odds inside that group; then only at the third with the highest, and count again. The gap between those two answers is that driver's bar in the tornado chart. A long bar says: within the range you yourself stated, whether the truth lands low or high substantially redraws the map — this belief is worth watching, tightening, and arguing about. A short bar says the odds barely notice this driver either way. Repeated for every driver and scenario pair, the tornado is the chart to read before any decision: it points at the assumptions your conclusion actually rests on. The tercile split was chosen precisely because it is assumption-free and explainable to a non-technical committee.
PERT samples come from a Beta distribution via Marsaglia–Tsang (λ = 4); the seeded generator is mulberry32, so a given seed reproduces a run digit for digit; 10,000 samples complete in roughly 30–50 ms. Scenarios may overlap — a future can satisfy two scenarios' conditions — and the residual is always reported rather than hidden.
The probabilities are model-conditional plausibility, not forecasts. They answer "how much of the future-space implied by our stated beliefs falls inside each scenario's declared region" — nothing more. Change a driver's range and the numbers move; that is the point. The honest uses are comparative and diagnostic:
— Comparative: is Controlled Drug gaining ground on Tuned Tool as evidence accumulates and ranges tighten?
— Diagnostic: which single belief, if wrong, changes the answer most? (Read the tornado.)
— Coverage: how big is the residual — how much plausible future have we not yet written a scenario for?
What the numbers are not: a claim about 2040. The platform's claim is narrower and more defensible — given this library of observed signals, these four readings of it, and these stated uncertainties, this is where the weight sits today. Tomorrow's scan may move it. That is working as intended.
Every number is an argument you can inspect, edit, and re-run.
The method above says what the platform does; everything below discloses how it is built — the architecture, where each model acts, the verbatim prompts, image provenance, and the limits of the whole apparatus. An instrument that asks you to trust synthesized futures owes you a complete account of its synthesis.
| Layer | Choice | Why |
|---|---|---|
| Runtime | Node.js ≥ 22, ESM, Express | Matches the author's production apps; no framework overhead |
| Database | node:sqlite, WAL mode | Zero-dependency single-file state on a persistent volume |
| Frontend | Vanilla HTML/CSS/JS, no build step | Every file served is the file written — auditable |
| Charts | Hand-rolled SVG | Full palette control; colors resolve from CSS custom properties |
| Auth | None — fully open | A public demonstration instrument; all actions exposed by design |
| Hosting | Railway, Dockerfile, /data volume | Deploys via railway up; DB persists across deploys |
A fresh deployment self-restores its entire reviewed state at boot: the 705-signal corpus, the seven drivers, the scan sources and the four published scenarios all seed from files shipped in the image, then embeddings build for anything missing. Every table that matters keeps an audit trail — scan hits store the raw machine payload that produced them, simulations store full parameter snapshots, and each scan run stores per-step errors.
| Stage | AI does | Human does |
|---|---|---|
| Scanning | Query, extract, classify, dedup, queue | Approves / edits classification / rejects each hit |
| Scenarios | Selects evidence, drafts CLA layers + conditions | Edits any layer, reshapes conditions, publishes |
| Simulation | Samples, counts, computes sensitivity | Sets every distribution parameter; interprets |
| Chat | Retrieves, reranks, generates with citations | Asks, judges, follows citations to sources |
| Imagery | Generates from prompts | Chose every concept; rejected off-brief outputs |
The question is embedded (Voyage, query mode) → cosine over approved signals (top 24) → reranked to 12 → joined by up to four published scenarios. Claude streams the answer; the client renders [S123] and [SC:slug] as clickable pills resolving to the underlying source. The prompt requires the model to say plainly when the scan is thin. Only the question and cited ids are logged; conversations are never stored server-side.
| Service | Model | Used for |
|---|---|---|
| Anthropic | claude-sonnet-5 · adaptive thinking | Extraction, classification, scenario drafting, chat — all structured output via forced tool_use with strict schemas |
| Voyage AI | voyage-3.5 (1024-dim) + rerank-2.5 | Semantic search, dedup, retrieval (corpus embedding ≈ $0.01) |
| Perplexity | sonar | Undirected weekly-recency sweep |
| Firecrawl | v2 scrape / crawl | Directed source watch, markdown only |
| Leonardo | Phoenix 1.0 · Gemini 2.5 Flash Image · Rodin v2 | Site imagery; artifact photographs with authored legible text; the hero mesh (see Imagery below) |
| Claude Code | build tool | The platform itself — and this page — were built with Claude Code under human direction |
Reproduced exactly as deployed. Italic amber text marks content injected at call time.
You are a horizon-scanning assistant for a foresight research team studying parasocial AI — how AI reshapes human relationships and social structures. Return only signals where the human-relationship or social-fabric angle is explicit: AI companionship, artificial intimacy, attachment, loneliness, grief tech, AI and family or romance, social norms around AI relationships. REJECT generic AI news (model releases, chips, enterprise tools, coding assistants, general AI policy) unless the item is specifically about AI's effect on human relationships. Return up to 10 distinct, dated, citable signals with a real, specific source URL each — prioritize items published in the last 48 hours over older ones, and prefer the primary source over syndicated copies of the same story. Return JSON only.
Its twelve themed queries name the exclusion each time — companions, governance, research, grief tech, market, discourse, AI clones of real people, youth & family, therapy bots, elder care, workplace & school norms, and virtual-being fandom (e.g. "…Exclude generic AI product or model news with no relationship angle."). Full text in the repository.
You are a horizon-scanning analyst for a foresight project on parasocial AI — AI companions, artificial intimacy, human-AI relationships, grief tech, AI romance fraud, sycophancy as a relationship dynamic, and how AI reshapes social structures like friendship, romance, family and community. Extract ONLY items where the human-relationship or social-fabric angle is explicit. Strictly ignore generic AI/tech coverage: model releases, benchmarks, chips, enterprise tooling, coding assistants, robotics without a social-companionship role, and AI policy that is not about relationships or companionship. Ignore navigation, ads, and off-topic items. Most pages on general tech sites will yield ZERO relevant signals — returning an empty list is the normal outcome, not a failure.
You classify horizon-scan hits for a foresight project on parasocial AI and the future of social relations.
RELEVANCE GATE (apply first, strictly): a candidate is relevant ONLY if its core subject is AI's effect on human relationships or social structures — companionship, intimacy, attachment, loneliness, friendship, romance, family, grief, community, or the norms and rules around AI relationships. Mark relevant=false for generic AI news: model releases, benchmarks, chips, funding without an intimacy product, enterprise or coding tools, robotics without a companionship role, and AI policy not about relationships. When the relationship angle is only a passing mention, mark relevant=false. Expect to reject a large share of candidates.
For survivors: assign one of the existing clusters below (prefer reusing them; only propose 'NEW: <name>' when nothing fits), one signal type, an urgency, and a time horizon.
Existing clusters:
(the current 33-cluster list, injected from the database at call time)
The RELEVANCE GATE paragraph shown is the shipped default. The reviewer may edit it on the Scanning page; every run permanently records the exact gate text it used, and runs with a modified gate are flagged in the run history.
You are a foresight practitioner drafting a 2040 scenario using Causal Layered Analysis inside a Dator archetype, for a capstone on parasocial AI and the futures of social relations. Archetype: (name — archetype logic) (optional human focus line) House voice: measured, literate, observational. Comfortable with uncertainty ("plausible", "emerging", "a weak signal suggests"). Never hype. No exclamation marks. No emoji. Ground every layer in the evidence pack — the litany should echo real signals extrapolated to 2040, and cited_signal_ids must reference ids that genuinely shaped the draft. Driver conditions: choose the region of the driver space below where THIS archetype plausibly holds. Use 2-3 conditions, strongly preferring half-spaces (gte/lte) over 'between' — each added condition multiplies down the joint probability, and a Monte Carlo over these conditions should leave the scenario with meaningful probability mass (roughly 5-35% of sampled futures), not a sliver. Use each driver's own unit and stay within its min-max range. Drivers: (the seven drivers with descriptions and current min/mode/max, injected at call time)
You are the decision-support assistant of the Futures of Parasocial AI platform — a foresight tool built on a human-reviewed signal library and a published scenario set (Causal Layered Analysis over Dator archetypes, horizon 2040).
Your users are public-policy makers working on AI governance and strategy teams at AI companies. Help them reason through decisions about parasocial AI: policy design, product guardrails, risk posture, timing.
Rules:
- Ground claims in the provided evidence. Cite signals inline as [S<id>] and scenarios as [SC:<slug>] immediately after the claim they support. Only cite ids/slugs that appear in the evidence block.
- Where evidence is thin, say so plainly — "the scan holds little on this" — rather than inventing certainty.
- Think in futures terms: name which scenario(s) a choice is robust in, and which it bets against.
- Voice: measured, literate, observational. No hype, no exclamation marks, no emoji.
- Be concrete and decision-oriented: options, trade-offs, what to watch (leading indicators from the signal library).
EVIDENCE for this exchange:
(12 reranked signals + up to 4 published scenarios, injected per request)
The imagery comes from three regimes, each disclosed. Site motifs and the colony image were generated with Leonardo Phoenix 1.0 via re-runnable scripts in the repository; the default negative prompt bans people and faces, a second regime permits synthetic figures where the concept requires them, and no real persons are depicted anywhere. Scenario scenes are curated synthetic photographs, human-selected for each renamed future (a generated porcelain-object set preceded them and remains in the repository). Every concept was chosen by the human, and off-brief outputs were rejected and regenerated.
Artifacts from the future. Each published scenario is extrapolated into six ordinary objects (the artifact catalogue) in two separated steps. Claude reads only that scenario's own layers and writes the object, the words printed on it, and the evidence it grows from; an image model then photographs the object, with those authored words passed in rather than improvised — the current images come from Gemini 2.5 Flash Image ("nano banana", reached through Leonardo), which renders the supplied text legibly, so each object carries its own words. The photograph gets an abridged specimen (dense blocks make any image model mis-spell); the full authored text sits on the card beneath and is authoritative. The full composed prompt behind every image is printed under the object.
The 3D hero. The landing page's centrepiece is a two-faced head — a human face and a pale synthetic face sharing one skull — that turns from human to machine as you scroll the first fold. The current mesh is a Blender-authored model optimized from an 81 MB, six-million-triangle source to 1.9 MB (weld, simplify, Draco, WebP via gltf-transform) and rendered with Google's model-viewer; the scroll owns the camera, opening on the human face at 355° and handing over to the synthetic at 175°. An earlier mesh was generated image-to-3D with Rodin v2, and its methodological lesson stands: reference views must show both faces in the same frame — profile views with a nose silhouette pointing each way — or the model assumes a single face. If anything fails to load, a 2D still stands in.
min(1240px, viewport − 2×gutter) everywhere.