A public, interactive living map of the BC + AI, ED + AI, and Futureproof ecosystem — the organizations, projects, events, and initiatives, and how they connect.
It's a WebGL knowledge graph. The repo ships version-controlled open data in
/data; production hydrates from Notion → Neon via /api/graph
(Status=Public only). Live: https://official.observer · v0.6.0.
- Explore the ecosystem as a graph; hubs are sized by how connected they are.
- Filter by initiative (BC + AI / ED + AI / Futureproof) and by entity type; default hub lens hides orgs until you opt in.
- Search any org, project, event, or initiative and jump to it.
- Click any node to see its blurb, links, and every connection — or open
/e/<stableId>for a shareable page. - Pulse shows upcoming Public events (from Notion Next Date) plus the Futureproof countdown.
- Download the Public graph as JSON:
/api/v1/graph(CC BY 4.0). See docs/API.md.
- Next.js 16 (App Router) + TypeScript + Tailwind v4
- Sigma.js + graphology (WebGL graph + ForceAtlas2 layout)
- MiniSearch for client-side search
- Optional: Neon Postgres + Notion sync (Status=Public gate)
- Deploys on Vercel
npm install
npm run dev # http://localhost:3000
npm run build # production build
npm run start # serve the production build
npm run check:seo # verify raw HTML against a running server on localhost:3000
npm run check:www # verify www → apex redirect config (optional HTTP check)Set SEO_CHECK_BASE_URL to run the search-discovery check against another local
port. Set WWW_CHECK_BASE_URL to also hit a running server with
Host: www.official.observer (or the live www host after DNS exists). Canonical
host is the apex https://official.observer; www 308s there. Porkbun still
needs a www CNAME before the public hostname resolves — see
docs/PROJECT-NOTES.md.
.env.schema is the agent-readable contract. Keep values in ignored local
files or the platform store, validate with varlock load --agent --show-all,
and run secret-dependent commands through
varlock run --inject vars -- <command>.
Two files drive the seed map (and remain the fallback when no DB is configured):
data/entities.json— nodes. Each has anid,type(org·project·event·initiative;personreserved),name,blurb,initiatives, optionalregion/tags/links/joinUrl/nextDate.data/relationships.json— edges. Each has asource,target,type(e.g.runs,partners,produces), and optionalweight.
Live production mirrors the same shape from Observatory Entities and Observatory Relationships (Public rows only; sync prefers Notion Stable ID). Curation: docs/CURATION.md. Ops truth: docs/AGENT-MEMORY.md.
Add an entity, add its relationships, reload — it's on the map.
The live graph is embeddable via the chrome-less /embed route (framing is
allowed for bc-ai.ca and futureproof.website):
<iframe
src="https://official.observer/embed?node=initiative-bc-ai"
width="100%" height="600"
style="border:0;border-radius:12px"
title="The Observatory"
loading="lazy"
></iframe>Query params: node=<stableId>, initiative=bc-ai|ed-ai|futureproof.
To allowlist another host, PR EMBED_HOSTS in next.config.ts (see
docs/API.md).
Corrections and additions are welcome — see CONTRIBUTING.md.