docs(fumadocs): document on-demand SSR blog architecture - #121
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Requesting review from @leoisadev1 who has experience with the following files modified in this PR:
|
…sThroughEnv notes Reframed for the SSR architecture: the mapping/sanitization contract is shared by both rendering paths, future-dated posts now show on the SSR blog and are only held back from the feed snapshot, and passThroughEnv in turbo.json is required for the build-time feed fetch to see NOTRA_API_KEY. Generated-By: PostHog Code Task-Id: ec2538f2-5c80-4142-b4b3-b1a53394862e
Greptile SummaryThis PR updates the Fumadocs README to describe the current Notra blog architecture. The main changes are:
Confidence Score: 5/5Documentation-only change that aligns the README with the existing Notra blog implementation. Only
What T-Rex did
Reviews (2): Last reviewed commit: "docs(fumadocs): correct OG image cache f..." | Re-trigger Greptile |
fixed the greptile freshness issue on pr #121. the readme grouped what changed in
verified the cache value against source before writing. documentation-only, pushed to the existing |
|
this one's already handled — it's the same og cache comment i fixed last turn. greptile's review ran against commit
no new changes needed. re-triggering greptile on the latest commit should clear the comment. |
Merge brings in delivery status tracking (#126), recipient variables (#125), scheduled sends (#127), the fumadocs SSR README (#121), AGENTS.md updates, and Homebrew 0.6.5. Conflicts resolved by keeping the humanized prose and main's feature facts; the field-support matrix re-verified cell-for-cell against SUPPORTED_MESSAGE_FIELDS, including the new Send at column. Also: clarify one-tag semantics (Postmark keeps name:value, Mailtrap and Lettermint keep only the value), document sendBulk in the adapter contract, add all_recipients_failed to the errors page, note per-recipient idempotency suffixing and per-recipient hook firing, cross-link recipientVariables and sendAt from the quickstart and landing page, and pre-add the telemetry disclosure sections to both READMEs ahead of the telemetry PR. Generated-By: PostHog Code Task-Id: ec2538f2-5c80-4142-b4b3-b1a53394862e
Summary
PR #119 switched the blog from build-time prerendering to on-demand SSR, but
apps/fumadocs/README.mdstill described the old "fully static, baked at build time" model. This updates the Blog content (Notra) section to match the shipped behavior, and folds in the still-accurate authoring reference from #112 and the turbo env detail from #118 so this PR supersedes both.Docs updated
apps/fumadocs/README.md→ "Blog content (Notra)" — rewritten to document the new architecture:/blog,/blog/$slug, and/og/blog/*(live fetch, edge-cached ~60s, no rebuild) vs. the build-time snapshot that now backs onlysitemap.xml/rss.xml/feed.json.notra-runtime.ts,fetch-notra-posts.ts,notra-content.ts, and thevercel.jsonBuild Output change.NOTRA_API_KEYis now required at both build time and runtime (the deployed SSR function needs it).Folded-in content (from #112 and #118, re-verified for SSR)
BlogPostfield-mapping table (mapNotraPostinscripts/notra-content.ts): slug re-slugification +-2/-3dedupe, title requirement, ~155-char excerpt fallback,createdAt-derivedpublishedAt, read-time heuristic, derived OG image/alt, emptytags.sanitize-htmlallowlist, external-linktarget/rel, lazy images, allowed URL schemes — reframed as server-side for both paths (request time for blog pages, build time for the feed snapshot) instead of "baked at build time".status: "published"andmapNotraPostdouble-checks); future-dated posts now show on the SSR blog and are only held back from sitemap/RSS/feed (isBlogPostPublishedinsrc/lib/blog.ts) — the old "hidden from index, reachable by direct URL" claim no longer matches the code and was not carried over. Empty-body and no-posts empty states documented.vercel.jsonallowshttps://*.usenotra.comunderimg-src.passThroughEnvrequirement (from docs(fumadocs): document NOTRA_API_KEY turbo passthrough and empty-blog troubleshooting #118):"passThroughEnv": ["NOTRA_API_KEY"]inapps/fumadocs/turbo.jsonis required for the build-time feed fetch (scripts/fetch-notra-posts.ts) to see the key — turbo's strict env mode strips undeclared variables. The deployed SSR function reads the Vercel env directly and is unaffected.Codepaths covered
Verified against source — no behavior described that the code doesn't do:
apps/fumadocs/src/lib/notra-runtime.ts— request-time server functions, dynamic SDK import, edge caching.apps/fumadocs/src/routes/blog/index.tsx,blog/$slug.tsx,og/blog/$.ts— load from the runtime fetch withCache-Controlheaders.apps/fumadocs/scripts/notra-content.ts— mapping, slugging, excerpt, sanitize rules.apps/fumadocs/vite.config.ts—prerender.filterexcludes blog routes.apps/fumadocs/scripts/fetch-notra-posts.ts+src/lib/blog.ts— snapshot now feeds sitemap/RSS/JSON only, with the date filter.apps/fumadocs/turbo.json—passThroughEnv: ["NOTRA_API_KEY"].vercel.json— full.vercel/outputdeploy and theimg-srcCSP entry.Documentation-only change; no source files modified.