FuzzyCode Service Topology

Generated from topology.yaml ยท Last verified: 2026-04-17
Diagram
%% Auto-generated from topology.yaml โ€” do NOT hand-edit.
%% Regenerate: python generate.py --yaml topology.yaml --out-mmd ...

flowchart LR
    classDef prod fill:#edd9c0,stroke:#683c06,color:#111
    classDef ops fill:#e6a95e,stroke:#683c06,color:#111
    classDef ext fill:#c7d9e8,stroke:#1d58b1,color:#111
    classDef client fill:#fff460,stroke:#683c06,color:#111

    fuzzycode["FuzzyCode
fuzzycode.deveditor
AC: uat-only
"] pages["Pages
pages.fuzzycode.devstorage
AC: uat-only
"] simplegpt["SimpleGPT
simplegpt.fuzzycode.devai-gateway"] imagebuddy["ImageBuddy
images.fuzzycode.devai-gateway
AC: uat-only
"] soundbuddy["SoundBuddy
sounds.fuzzycode.devai-gateway
AC: uat-only
"] spritebuddy["SpriteBuddy
sprites.fuzzycode.devai-gateway
AC: uat-only
"] cdnbuddy["CDNBuddy
cdn.fuzzycode.devcdn"] uploaderbuddy["UploaderBuddy
uploads.fuzzycode.devuploader
AC: uat-only
"] s3bucketbuddy["S3BucketBuddy
uploader"] moderationbuddy["ModerationBuddy
moderator"] browser["Browser
client"] cf_worker_proxy_cors["CF Worker: proxy-cors
fuzzycode.dev/@pages/*worker"] cf_worker_usercontent["CF Worker: usercontent-proxy
usercontent.fuzzycode.devworker"] s3_aws["S3 (aws.fuzzycode.dev)
aws.fuzzycode.devasset-origin"] supabase["Supabase
external"] browser -->|publish| fuzzycode browser -->|publish| cf_worker_proxy_cors cf_worker_proxy_cors ==>|publish| pages pages -.->|publish| s3_aws browser -->|image-gen| imagebuddy browser -->|sound-gen| soundbuddy browser -->|sprite-gen| spritebuddy browser -->|asset-upload| uploaderbuddy pages -.->|auth-verify| fuzzycode imagebuddy -.->|auth-verify| fuzzycode soundbuddy -.->|auth-verify| fuzzycode spritebuddy -.->|auth-verify| fuzzycode fuzzycode -->|auth-verify,auth-login| supabase fuzzycode -->|llm-admin| simplegpt class fuzzycode prod; class pages prod; class simplegpt prod; class imagebuddy prod; class soundbuddy prod; class spritebuddy prod; class cdnbuddy prod; class uploaderbuddy prod; class s3bucketbuddy prod; class moderationbuddy prod; class browser client; class cf_worker_proxy_cors ops; class cf_worker_usercontent ops; class s3_aws ext; class supabase ext;
Services (15)
ServiceURLFrameworkRole UAT: active-ctxPROD: active-ctx PII firewallNotes
FuzzyCode
fuzzycode
fuzzycode.devquarteditoronoffyesMain editor + auth broker. Runs main:app via gunicorn (4 workers, 900s timeout).
Pages
pages
pages.fuzzycode.devquartstorageonoffnoPublish storage + render. Despite name, uses Quart (not Flask). No PII firewall; verifies FuzzyCode-issued HMAC attestation.
SimpleGPT
simplegpt
simplegpt.fuzzycode.devfastapiai-gatewayoffoffnoAdmin-only since migration; runs main2:app per .replit (NOT main.py). Service-key + admin-JWT gates on /send.
ImageBuddy
imagebuddy
images.fuzzycode.devfastapiai-gatewayonoffyesImage generation (FAL AI). Still gates on raw JWT claims in prod; active-context augments in UAT.
SoundBuddy
soundbuddy
sounds.fuzzycode.devfastapiai-gatewayonoffyesSound gen (ElevenLabs / Stable Audio).
SpriteBuddy
spritebuddy
sprites.fuzzycode.devflaskai-gatewayonoffyesSprites + GIF/APNG export + bg-removal.
CDNBuddy
cdnbuddy
cdn.fuzzycode.devfastapicdnoffoffnoOnly /resolve; NOT on publish path (scan report was wrong).
UploaderBuddy
uploaderbuddy
uploads.fuzzycode.devfastapiuploaderonoffnoHAS NO PII FIREWALL. User uploads may carry PII (EXIF, filename, embedded text) โ€” gap flagged in Phase 1b.
S3BucketBuddy
s3bucketbuddy
fastapiuploaderoffoffnoInternal bridge; not in docker-compose.
ModerationBuddy
moderationbuddy
fastapimoderatoroffoffnoActive for SoundBuddy; planned expansion to FuzzyCode (per repos.yaml).
Browser
browser
n/aclientOrchestrates two-hop publish; holds active-context cookies.
CF Worker: proxy-cors
cf_worker_proxy_cors
fuzzycode.dev/@pages/*workerworkerRewrites /@pages/* โ†’ pages.fuzzycode.dev/*. NOT the UGC Worker; that's a separate script.
CF Worker: usercontent-proxy
cf_worker_usercontent
usercontent.fuzzycode.devworkerworkerProxies editor draft/preview paths only. NOT on publish path.
S3 (aws.fuzzycode.dev)
s3_aws
aws.fuzzycode.devn/aasset-originPages writes screenshots here directly via boto3.
Supabase
supabase
n/aexternalAuth (JWT issuance) + Postgres for FuzzyCode household/children.
Edges (14)
FromToKindFlowsNotesVerified
browserfuzzycodehttppublishPOST /api/pages/attest-publish (first hop)FuzzyCode/static/script.js:3899-3912; api.py:1655-1761
browsercf_worker_proxy_corshttppublishPOST fuzzycode.dev/@pages/submit (second hop; Worker is transparent to client)FuzzyCode/static/script.js:3958-3965
cf_worker_proxy_corspagesworker-forwardpublishWorker rewrites host; forwards cookiesdocs/cloudflare/workers/uat-proxy-cors.js:57-88
pagess3_awsdirect-boto3publishScreenshot PNG/WebP upload; NO CDNBuddy involvementFuzzycodePagesFlaskServer/main.py:2303-2386
browserimagebuddyhttpimage-genFuzzyCode/static/script.js (ASSETS_ORIGIN/IMAGES_ORIGIN refs)
browsersoundbuddyhttpsound-gen
browserspritebuddyhttpsprite-gen
browseruploaderbuddyhttpasset-uploadUser uploads; no PII firewall gate (flagged)
pagesfuzzycodejwksauth-verifyPages fetches active-context JWKS from FuzzyCode (when active_context enabled)FuzzycodePagesFlaskServer/active_context_verifier.py:76-81
imagebuddyfuzzycodejwksauth-verifyImageBuddyRobustFastAPI/active_context_verifier.py
soundbuddyfuzzycodejwksauth-verify
spritebuddyfuzzycodejwksauth-verify
fuzzycodesupabasehttpauth-verify, auth-loginSupabase auth + household data
fuzzycodesimplegpthttpllm-adminService-key auth; admin uses onlysimplegpt-fastapi/main2.py:158-280