The foundation, top to bottom
Poppy is the persona at the top. Everything below is what makes her work — each layer depends on the one beneath it.
The model
Reasoning engine
- Default claude-3-5-sonnet-20241022 — overridable via ANTHROPIC_MODEL
- Endpoint api.anthropic.com/v1/messages · version 2023-06-01
- Vision (base64 image blocks) + native web_search (max 5/turn)
- Key ANTHROPIC_API_KEY set 2026-06-22, server-side only
One model, metered estimates
- Single model for all chat; board stamps per-ticket model (Haiku/Sonnet/Opus)
- Est. per ticket: Haiku $0.50 · Sonnet $3 · Opus $12
- Soft cap $50/lane/day, alert at 90% — hard-stops when MCP routes calls
- v2: live best-model-per-task router + real metering
Compute — Supabase Edge Functions (Deno)
Poppy's brain and the whole serverless tier run as Deno Edge Functions. ~23 are deployed; 16 are the canonical core.
| Function | Role |
|---|---|
| chat | Poppy's brain — Claude tool-use loop + gated writes |
| pure-mcp | Core ops gateway (JSON-RPC 2.0, Bearer auth) — board/memory/QA/deal/dict/cron… |
| pure-comms · resend-email | Outbound email (Resend) + SMS (Twilio) + notifications |
| webauthn-verify · pure-passkey · access-guard | Passkey/WebAuthn auth + access enforcement |
| puresign · trustseal-anchor · audit-chain | E-signature + tamper-evident audit anchoring |
| mls-intake · offers-analyze · call-intel · utility-extract | RESO/RETS intake, offer analysis, call + document AI |
| billing · leads · pure-link · deploy-hook · error-log | Billing, lead routing, URL shortener, deploy log, error capture |
The data layer — Supabase Postgres
What the DB can do natively
RLS on one identity, many hats
- Row-Level Security keyed to auth.uid() + hats from pure_permissions
- Agent access via Composio (privileged); app via pure-db.js anon key + RLS
- SECURITY DEFINER RPCs for gated writes; every call audited to audit_log
- Nightly rls-watchdog scans for drift from baseline
How she acts & what she knows
87 tools across 7 servers
- pure-mcp core gateway + pure-comms / money / connect / mls / deploy
- JSON-RPC 2.0 over Streamable HTTP, PURE_MCP_TOKEN auth
- Reads free; risky writes approval-gated; kill-switch + rate-limit
- Today Poppy's chat exposes 8; v2 opens the fleet, hat-scoped
Living sources of truth
- pure_dictionary — 219 canon terms (PureGuard-enforced)
- pure_memory — 216 keys, broadcast fresh every ~60s
- pure_surfaces — registry of every surface she can open/act on
- Board + deals + listings as live operational context
External data she's fed
The listings spine is NTREIS via RETS only; enrichment feeds layer on top through edge functions + crons.
NTREIS / RETS
phrets nightly ingest listings (1.49M, North TX, 329 counties). RESO failover parked for v4.
BatchData · RealEstateAPI
Full property + owner attributes by address enriched Property Record / AVM.
Census · Schools/ISD · Geo
TX demographics, district ratings, city/county/zip reference via crons.
API Ninjas · Fello
Email validation, mortgage/tax data; home-value + seller-lead nurture.
Identity, hosting, connectors & security
One provider — Supabase Auth
- Passkeys / WebAuthn first (webauthn-verify, pure-passkey)
- Magic-link / OTP fallback via pure-comms
- Step-up re-auth on money/deploy/PII via approval cards
Static on Netlify + GitHub
- acquisto.biz (Vite app) + app.acquisto.biz (static build)
- Source: puremlstech/puremls @ Testin.MikeSupabase (auto-build ~30s)
- Artifact versions tracked in pure_versions; deploy logged via deploy-hook
External reach
The safety + heartbeat tier
- Secrets in supabase_vault + edge env (key never client-side)
- pg_cron 34 jobs + pure_mcp_jobs machine queue + autopilot
- Storage buckets: asset-photos, expense-receipts
- Monitoring: health-probe + watchdog crons, error-log, uptimerobot, gtmetrix
What v2 adds to the foundation
v2 doesn't rebuild this base — it extends it. New tables join the same DB under the poppy_* namespace.
poppy_instances
Per-user gated instance registry — identity × hats × org × workspace.
poppy_memory
Per-user / per-deal memory, RLS-scoped to auth.uid.
poppy_model_routes
Best-model-per-task routing + live metering against the spend caps.