feat: fix Open Graph / Twitter cards on all dApp routes and ship community OG artwork #1097

Merged
PlasticDigits merged 2 commits from feat/578-opengraph-cards into main 2026-08-20 03:16:10 +00:00
PlasticDigits commented 2026-08-20 01:38:18 +00:00 (Migrated from gitlab.com)

Summary

  • Production index.html now bakes absolute https://dex.cl8y.com/og-image.png for og:image / twitter:image (X/Twitter drops relative paths). Origin is allowlisted in viteOg.ts and never taken from the request host header, query, or wallet/pair.
  • Replaced the #488 product-copy card with a 1200×630 community-medallion PNG (~661 KB) recomposed from the square source (not stretched). Concept lives in frontend-dapp/brand/ so crawlers keep using /og-image.png.
  • Documented invariants OG-1–OG-8, added skills/AGENTS_FRONTEND_OPENGRAPH.md, and make verify-issue-578 (no LocalTerra).

Closes #578

Test plan

  • make verify-issue-578 (run twice; also after rebase) — F1–F3, A1–A7 greps/tests
  • og-image.png is 1200×630 PNG under 1 MB
  • nginx location = /og-image.png serves a real image; SPA routes still fall back to index.html
  • After Coolify deploy: curl -sL https://dex.cl8y.com/ | grep og:image shows the absolute URL
  • curl -sI https://dex.cl8y.com/og-image.png → 200 image/png
  • Telegram + X/Twitter (reset card cache) + Discord large preview of https://dex.cl8y.com

Acceptance criteria

  • AC1 — Production bake uses absolute https://dex.cl8y.com/og-image.png (Vite og-absolute-meta; Coolify VITE_PUBLIC_ORIGIN default)
  • AC2 — twitter:card is summary_large_image; title/description unchanged in spirit; no invented twitter:site
  • AC3 — /og-image.png is 1200×630 community-medallion composition, ~661 KB (hard max 5 MB)
  • AC4 — nginx still rewrites SPA routes to the same index.html (same static meta). Live curl of prod routes is post-deploy.
  • AC5 — og:image:width / height / alt (and twitter:image:alt) present and match the file
  • AC6 — OG origin allowlist rejects http:, javascript:, data:, protocol-relative, credentials, query, and unknown hosts. No SVG OG. No new CSP image hosts.
  • AC7 — Design-system, AGENTS skill, #488 QA note updated. Concept committed as source; crawlers use /og-image.png.
  • AC8 — Manual Telegram and X/Twitter (and Discord) after deploy + crawler refresh

Closes #578

## Summary - Production `index.html` now bakes absolute `https://dex.cl8y.com/og-image.png` for `og:image` / `twitter:image` (X/Twitter drops relative paths). Origin is allowlisted in `viteOg.ts` and never taken from the request host header, query, or wallet/pair. - Replaced the #488 product-copy card with a 1200×630 community-medallion PNG (~661 KB) recomposed from the square source (not stretched). Concept lives in `frontend-dapp/brand/` so crawlers keep using `/og-image.png`. - Documented invariants **OG-1–OG-8**, added `skills/AGENTS_FRONTEND_OPENGRAPH.md`, and `make verify-issue-578` (no LocalTerra). Closes #578 ## Test plan - [x] `make verify-issue-578` (run twice; also after rebase) — F1–F3, A1–A7 greps/tests - [x] `og-image.png` is 1200×630 PNG under 1 MB - [x] nginx `location = /og-image.png` serves a real image; SPA routes still fall back to `index.html` - [ ] After Coolify deploy: `curl -sL https://dex.cl8y.com/ | grep og:image` shows the absolute URL - [ ] `curl -sI https://dex.cl8y.com/og-image.png` → 200 `image/png` - [ ] Telegram + X/Twitter (reset card cache) + Discord large preview of `https://dex.cl8y.com` ## Acceptance criteria - [x] **AC1** — Production bake uses absolute `https://dex.cl8y.com/og-image.png` (Vite `og-absolute-meta`; Coolify `VITE_PUBLIC_ORIGIN` default) - [x] **AC2** — `twitter:card` is `summary_large_image`; title/description unchanged in spirit; no invented `twitter:site` - [x] **AC3** — `/og-image.png` is 1200×630 community-medallion composition, ~661 KB (hard max 5 MB) - [x] **AC4** — nginx still rewrites SPA routes to the same `index.html` (same static meta). Live curl of prod routes is post-deploy. - [x] **AC5** — `og:image:width` / `height` / `alt` (and `twitter:image:alt`) present and match the file - [x] **AC6** — OG origin allowlist rejects `http:`, `javascript:`, `data:`, protocol-relative, credentials, query, and unknown hosts. No SVG OG. No new CSP image hosts. - [x] **AC7** — Design-system, AGENTS skill, #488 QA note updated. Concept committed as source; crawlers use `/og-image.png`. - [ ] **AC8** — Manual Telegram **and** X/Twitter (and Discord) after deploy + crawler refresh Closes #578
PlasticDigits commented 2026-08-20 01:38:33 +00:00 (Migrated from gitlab.com)

marked this merge request as ready

marked this merge request as **ready**
PlasticDigits commented 2026-08-20 03:16:06 +00:00 (Migrated from gitlab.com)

added 7 commits

  • b46a0cb0...f6b79a17 - 6 commits from branch main
  • 55e82664 - Merge origin/main into feat/578-opengraph-cards.

Compare with previous version

added 7 commits <ul><li>b46a0cb0...f6b79a17 - 6 commits from branch <code>main</code></li><li>55e82664 - Merge origin/main into feat/578-opengraph-cards.</li></ul> [Compare with previous version](/PlasticDigits/cl8y-dex-terraclassic/-/merge_requests/379/diffs?diff_id=1972527854&start_sha=b46a0cb0e25b5739d82649a150225880f4b86636)
PlasticDigits commented 2026-08-20 03:16:10 +00:00 (Migrated from gitlab.com)

mentioned in commit 4068d8d48d

mentioned in commit 4068d8d48d2a84cbf9cc66f45be91f85cf19396b
PlasticDigits (Migrated from gitlab.com) merged commit 4068d8d48d into main 2026-08-20 03:16:10 +00:00
PlasticDigits commented 2026-08-20 03:54:16 +00:00 (Migrated from gitlab.com)

mentioned in issue #578

mentioned in issue #578
PlasticDigits commented 2026-08-20 03:54:52 +00:00 (Migrated from gitlab.com)

mentioned in issue #583

mentioned in issue #583
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/cl8y-dex-terraclassic!1097
No description provided.