STACK · TECHNICAL DISCLOSURE
How this is built.
PointCast is a static site compiled once and served from the edge. This page documents every layer — runtime, content, on-chain, agent, team — so agents can reason about the system and humans can trust it.
RT
Runtime
Static site compiled once, served from the edge. No server processes, no databases — state lives in files + Cloudflare KV.
- Astro 6.1 static-site framework
Islands + file-based routing + content collections keep the Blocks primitive expressible without a CMS.
- Cloudflare Pages static hosting + edge functions
Global edge, Pages Functions for the middleware (agent-mode UA sniff, presence, metadata endpoint), and KV for presence counters.
- Vite bundler
Ships with Astro. Zero config once the Inter/JetBrains Mono variable fonts are wired via @fontsource-variable.
- TypeScript types
Blocks schema is type-checked, channel codes are a union type, no drift between docs and code.
CT
Content
Every block is a JSON file in src/content/blocks/. The BLOCKS.md schema is the source of truth; the repo is the CMS.
- Astro Content Collections typed content layer
getCollection() gives schema-validated blocks at build time. Zero runtime content lookup.
- Markdown long-form body format
Body text on READ-type blocks; posts/ directory for long-form Cowork essays.
- Inter (Variable) sans-serif display + body
Self-hosted via @fontsource-variable/inter. No Google Fonts request.
- JetBrains Mono (Variable) monospace
Self-hosted variable. Every BlockCard header + footer line uses it; kickers, IDs, timestamps.
TZ
On-chain (Tezos)
Free mainnet FA2 + planned FA1.2 + Prize Cast. Signer keys are throwaways; admin is Mike's wallet post-transfer.
- SmartPy 0.24 contract language
Python-flavored Michelson compiler. contracts/v2/*.py → Michelson JSON → originated via Taquito.
- Taquito 24.2 Tezos JS SDK
Originates contracts, calls entrypoints, reads storage. Beacon-integrated for wallet-signed ops.
- Beacon SDK 24.2 wallet connector
Kukai, Temple, Umami, Altme — one protocol, any wallet. 24.2 required network at DAppClient instantiation, not requestPermissions (a footgun we hit in v4).
- TzKT indexer + REST API
Live totalSupply, token metadata, account balances. Polled at build time for /collection, /editions, /now.
- objkt.com marketplace
Every Visit Nouns mint surfaces in the collection page. /collect tokens list via objkt CDN.
- noun.pics CC0 Nouns avatars
Source for all Noun glyphs on the site. Seed IDs 0-1199; CC0 per nouns.wtf.
AG
Agent layer
Four ways for machines to consume PointCast without scraping HTML.
- /agents.json discovery manifest
One request → every endpoint, contract, channel, type, agent-mode spec. Aliased at .well-known/agents.json.
- JSON Feed v1.1 standards feed
Every block in jsonfeed.org v1.1 format. Most modern readers speak it.
- JSON-LD (schema.org) inline structured data
Every page carries JSON-LD: CreativeWork on blocks, CollectionPage on indexes, WebApplication on /battle.
- Stripped HTML mode UA-based CSS/JS strip
ai:* User-Agents + GPTBot/ClaudeBot/etc get CSS and JS removed at the edge via HTMLRewriter. ~12% payload savings.
- llms.txt LLM summary
Emerging convention: a markdown doc summarizing the site for LLMs.
TM
Team
Multi-agent workflow. Mike is the director; the rest are hands.
- Mike Hoydich director · strategy · content · approvals
Writes the dispatches, makes brand/aesthetic/GTM calls, approves merges + contract deploys.
- Claude Code primary engineer
Architecture, schema, rendering, routing, contracts, deploys. Default to sonnet; 1M-context for multi-hour sessions.
- Codex specialist reviewer
Code review before main merges; alternative UI passes; second opinions. Medium reasoning, serial runs — xhigh concurrent hangs observed.
- Manus operations + computer-use
Behind-login ops: deploy settings, DNS, objkt collection admin, end-to-end mint testing as a real user.
NO
Deliberately not using
Things we skipped on purpose. Not exhaustive — just the interesting no's.
- Google Analytics / GA4 no analytics
Privacy by default. No telemetry, no cookie banners, no fingerprinting. If we add analytics later it will be Plausible or Fathom, first-party, self-hosted.
- React / Next.js / SPA framework static-first
Hydrating JSX is overkill for a content site. Astro ships HTML + tiny islands; typical page is under 20KB of JS.
- WalletConnect / Rainbow Kit Tezos-only wallets
Beacon is the native Tezos standard. We don't pretend to be multichain.
- Search-as-a-service client-side search
/search bakes the index into the page (~6KB). No Algolia, no Meilisearch, no network round-trip.
- Cookie banner no tracking cookies
No cookies set by PointCast. Wallets set their own. Nothing to consent to.