Skip to content

[web] restore blog posts deleted by the site redesign#2501

Merged
corcillo merged 9 commits into
TraceMachina:mainfrom
corcillo:corcillo-restore-blog-posts
Jul 4, 2026
Merged

[web] restore blog posts deleted by the site redesign#2501
corcillo merged 9 commits into
TraceMachina:mainfrom
corcillo:corcillo-restore-blog-posts

Conversation

@corcillo

@corcillo corcillo commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

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 /resources with placeholder cards linking to #.

  • Content: the 10 original .md/.mdx posts recovered byte-for-byte from 2c549617^ into web/apps/web/content/posts/, original frontmatter intact.
  • Routes: /resources/blog (standalone index) and /resources/blog/<slug> (prerendered post pages; markdown rendered with marked — already in the lockfile via the docs app — into the existing Prose component). Slugs come from the original frontmatter, so the pre-redesign URLs resolve again.
  • Resources page: the full listing is inlined on /resources under 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).
  • Link fixes from a full page audit: the dead # talk card now points at the recording, and the LastMile AI post's mcp-agent.com link (domain no longer resolves) now points at the project's GitHub repo — the one deviation from the verbatim restore.
  • CodeQL: both alerts raised on the new code are resolved (fixpoint HTML-tag stripping in the excerpt helper; encodeURIComponent on file-derived slugs in hrefs).

Notes for review: the restored index lists all posts (the old Astro index filtered on the news tag, 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 the TraceMachina/nativelink-blogs repo; the trust-roots post's TLS config snippets may have drifted from the current nativelink-config schema.

Type of change

  • Bug fix (non-breaking change which fixes an issue)

How Has This Been Tested?

  • bun run typecheck, biome check, and next build clean; all 10 post pages prerender via generateStaticParams
  • Local production server: desktop (1280px) and iPhone-width (390px) renders verified for every changed page, including the code-block-heavy tutorials and the raw-HTML post
  • Full link audit across /resources, /resources/blog, and all 10 posts: every internal route 200, every external URL resolves
  • CodeQL re-scan green after the fixes; Vercel preview deployments build and serve the restored blog

Checklist

  • Updated documentation if needed (n/a — content restore; no behavior docs affected)
  • Tests added/amended (no test infrastructure exists for the web app's pages)
  • Web CI (Web Build, pre-commit, vale) passes
  • PR is contained in a single commit — kept as scoped commits (restore / wiring / link fixes / CodeQL / layout) for reviewability; happy to squash on merge

This change is Reviewable

@vercel

vercel Bot commented Jul 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nativelink Ready Ready Preview, Comment Jul 4, 2026 1:06am
nativelink-aidm Ready Ready Preview, Comment Jul 4, 2026 1:06am

Request Review

Comment thread web/apps/web/app/resources/blog/page.tsx Fixed
Comment thread web/apps/web/lib/posts.ts Fixed
@corcillo corcillo marked this pull request as ready for review July 3, 2026 22:54
@corcillo corcillo requested a review from MarcusSorealheis July 3, 2026 22:54
@corcillo corcillo changed the title web: restore the 10 blog posts deleted by the site redesign web: restore blog posts deleted by the site redesign Jul 3, 2026
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.
corcillo added 5 commits July 3, 2026 17:24
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.
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.
@corcillo corcillo changed the title web: restore blog posts deleted by the site redesign [web] restore blog posts deleted by the site redesign Jul 4, 2026
@corcillo corcillo merged commit 6dca947 into TraceMachina:main Jul 4, 2026
11 checks passed
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.

3 participants