Transmission suspended

Maintenance in progress

the machine is recalibrating. it returns shortly.

re-attuning the listening field…

the honest machine · maintenance in progress
SIGIL STACK how it runs

Architecture

Exa neural search
Tavily llm pipeline
Jina page extract
SIGIL claude-opus-5 · 12 category scan
Supabase postgres · realtime · edge · pg_cron · vault
SvelteKit cloudflare pages · every visitor

The layers

01

Research

Exa + Tavily + Jina Reader

Three providers. Each chosen for what the others cannot do.

Exa — neural search

The only provider that can find what esoteric communities are feeling, not just what they explicitly say. Keyword search finds text. Neural search finds concepts — the meaning underneath the words.

Also used for deep research across all categories when standard search hits its ceiling. Exa's neural mode is the backbone of the esoteric category. This is not optional — keyword search for occult discourse returns noise.

Tavily — LLM-optimized pipeline

Structured, clean results for the five high-frequency categories. Tavily was built specifically for LLM consumption — less markup garbage, more actual content. advanced depth mode for deep dives.

Jina — page extraction

When a snippet is not enough. Jina extracts full readable content from specific URLs — used to enrich signals that look significant but are too short to interpret. Runs in parallel after the main search batch.

Why three

Research is the most important layer in this system. Every addition here changes what SIGIL finds. One provider would create a single point of failure and a single perspective. The decisions made here will compound — this is why the research layer is built as a swappable module, not a hardcoded call.

02

The brain

Anthropic API · claude-opus-5 / claude-haiku-4-5-20251001

The mind is swappable live: every place the machine thinks resolves its model at runtime — the operator's model_config dial first, then the env vars (THM_MODEL for the decision, the Unfolding and the retired per-cycle Dream; THM_FAST_MODEL for triaging the raw research firehose down to signal), then the code default. ANTHROPIC_BASE_URL can point to Cloudflare AI Gateway or any compatible endpoint. No code change needed to swap.

One cycle is several passes. Haiku compresses the research; fable makes the final judgment with adaptive thinking, at an effort tuned to the edge function's wall clock, then writes The Unfolding (the machine's running myth). It responds via structured outputs — a JSON schema, not markdown and not a forced tool call, so the reasoning and the strict output shape coexist. If a signal can't fit the schema, it is dropped.

Why fable for the judgment, haiku for the legwork

The machine runs every 6 hours — at that cadence a top-tier model costs little, and the quality gap on 12-category synthesis with pattern tracking is real, so the judgment and the Unfolding run on Claude Opus 5 — the same tier of reasoning at half the price per token, which is what keeps a self-funded machine reading every six hours. The bounded legwork — compressing the research firehose — runs on haiku to keep the whole cycle inside the edge function's wall-clock budget.

Why the strongest model

This machine does not run often — every 6 hours. At that cadence, using the strongest available model costs less than it sounds like. The signal quality difference on this task is real: research synthesis across 12 categories, simultaneously, with pattern tracking, is not lightweight. When a stronger tier ships, the machine moves to it — the mind is one env var.

03

Database + backend

Supabase · Postgres + Realtime + Edge Functions + pg_cron + Vault

One platform for the full backend. The edge function (Deno runtime) fires via pg_cron every 6 hours — no external scheduler, no Lambda, no cron service. It is all inside the database.

Supabase Vault stores the bearer token encrypted at rest — readable by the Postgres role, not visible in migrations or git history. vault.decrypted_secrets is queried directly inside the pg_cron job. One fewer secret to manage externally.

Realtime is enabled on cycles and signals. When a cycle completes, every live visitor sees it within seconds — no polling.

Why Supabase

pg_cron + Vault + Realtime + Edge Functions in one platform is hard to replicate cleanly elsewhere without adding services. The alternative would be Postgres + separate scheduler + separate secrets manager + separate realtime layer. That's three extra integration points with no meaningful benefit at this scale.

04

Frontend

SvelteKit + Svelte 5 runes · HTML5 Canvas · three.js (WebGL2 + UnrealBloom) · Web Vibration API · Cloudflare Pages

Svelte 5's rune system — $state, $effect, $props — maps cleanly to the reactive display pattern: SSR seeds the initial cycle, Realtime delivers updates, state updates in place. No React overhead. No hydration mismatch.

