docs(media): reusable diagrams, logos, screenshots, and product blurbs #15
Labels
No labels
agent:implement
agent:research
docs
feature
ready
research
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-docs#15
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
https://docs.cl8y.comhas no first-party media kit: no downloadable ecosystem or flow diagrams, no approved logo files, no same-origin product screenshots, and no short technically reviewed blurbs that a post, video, or community explanation can reuse without scraping a long-form page.Ship one prerendered media-kit page plus same-origin static files so a human can, with JavaScript off:
The files must be designed for reuse in posts, videos, and community explanations: stable same-origin URLs, versioned filenames, labeled SVG text, and blurbs short enough to paste. They must not exist only as inline markup inside
/or a how-to.Bundle (do not split into logos / diagrams / screenshots / blurbs tickets). Do not put this kit on
/(Start Here,code/cl8y-docs#9),/facts(code/cl8y-docs#14), or the how-to / FAQ paths owned by #10–#13.v0 platform work (#3) already shipped crawl files, unique titles, and stub routes. Full manuscripts and a media kit were out of scope there.
Parent / siblings (do not re-implement)
code/cl8y-docs#3 — v0 host + stubs; out of scope: “Full methodology/guide manuscripts (stubs only).”code/cl8y-docs#9 — Start Here on/(newcomer product map + one inline connection diagram + token purposes). Cite and link. That ticket must not register/mediaor a downloadable kit. If #9 lands an inline SVG, this issue’s ecosystem file is the shareable source;/may embed the same file later, but #9 stays a manuscript on/.code/cl8y-docs#10 / #11 / #12 — how-to manuscripts. Optional screenshots there stay inside those guides. Different reader job: teach a flow vs hand a reusable file.code/cl8y-docs#13 — token/treasury FAQ. Mechanics depth stays there; this page only ships short reviewed blurbs plus a pointer.code/cl8y-docs#14 — verified facts and status. Canonical claim ledger; this kit must not contradict it. Do not duplicate the seven-section ledger here.docs/ARCHITECTURE.md§4 / §5 / §7 / §12 / INVARIANTS 13–14, 19 — closed route allowlist; no unverified stats; no unpublished marketingcontent/guides/;og:imageonly if a real file; hashed-asset nginx regex today treats all.svg/.pngas 7-dayimmutable.src/components/Layout.tsx— text wordmark “CL8Y docs” only. No logo file inpublic/today (robots.txt+ generatedsitemap.xmlonly).code/CL8Y-web— marketing homepage (cl8y.com). Different deployable. Source of existing marks/favicons if already first-party; do not copy that SPA.PlasticDigits/cl8y-marketing— governance parent (#3). Do not grow an app or dump unpublishedcontent/guides/here (INVARIANT 14 / 20).Current codebase
There is no media surface:
src/seo.ts— closedDocsPathunion of seven v0 paths. No/media.src/lib/dexHref.ts—CAMPAIGNSclosed vocabulary; nomedia.src/App.tsx— sevenRouteentries; unknown paths 404 via nginxtry_files $uri $uri/index.html =404.src/pages/HomePage.tsx— host-chrome stub (Start Here manuscript is #9, not this kit).src/pages/GuidesPage.tsx— forbids dumping unpublished marketing manuscripts; lists only/guides/open-the-dex.src/content/invariants.ts—BANNED_CURRENT_COPY/FORBIDDEN_CLAIM_PATTERNS.public/— no PNG/SVG/ICO. Optionalog:imageis omitted on purpose (ARCHITECTURE §5).nginx/default.conf—location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico|woff2?)$setsCache-Control: public, max-age=604800, immutableand missing files 404 via@hashed_asset_miss. Vite hashed bundles belong there; unversioned kit files must not pretend to be content-hashed.e2e/crawl.spec.ts+src/verify-dist.test.ts— unique titles/canonicals and sitemap locs follow the seven (until sibling PRs add rows).e2e/crawl.spec.tscurrently hardcodes the v0 list.Architecture §4 has no media-kit row. A complete kit therefore must add one allowlisted HTML path in the same PR (seo union, campaign id, App route, prerender, sitemap, crawl tests, ARCHITECTURE §4) plus real files under a versioned
/media/prefix.Duplicates / already implemented
/; not a downloadable kitcontent/guides/If
/mediaalready exists with unique title/canonical, the five kit sections in prerendered HTML, versioned same-origin diagram/logo files thatcurlas image/svg+xml or image/png (not HTML), and AC1–AC12 pass, close as implemented — do not duplicate.Why the new implementation is needed
Operators and community members currently have no first-party URL whose job is reuse.
#9will explain products on/. How-tos will teach steps.#14will list what is live. None of those are a pack of files you can drop into a video or a post without cropping a documentation page.Without this kit:
This is documentation copy + same-origin static files + one new prerendered route. No new host, no wallet UI, no Coolify SKU pick.
Constraints / guardrails
/media. Canonicalhttps://docs.cl8y.com/media(no trailing slash). Title seed:Media kit · CL8Y docs(wordsmith OK; must stay unique vs existing and sibling routes). Do not add/brand,/press,/assets(Vite hashed bundles),/status, or/ust1.docs/ARCHITECTURE.md§4,docs/INVARIANTS.mdcampaign list,src/seo.tsDocsPath/ROUTES,src/lib/dexHref.tsCAMPAIGNS,src/App.tsx,src/components/Layout.tsxnav,e2e/crawl.spec.ts(prefer deriving fromROUTESso loc count is not hardcoded 7/8/9), andsrc/lib/dexHref.test.tsclosed-campaign snapshot.scripts/prerender.mjsalready followsROUTES— do not hardcode a second loc list. Sitemap HTML loc is/mediaonly — do not add every PNG/SVG as sitemaploc.public/media/(copied intodist/media/). Versioned names, for examplecl8y-ecosystem-v1.svg,cl8y-flow-bridge-dex-v1.svg,cl8y-mark-v1.svg.GETof each file returns the image bytes, notindex.html. Content-Type must beimage/svg+xmlorimage/png(orimage/jpegif a screenshot is JPEG). Missing file → 404, not a media-page HTML 200..svg/.pngisimmutablefor 7 days. Kit files are not Vite hashes. In the same PR either:location ^~ /media/that serves those files withnosniff+ clickjacking headers,try_files $uri =404, and withoutimmutable(shortmax-ageorno-storeis OK), or/assets/(Vite) and stop treating/media/*as hashed.Do not weaken hashed-miss 404 for JS/CSS. Do not introduce SPA fallback.
title/descor adjacent HTML list on/media. No three.js, no mermaid runtime, no remote image CDN, no hotlinked DEX/Bridge origin. Arrows must not include TVL, volume, fee %, APY, or SLA minutes. Ecosystem diagram names CL8Y, Bridge, DEX, CMM. Flow diagram is a high-level Bridge ↔ DEX path (inbound then outbound), not a substitute for #10–#12.cl8y.com/ DEX / Bridge public chrome). If no vector mark exists, ship an SVG wordmark that matches this host’s “CL8Y” text treatment — do not invent a mascot, GameFi character, or third-party logo. Do not include partner/CEX/CoinGecko marks.src/content/media.ts(or equivalent) and unit-test them. Required subjects: CL8Y (utility token for DEX fee tiers — no invented tier table), Bridge, DEX, CMM (names only for CMM tokens; same bounded USTR/UST1 exception as #9, only on/mediaand this module, not leaked onto methodology stubs). Each blurb: one or two sentences. Point at/,/facts(if #14 has landed or is linked as forthcoming),/contracts, and the live first-party origins. Do not copy unpublished marketing manuscripts. If #9/#14 content modules exist, reuse those strings rather than forking facts.BANNED_CURRENT_COPYstays except the bounded CMM name exception above. No “Buy CL8Y” CTA. Do not list GameFi / PROTOCASS / Karnyx / TigerHunt.URL(not string concat, notwindow.location, not visitor query). Downloadhrefs are same-origin/media/…paths. Official product links: docs/, DEX viadexHref{ campaign: "media" }, Bridgehttps://bridge.cl8y.com, homepagehttps://cl8y.com.rel="noopener noreferrer"iftarget="_blank". Nojavascript:,data:, protocol-relative, or?url=redirectors.media(closed vocabulary). DEX CTA stilldexHrefwith execute ids, not tickers. The primary job of this page is download/copy, not “Open the DEX” as the only heading.Layoutnav and one link from/and/guides(one line each). Do not duplicate Start Here or how-to manuscripts on/media.Relevant files
src/pages/MediaPage.tsx(new)src/content/media.ts(new)public/media/*(new)src/seo.tssrc/App.tsx/mediasrc/components/Layout.tsxsrc/lib/dexHref.tsmediasrc/lib/dexHref.test.tssrc/pages/HomePage.tsx/GuidesPage.tsx/medianginx/default.conf/media/location vs hashed-asset regexe2e/crawl.spec.tssrc/verify-dist.test.tsROUTES; body sniff for kit headings; files exist and are not HTMLdocs/ARCHITECTURE.md§4 / §5 / §7 / §12docs/INVARIANTS.mdscripts/prerender.mjs/mediaHTML onlyRecommended direction
src/content/media.tswith blurb strings,files: { id, href, mime, version }[]. Unit-test: forbidden claim patterns, banned copy (with the CMM name allowlist scoped to this module), everyhrefstarts with/media/and a version suffix, no foreign hosts.public/media/(plain SVG, text labels, no embedded bitmap unless a screenshot slot). Keep ecosystem geometry compatible with #9 so/and the kit cannot disagree.MediaPage: H1 Media kit; sections Diagrams, Logos, Screenshots, Product blurbs; each file is an<a href>to the versioned path. Optionalimgpreview withaltmatching the blurb.seo.tsso prerender + sitemap cannot drift. Campaignmedia./media/location before the hashed regex (prefix^~). ConfirmGET /mediastill servesmedia/index.html(HTML) whileGET /media/cl8y-ecosystem-v1.svgserves SVG.Acceptance criteria
GET /mediaprerendered HTML (no JS) contains headings (or equivalent labeled sections) for diagrams, logos, screenshots, and product blurbs.GET /media/cl8y-ecosystem-v1.svg(exact versioned name OK if documented in the module) returns 200image/svg+xml(or SVG sniffed, not<!doctype html>). Flow diagram file likewise./mediaunique title (Media kit · CL8Y docsor equivalent); canonicalhttps://docs.cl8y.com/media. Sitemap loc set is previous prerendered HTML paths plus this one. Kit binaries are not sitemap locs. Unknown paths still 404.GET /media/no-such.svgis 404, not the kit HTML./(and/guides) link to/media.dexHrefdefault pair +utm_campaign=media. Download hrefs are same-origin/media/…only.UST1/USTRappear only as factual CMM names in this kit (or tests fail closed if they leak onto other stubs).npm test,npm run typecheck,npm run build+ dist unique-title tests, Playwright 5 workers stay green.CAMPAIGNSsnapshot document/media/media. Nginx/media/vs hashed assets is documented in §7.Given a marketer or community member opens the prerendered
/mediapage When they read the media kit without executing JavaScript Then they can download same-origin ecosystem and flow diagrams, an approved mark, and (when present) unconnected product screenshots, and they can copy short technically reviewed product blurbs, with no invented statistics and no files that exist only inside another manuscriptTest plan (functional paths)
dist/media/index.htmlGET /media/<ecosystem-file>.svg<svg(or XML svg); not doctype htmlGET /media/<flow-file>.svgsitemap.xmlhttps://docs.cl8y.com/media; still no DEX loc; no.svglocs required/,/guides, Layout nav/mediaGET /no-such-pageandGET /media/missing.svgmedia.ts/media/+ versionGET /mediaContent-Typetext/htmlTest plan (copy and file safety)
Not a DeFi attack suite. Keep host crawl/CTA tests from #3 green.
/mediaor in SVG textjavascript:/data:/ protocol-relative download or product hrefjavascript:/methodologystub via shared layout/media(and #9/) copy onlycontracts.tsimmutableforeverVerification criteria
npm test&&npm run typecheck&& productionnpm run buildwith requiredVITE_*.npm run test:dist(unique titles/canonicals including/media)./mediabody sniff for the four sections + at least one SVGhref; crawl MIME tests unchanged; binaryGETs sniff SVG/PNG vs HTML./mediaand confirm a marketer can download diagrams/marks and paste blurbs without opening a how-to.scripts/check-origins.mjsstill fail-closed without HTTPS origins.Out of scope
PlasticDigits/cl8y-marketing.code/CL8Y-web,code/ustr-cmm, the Bridge monorepo, or the DEX SPA (read-only for names, origins, and existing marks).Sitemap:pointer (marketing#2).First-pass model recommendation
Recommendation: grok-high
Rationale: This is a new public route plus a first-party brand/media pack, not docs/test-only maintenance of an existing stub. It amends the closed architecture allowlist, sitemap loc set,
dexHrefcampaign vocabulary, and nginx static-file caching (unhashed/media/vs Vite hashed assets). Expected files spanMediaPage/mediacontent module, versioned SVG/PNG underpublic/media/,seo.ts,App.tsx,Layout.tsx,dexHref+ tests, nginx, crawl/dist assertions, andARCHITECTURE.md/INVARIANTS.md— more than three production files and a cross-cutting prerender/cache contract. Composer fails those criteria (local three-file edit, no allowlist/protocol change, no brand-claim risk). Risk is claim-safety and cache-poisoning a “canonical” diagram or mark. Verify with unique-title/canonical dist tests, Playwright 5 workers, copy greps, andcurlof SVG/PNG vs HTML. Control-plane calibration: unlike a single RCA document (PR #170) or a test-helper tweak (#164), this is closer to a cross-module change (new route + nginx + crawl contract) than a one-file copy edit.