Skip to content

fix(public): guard the live site against missing social preview imagery - #67

Closed
nish3451 wants to merge 1 commit into
mainfrom
fix/lane1-live-social-preview-guard
Closed

fix(public): guard the live site against missing social preview imagery#67
nish3451 wants to merge 1 commit into
mainfrom
fix/lane1-live-social-preview-guard

Conversation

@nish3451

Copy link
Copy Markdown
Collaborator

Problem

The class-gap item "Social preview imagery missing on 7 of 12 public pages" is still live: shared links to /privacy/, /privacy-choices/, /terms/, /promptly/support/, /promptly/privacy/, /drishti/support/, and /drishti/privacy/ render as bare text cards because the deployed pages declare no og:image and only a summary twitter card.

The repo-side fix already landed in main (#26, ffe6e1f) and scripts/test-public-social-preview.mjs guards the static files (137 checks, 0 failures). The blind spot is the same one flagged for soft-404s in #62: the live site is stale. The deployed tinystudio.in is byte-identical to commit 07acd07 (#4, June 20) apart from Cloudflare's edge email-obfuscation transforms, so none of the merged public fixes since (#26 JSON-LD + imagery, #29 disambiguation, #34 404 page, #35 footer, ...) have ever shipped.

Verified live today: https://tinystudio.in/privacy/ (and the other 6 pages) carry no og:image tag; the social PNGs themselves are served (HTTP 200) but never referenced.

This change (the detector)

  • scripts/check-public-live-social-preview.mjs — fetches all 12 public pages from the live site and requires, per page: the full og:image block (secure_url, type: image/png, 1200x630, non-empty alt), the per-family image (tiny-studio-social.png / promptly-social.png / drishti-social.png), twitter:card: summary_large_image, twitter:image matching og:image, non-empty twitter:image:alt, and HTTP 200 for every referenced image file.
  • Wired into npm test / npm run ci (escape hatch: SKIP_LIVE_CHECKS=1) as site:check-live-social-preview.
  • .github/workflows/live-social-preview-check.yml — nightly + manual-dispatch run on the vps-verify runner, so a stale/misconfigured deploy fails loudly within a day. Named distinctly from fix(public): guard the live site against soft-404s and flag the stale deployment #62's live-site-check.yml so the two guards coexist.

Current live result (proof the detector works)

72 checks, 7 failures
  FAIL /privacy/ declares <meta og:image>
  FAIL /privacy-choices/ declares <meta og:image>
  FAIL /terms/ declares <meta og:image>
  FAIL /promptly/support/ declares <meta og:image>
  FAIL /promptly/privacy/ declares <meta og:image>
  FAIL /drishti/support/ declares <meta og:image>
  FAIL /drishti/privacy/ declares <meta og:image>

Exactly the 7 pages the item names. The check goes green the moment the site is redeployed from origin/main.

Validation

  • SKIP_LIVE_CHECKS=1 npm test: full suite passes (static checks, including the existing 137-check social preview test)
  • node scripts/check-public-live-social-preview.mjs: 72 checks, 7 failures against the stale live site (expected — that is the detector firing)
  • node --check scripts/check-public-live-social-preview.mjs: pass
  • git diff --check: clean

The repo fix for the 7 pages missing og:image/twitter:image is already in
main (#26), and test-public-social-preview.mjs guards the static files. But
nothing guards the DEPLOYED site: the live tinystudio.in still serves the
June 20 bundle (07acd07), and exactly the 7 pages from the class-gap item
(privacy, privacy-choices, terms, promptly/support, promptly/privacy,
drishti/support, drishti/privacy) ship with no og:image and a summary-only
twitter card, so shared links render as bare text cards.

Add scripts/check-public-live-social-preview.mjs, which fetches all 12
public pages from the live site and requires the complete og:image block
(secure_url, type, 1200x630, alt), the summary_large_image card, matching
twitter:image, and that every referenced image file is served. Wired into
npm test and npm run ci (SKIP_LIVE_CHECKS=1 escape hatch for machines
without network) plus a nightly vps-verify workflow, so a stale deployment
fails loudly within a day.

Current live result (proof the detector works): 72 checks, 7 failures -
exactly the 7 pages the item names, all failing on missing og:image. The
check goes green once the site is redeployed from origin/main.

verify: SKIP_LIVE_CHECKS=1 npm test; node scripts/check-public-live-social-preview.mjs; git diff --check

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@nish3451, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 33 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f3230ae1-f4ec-450d-bfd0-0677a67b03f3

📥 Commits

Reviewing files that changed from the base of the PR and between 2e3c00e and 74a954b.

📒 Files selected for processing (3)
  • .github/workflows/live-social-preview-check.yml
  • package.json
  • scripts/check-public-live-social-preview.mjs

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 74a954b32d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread package.json
"mobbin:run": "node scripts/run-design-system-proving-lab.mjs",
"mobbin:check": "node scripts/run-design-system-proving-lab.mjs --dry-run",
"ci": "node scripts/test-service-engine.mjs && node scripts/test-sales-intake-contract.mjs && node scripts/test-active-offer-projection.mjs && node scripts/test-active-operator-surfaces.mjs && node scripts/test-direction-proof-gate.mjs && node scripts/test-client-readiness-contract.mjs && node scripts/test-validated-service-client.mjs && node scripts/test-client-acceptance-gates.mjs && node scripts/check-product-truth.mjs && node scripts/check-human-service-kit.mjs && node scripts/test-design-system-proving-lab.mjs && node scripts/check-retention-automation.mjs && node scripts/test-retention-automation.mjs && node scripts/check-agency-defaults.mjs && node scripts/check-outbound-claim-safety.mjs && node scripts/check-outbound-send-readiness.mjs && node scripts/test-outbound-send-readiness.mjs && node scripts/test-public-conversion-signal.mjs && node scripts/test-public-structured-data.mjs && node scripts/test-public-brand-disambiguation.mjs && node scripts/test-public-heading-hierarchy.mjs && node scripts/test-public-link-targets.mjs && node scripts/test-public-social-preview.mjs && node scripts/test-public-soft-404.mjs && find scripts -name '*.mjs' -print0 | xargs -0 -n1 node --check",
"ci": "node scripts/test-service-engine.mjs && node scripts/test-sales-intake-contract.mjs && node scripts/test-active-offer-projection.mjs && node scripts/test-active-operator-surfaces.mjs && node scripts/test-direction-proof-gate.mjs && node scripts/test-client-readiness-contract.mjs && node scripts/test-validated-service-client.mjs && node scripts/test-client-acceptance-gates.mjs && node scripts/check-product-truth.mjs && node scripts/check-human-service-kit.mjs && node scripts/test-design-system-proving-lab.mjs && node scripts/check-retention-automation.mjs && node scripts/test-retention-automation.mjs && node scripts/check-agency-defaults.mjs && node scripts/check-outbound-claim-safety.mjs && node scripts/check-outbound-send-readiness.mjs && node scripts/test-outbound-send-readiness.mjs && node scripts/test-public-conversion-signal.mjs && node scripts/test-public-structured-data.mjs && node scripts/test-public-brand-disambiguation.mjs && node scripts/test-public-heading-hierarchy.mjs && node scripts/test-public-link-targets.mjs && node scripts/test-public-social-preview.mjs && node scripts/test-public-soft-404.mjs && node scripts/check-public-live-social-preview.mjs && find scripts -name '*.mjs' -print0 | xargs -0 -n1 node --check",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep the failing live probe out of required CI

Appending this probe to ci makes the Codex CI workflow fail for every pull request because .github/workflows/codex-ci.yml runs npm run ci without SKIP_LIVE_CHECKS, while this commit explicitly documents that the deployed site currently produces seven failures. This prevents the normal repository checks from going green until an external deployment occurs and also couples all future PR validation to production/network availability; keep the live probe isolated in the new scheduled workflow or set the escape hatch in repository CI.

Useful? React with 👍 / 👎.

@nish3451

Copy link
Copy Markdown
Collaborator Author

Superseded by #153, the newest and most complete live social-preview guard (222 added lines vs 156 here, and it wires the check into live-site-check.yml rather than a separate workflow). Closing in favour of #153.

@nish3451 nish3451 closed this Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant