MuseMVP Docs

Blog System

Configure blog publishing and premium-content behavior. Blog now supports Pro-gated content, rich Fumadocs blocks, and SSR-first rendering.

The blog module renders articles from content/posts/*.mdx, compiled by Content Collections.

Compared with the previous version, blog now supports:

  • SSR-first article rendering
  • Rich Fumadocs block components in blog posts
  • GFM tables in Markdown (remark-gfm)

Quick Start

Toggle blog route access with config.ui.blog.enabled.

// src/config/index.ts
ui: {
  blog: { enabled: true },
}

Configure blog menu labels in i18n.

// src/config/index.ts
i18n: {
  locales: {
    zh: { headerMenuMap: { blog: "Blog" } },
    en: { headerMenuMap: { blog: "Blog" } },
  },
}

Create or edit an article under content/posts/*.mdx.

Frontmatter Reference

FieldRequiredPurpose
titleYesPost title
dateYesPublish date
authorNameYesAuthor display name
tagsYesTag list
publishedYesControls list/sitemap visibility
contentDerivedSource markdown body (collection input)
excerptNoSummary text
imageNoCover image
authorImageNoAuthor avatar
authorLinkNoAuthor profile link
categoriesNoCategory grouping

Rendering Architecture

LayerFileResponsibility
Route pagesrc/app/(landing-page)/[locale]/(cms)/blog/[...path]/page.tsxLoads post, checks access, passes
SSR contentsrc/modules/landing-page/blog/components/PostContent.tsxSSR-first blog content rendering

Rich MDX Block Support

Blog posts now use the same rich Fumadocs block mapping as docs.

Shared mapping entry:

  • src/modules/landing-page/blog/components/FumadocsRichMdxComponents.tsx

Common supported blocks include:

  • Callout, CalloutContainer
  • Cards, Card
  • Tabs, Tab, TabsList, TabsTrigger, TabsContent
  • CodeBlock, CodeBlockTabs, DynamicCodeBlock
  • Steps, Step
  • Files, Folder, File
  • Accordions, Accordion
  • Banner, InlineTOC, TypeTable, ImageZoom

Markdown Compatibility

Blog compilation now enables GFM syntax (remark-gfm) in content-collections.ts, so Markdown tables render correctly.

| Col A | Col B |
| --- | --- |
| A1 | B1 |

Image Rules

  • Standard Markdown image syntax is supported:
![Cover](/images/blog/cover.png)
  • ImageZoom supports responsive usage without explicit width/height:
<ImageZoom
  src="/images/blog/cover.png"
  alt="Cover"
  className="h-auto w-full"
/>