feat(frontend): static social preview cards from the platform default design - #171
Merged
Conversation
… design og-default.jpg was a stock photo, not the branded card Seo.svelte's og:image comment implies — replaced with the typographic design from Social Previews.dc.html section A: dark canvas, grid, lime accent, real SDSC wordmark, theme's mono type. square.png / story.png / banner.png are the same design at the mock's other three sizes, for manual posting (Instagram feed/story, profile banner) — not referenced by any code path, same as the mock's own export notes describe. URL line omitted from all four, same call as the per-event cards. Rendered once with satori + resvg-js in a throwaway script, not a project dependency — these are static assets, not generated at request time.
Every PR into develop fails at the `format` stage before it reaches build or test, and the cause is not in any PR's diff: develop has never had a green CI run. The workflow only fires on pull_request and on pushes to main, so drift that lands on develop is not seen until someone opens a PR from it — at which point every branch cut from develop reports the same failure. Three things were wrong, and they are separable: 1. treefmt reformats `.claude/**`, 103 files of self-contained agent tooling that carries its own conventions (2-space shell, hand-wrapped markdown, a pnpm-owned lockfile). Excluded here for the same reason the codegen dirs and components/frontend/pnpm-lock.yaml already are: a vendored tree belongs to its own generator, and formatting it only makes the two styles fight. This also removes all 19 shellcheck findings, every one of which was in there. 2. shellcheck runs with no severity floor (the repo passes only `-e SC1091`), so it fails the whole run on an *info*-level finding. The one left outside .claude is a false positive: backticks quoting a config key inside a deliberately single-quoted string. Suppressed at the line, with the reason. 3. The remaining 44 files are genuine drift — buf's canonical import/option order, golines wrapping, and prettier at 80 columns — and are simply the formatter's own output, applied with no hand edits. `treefmt --ci` now exits 0 on this tree. Claude-Session: https://claude.ai/code/session_01RLLSy37SvMnHE5MUcNy6G5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
static/og-default.jpg(was a stock photo) with the branded typographic card fromSocial Previews.dc.htmlsection A — dark canvas, grid, lime accent, real SDSC wordmark, theme mono type. This is the image every page falls back to for link previews viaSeo.svelte.static/social/{square,story,banner}.pngat the mocks other three sizes (1080x1080, 1080x1920, 1500x500) for manual social posting — not wired to any code path, per the design docs own export notes.Test plan
og-default.jpgstill serves at/og-default.jpgand is picked up bySeo.sveltes defaultimageprop