feat(solutions): support linked Databricks Blog articles alongside native posts#72
Merged
andrelandgraf merged 2 commits intomainfrom Apr 29, 2026
Merged
Conversation
…tive posts Solutions now uses a discriminated union (`NativeSolution | LinkedSolution`): - Native solutions live in `content/solutions/<id>.md` and render at `/solutions/<id>` exactly as before. - Linked solutions are pure metadata + an Open Graph preview image. Cards on the index page open the original article (e.g. databricks.com/blog). No detail route is generated, no markdown content is stored. Adds four hand-picked Databricks Blog articles (Apps + Lakebase, Agent Bricks + Apps, Lakebase as transactional layer, Lakebase database branching) with crawled metadata (title, description, authors, publish date, OG image). Linked-solution previews use the Open Graph standard (1.91:1) and are verified by `npm run verify:images`, which now enforces a separate contract for `static/img/solutions/` (1.91:1, ≥1200x628) on top of the existing 16:9 contract for guides/examples. `llms.txt` and `/solutions.md` index emit external URLs for linked solutions and internal `.md` paths for native ones, with smoke + unit tests covering both branches.
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
The Solutions tab now supports two kinds of entries via a discriminated union:
type: "native"): authored on DevHub. Markdown lives incontent/solutions/<id>.md, build-time generates/solutions/<id>like before.type: "linked"): pure metadata + Open Graph preview image. Cards on the index page deep-link to the original article (no detail route, no markdown stored). Adds four hand-picked Databricks Blog articles:TypeScript guarantees you can't construct a half-linked / half-native solution:
Solution = NativeSolution | LinkedSolution, withisNativeSolution/isLinkedSolutionguards used at every fork in the renderer, the content-entries plugin (only emits routes for native),llms.txt, and the/solutions.mdindex.Preview
Light mode
Dark mode
Image format
Linked-solution previews use the Open Graph standard (1.91:1) so we can drop the upstream OG asset in directly.
npm run verify:imagesnow enforces a second contract:static/img/{guides,examples}/static/img/solutions/The four downloaded OG images are normalized to 1.91:1 (the one 2:1 outlier was lightly cropped with
sips) and rendered in a fixedaspect-[1.91/1]container withobject-coverso the grid stays consistent regardless of source resolution.Test plan
npm run fmtnpm run typechecknpm run verify:images(new 1.91:1 rule onstatic/img/solutions/)npm run build(also runs in pre-commit)npx vitest run— 164/164 pass, including newtests/solutions.test.ts(discriminator parity, unique ids, linked-metadata invariants) and updatedtests/smoke.test.ts(llms.txt mixes internal.mdfor native and external URLs for linked)npx playwright test— 93/93 pass (no /solutions/ route is emitted, /solutions and /solutions/devhub-launch still load)agent-browserin light + dark mode at http://localhost:3001/solutions