Builder hub blog#18146
Conversation
✅ Deploy Preview for ethereumorg ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Hub/index routes (`/[locale]/developers`, `/[locale]/developers/blog`, `/[locale]/developers/tutorials`, `/[locale]/videos`) read frontmatter from `public/content/` at render time and may be opted into ISR via revalidating data getters (events, video thumbnails, etc.). The global `outputFileTracingExcludes` rule for `public/content` then leaves those reads empty inside the Netlify serverless function on ISR re-render -- listings silently degrade to "no posts" / empty grids until the next deploy. Add `outputFileTracingIncludes` to re-pull the MD subset each hub reads (English + all locale translations). Per-route includes win over the global exclude. Drafted to test the function-bundle delta and ISR behavior on a Netlify preview before merging.
fix(netlify): include hub-route MD in the function bundle
…into builder-hub-blog # Conflicts: # app/[locale]/[...slug]/page-jsonld.tsx
# Conflicts: # src/layouts/index.ts # src/lib/types.ts
|
@wackerow changes in May 27 commits:
|
- patch: TagsInlineText to accept undefined array elements, filter out, and guard against empty - refactor: use TagsInlineText - refactor: Card subcomponent usage - fix(intl): use formatDate Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
- revert blog layout addition - update tutorial layout to accomodate blog post features Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Mirror external blog post hero images to S3
ContextBlog posts under Proposed approachFollow the existing data-layer Trigger.dev pattern (see Wiring checklist:
Open design question — fallback when mapping is absentWorth verifying when this is picked up: Trigger.dev tasks in this repo appear to fire on production deploy. If correct, the timing concern largely takes care of itself — a PR merging a new external-image post deploys with its mapping populated as part of the same deploy cycle. What remains is choosing a fallback for the edge cases: first-ever build before any mapping exists, trigger task failure, or a slug missing from the mapping for any reason. Reasonable default: render the deterministic tile fallback (already the path for posts without an Acceptance criteria
Reference points already in place
|
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Serves an RSS 2.0 feed at /latest/feed.xml, locale-aware via the existing [locale] route segment. Channel title and description pull from the page-developers-blog translation namespace so feeds for translated content get translated channel metadata for free. Items include author (via dc:creator), publish date, description, and per-tag categories. Adds a <link rel="alternate" type="application/rss+xml"> auto-discovery tag on the /latest/ page head. Extends the proxy matcher to opt feed paths back into next-intl handling -- the file-extension exclusion in the primary matcher would otherwise bypass locale routing for /latest/feed.xml and short-circuit the canonical redirect for /en/latest/feed.xml. Narrows the vestigial feed.xml entry in .gitignore to /feed.xml so the new route directory isn't silently ignored. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
- " | ethereum.org" suffix automatically applied Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
- Migrate from page-developers-blog namespace usage
- Fixes ICU variable usage for "{minutes} min read"
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
wackerow
left a comment
There was a problem hiding this comment.
@mnelsonBT Looks good! Patched a handful of things and added the RSS feed. Should be good to go! Nice job 🔥

Launches a new blog section under /developers/blog/ for the Builder Growth team (and others) to publish long-form technical content.
Description
Blog infrastructure
BlogLayout— new layout template for individual blog posts, with table of contents, breadcrumbs, reading time, and file contributors. Mirrors the establishedTutorialLayoutpatterns.BlogPostMetadata— metadata strip component showing author, team, tags, published date, and reading time./developers/blog/listing page — server-rendered listing sorted by publish date (newest first), with per-post tags, team attribution, and reading time.getBlogPostsDatautility — uses the sharedgetContentListDatahelper to load posts fromblogPosts.jsonslug registry. Adding a new post only requires creating a content directory and appending its slug to the JSON array.BlogFrontmatterinterface — extendsSharedFrontmatterwithauthor,published,team,tags,sourceUrl,image,breadcrumb, andhideEditButton.Blog posts
JSON-LD structured data
KNOWN_PERSONS)page-jsonld.tsx) —CollectionPageschema withItemListof all posts, full breadcrumb trail, and contributor list.page-jsonld.tsxin[...slug]) — enhanced to emitBlogPostingtype for blog slugs, with author resolution viaKNOWN_PERSONSalias map.Developer hub integration
/developers/page linking to latest blog posts.Notes
sourceUrlwithoutsourceThe
TutorialFrontmatterhas bothsource(display label) andsourceUrl(link). We added onlysourceUrltoBlogFrontmatterbecause the display label can be derived from the URL if we ever build the component, and we are not building it now.blogPosts.jsonslug registryNew posts are added by creating a
public/content/developers/blog/<slug>/index.mddirectory and appending the slug tosrc/data/blogPosts.json. This mirrors theinternalTutorials.jsonpattern and keeps the content data layer simplePreview link
https://deploy-preview-18146.ethereum.it/latest