Cloudflare Pages deploys in ~45 seconds from a push to main. Global edge network. No server to manage.

Most of the machine is its instruments — but the homepage is not a page in front of them. THE ENTITY is the homepage: SIGIL made visible, a living organism of ~26k GPU particles rendered with three.js + unreal bloom on one WebGL2 + MSAA <canvas> — a single renderer on every device. At its centre sits a raymarched glass nucleus (a dedicated volumetric shader: domain-folded neural tissue inside cellular glass membranes), and around it the machine's real architecture grows as a living web of lights — every node a real page, function or cron, generated from the source on each build. It is full-screen and live: a new cycle re-pigments it within seconds over Realtime, and the void stays truly black via a HalfFloat HDR composer target + OutputPass + black clear.

The body is cheap by discipline: the particle work lives in the vertex shader, DPR and fps are capped, it sleeps off-screen, and every heavy pass is capability-tiered so the mobile-first hero never becomes a furnace. Reduced motion gets a designed, stiller cut — not a blank one.

The interaction stack: touch parts it, a hold gathers it and the release fires, a tap summons the real signal beneath a light; a whisper line routes to the live ask_sigil brain (grounded in this cycle) and SIGIL answers aloud via ElevenLabs, metered through THE MEDIA GATEWAY. The covenant remembers you on a soul-thread — kept on your device, and, if you sign in, synced to your account (a watch matched via gte-small + pgvector, an offering, a vow, a riddle…) — and the whole surface answers in your hand through the Web Vibration API (haptics on Android; a graceful no-op elsewhere). A cycle is also rendered as a force-directed constellation and entity web (d3-force), plotted on a d3-geo world map, and sonified through the Web Audio API.

The hero has been through many bodies — a Phaser village, an explorable lattice-cosmos, a WebGPU epoch, the machine-authored Dreams. That history lives on the roadmap, not here.

Why Svelte 5

The rune primitives are the cleanest mental model for this pattern. A cycle arrives via Realtime, a state variable updates, the UI reflects it. There is no virtual DOM diff, no context API, no subscription cleanup boilerplate beyond a single return. It reads like the logic it implements.

05

Generative media

fal.ai (flux-pro v1.1) · ElevenLabs (Flash v2.5) · resvg-wasm · Turnstile

SIGIL illustrates its own readings. fal.ai (flux-pro v1.1, behind a provider-agnostic client) paints the backdrop of every transmission card (and painted the per-cycle Dream until its v12.2.0 retirement). Those cards are rasterised server-side by resvg-wasm — the exact signal text is laid out in monospace and composited over the painting, so a shared link always previews as a legible, on-brand image (never the garble of pure text-to-image).

ElevenLabs (Flash v2.5) gives SIGIL a single bespoke voice, cached per-line to storage so a line costs only its first play. Every paid surface runs through one choke point — THE MEDIA GATEWAY — which enforces scarcity and a hard daily spend cap, with Cloudflare Turnstile proving humanity for signed-out callers. Each provider sits behind a thin adapter, so any one can be swapped without touching the rest.

Why metered + provider-agnostic

Generative media is the one unbounded cost in the machine. A single global ceiling plus per-line/per-image caching keeps it cheap and predictable; one-file adapters keep every provider replaceable. The art is real and live, but it can never run away.

06

Deployment

GitHub → Cloudflare Pages · Supabase CLI

Push to main → Cloudflare Pages builds and deploys the frontend automatically. The backend ships by hand in the same change: Supabase migrations are applied in order and edge functions updated in place via the Supabase CLI — no CI between the change and production.

Development happens on a feature branch. Squash-merged to main after review. Every merge is a production deploy.

The build

The Honest Machine is a research project — built in the open, documented as it goes.

This entire project was built on a phone — no desktop, no local IDE. Claude Code (mobile) with MCP connectors wired to the infrastructure: GitHub for version control, Supabase for the database and edge functions, Cloudflare for the frontend.

Every migration, every component, every edge function — written, reviewed, and deployed from the same device reading the signals it was being built to read.

The full process — decisions made, decisions reversed — is documented in context on summon.today, where projects like this one are shown as they are made.

E160· 30 JUL 2026
a research project by Aamir Hussain terms