[web] restore blog posts deleted by the site redesign#2501
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
corcillo
added a commit
to corcillo/nativelink
that referenced
this pull request
Jul 4, 2026
Review feedback on TraceMachina#2501 asked for one section per content type. The grouping comes from the posts' original frontmatter tags (case-studies, announcements; everything else lands in "More from the blog"), so no content changes — same ten cards, now under three eyebrow-headed sections in that order, newest first within each. A section with no posts renders nothing.
PR TraceMachina#2371 replaced the old Astro site (web/platform) with the new Next.js app and deleted all blog content with it — the 10 real posts under web/platform/src/content/posts plus the /resources/blog routes. The new /resources page shipped with placeholder cards linking to "#". Restore the posts verbatim from 2c54961^ into web/apps/web/content/posts and rebuild the routes in the new app: - /resources/blog — index of all posts, newest first - /resources/blog/<slug> — post pages, prerendered via generateStaticParams, markdown rendered with marked into the existing Prose component Slugs come from each post's original frontmatter, so the old /resources/blog/<slug> URLs resolve again. marked@16.4.2 was already in the lockfile (via the docs app), so no new transitive deps. CaseStudy_Samsung is deliberately NOT restored — it was removed separately (TraceMachina#1464, TraceMachina#1576) pending approval, before the redesign. No changes to any existing page.
The Announcements header's "All posts →" link has been a dead "#" href since the redesign. Point it at /resources/blog so the restored posts are reachable by click. Only href change — no copy or layout edits.
Audited every href on /resources, /resources/blog, and all 10 post pages (internal routes + external URLs): - The "Hermetic toolchain creation with LRE & Nix" talk card on /resources was a dead "#" href — point it at the YouTube recording of that talk (uokjTev8myk, the same video embedded beside it), opening in a new tab like the featured-post card. - The LastMile AI case study linked https://mcp-agent.com/, whose domain no longer resolves (NXDOMAIN). Point it at the project's GitHub repo (github.com/lastmile-ai/mcp-agent) — the one deliberate deviation from the verbatim restore. Everything else checks out: all internal routes 200, all external links resolve. (/docs 404s only when running the web app standalone — it's the separate docs app, routed together in production.)
- js/incomplete-multi-character-sanitization (lib/posts.ts): strip HTML tags in deriveExcerpt to a fixpoint instead of a single pass, so overlapping fragments can't reassemble into a tag. The excerpt is rendered as JSX text (React-escaped) either way; this makes the sanitizer complete rather than cosmetic. - js/stored-xss (resources/blog/page.tsx): encode the file-derived slug with encodeURIComponent in the card href. Behavior-neutral — every restored slug is already URL-safe — but closes the tainted path CodeQL tracks from file content into an href.
Review feedback on TraceMachina#2501 asked for one section per content type. The grouping comes from the posts' original frontmatter tags (case-studies, announcements; everything else lands in "More from the blog"), so no content changes — same ten cards, now under three eyebrow-headed sections in that order, newest first within each. A section with no posts renders nothing.
24f686d to
ddb2a24
Compare
The blog entry point was a small mono text link, hidden entirely on mobile (hidden md:inline-flex). Use the design system's outline Button instead, visible at every viewport, so the restored blog is discoverable from /resources on phones too.
Move the entire blog listing (case studies / announcements / more) onto the resources page under the "From the team" header, so posts are readable without leaving /resources. The card/section markup moves to a shared app/resources/post-sections.tsx used by both this page and /resources/blog, which stays as a standalone index for direct links and the posts' back-links. The hermetic-toolchains talk is no longer embedded as a YouTube player: it becomes a regular card at the end of "More from the blog", linking out to the recording. Its card metadata now says "BazelCon 2024" — the talk's actual venue — instead of the placeholder date the redesign had invented. The "All posts" link is gone since the posts now live on the page itself.
Drop the Blog eyebrow above "From the team" and use "Blog" as the section heading itself.
Restore "From the team" as the listing's heading (no eyebrow) and title the final group "Blog" instead of "More from the blog", on both /resources and the standalone /resources/blog index.
MarcusSorealheis
approved these changes
Jul 4, 2026
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.
Description
Restores the 10 real blog posts that were deleted when the site redesign (#2371) replaced the old Astro site (
web/platform/) with the new Next.js app, leaving/resourceswith placeholder cards linking to#..md/.mdxposts recovered byte-for-byte from2c549617^intoweb/apps/web/content/posts/, original frontmatter intact./resources/blog(standalone index) and/resources/blog/<slug>(prerendered post pages; markdown rendered withmarked— already in the lockfile via the docs app — into the existingProsecomponent). Slugs come from the original frontmatter, so the pre-redesign URLs resolve again./resourcesunder a "From the team" heading, grouped per review feedback into Case studies / Announcements / Blog. The hermetic-toolchains talk is no longer an embedded YouTube player — it's a regular card at the end of the Blog group linking out to the recording (its metadata now says "BazelCon 2024", the talk's actual venue, instead of the placeholder date the redesign invented).#talk card now points at the recording, and the LastMile AI post'smcp-agent.comlink (domain no longer resolves) now points at the project's GitHub repo — the one deviation from the verbatim restore.encodeURIComponenton file-derived slugs in hrefs).Notes for review: the restored index lists all posts (the old Astro index filtered on the
newstag, which hid the CMake tutorial — surfacing it is intentional). Known content staleness, restored as-is for a faithful restore: the LLM fine-tuning tutorial pins NativeLink v0.6.0 and depends on theTraceMachina/nativelink-blogsrepo; the trust-roots post's TLS config snippets may have drifted from the currentnativelink-configschema.Type of change
How Has This Been Tested?
bun run typecheck,biome check, andnext buildclean; all 10 post pages prerender viagenerateStaticParams/resources,/resources/blog, and all 10 posts: every internal route 200, every external URL resolvesChecklist
Web Build, pre-commit, vale) passesThis change is