Documentation site for the Z²ᴱ framework. Next.js 16 + Fumadocs MDX, managed with Bun.
- Install:
bun install(must be Bun —patchedDependenciesinpackage.jsonandbun.lockare Bun-only; npm/yarn will not apply patches) - Dev:
bun run dev(usesnext dev --turbo, i.e. Turbopack) - Build:
bun run build - Lint:
bun run lint(flat ESLint config, no args — runseslintwith no path globs by default) - ESLint is pinned to
^9.39.4, not^10. ESLint 10 is blocked upstream byeslint-plugin-react(viaeslint-config-next) which crashes on the ESLint 10context.getFilenameAPI removal — no ESLint 10 release exists yet (see vercel/next.js#91702). Do not bump toeslint@10without first verifyingeslint-plugin-reactpeer compatibility. - Release:
bun run release(bumpp) - No test suite exists.
- CI (
.github/workflows/ci.yml):bun install --frozen-lockfile→bun run build→bun run lint. Keep lockfile in sync. prepareinstalls Husky;.husky/pre-commitrunsbun run buildon every commit — expect a slow commit and ensure the build passes before committing.- Default branch is
master(notmain).
.source/is generated byfumadocs-mdxvia thepostinstallhook (and during dev/build). It is gitignored and regenerated — never hand-edit, never commit.- Import docs collections via the
fumadocs-mdx:collections/*TS path alias (maps to./.source/*, seetsconfig.json), e.g.fumadocs-mdx:collections/serverinsrc/lib/source.ts. - If imports from
fumadocs-mdx:collections/*fail to resolve, runbun install(triggerspostinstall) orbun run buildto regenerate.
- MDX docs live in
content/docs/. Each directory can have ameta.jsonthat controls page order/sidebar (Fumadocs convention). - Frontmatter schema is defined in
source.config.tsviafrontmatterSchema/metaSchemafromfumadocs-mdx/config. Don't invent custom frontmatter fields without extending the schema there. src/app/docs/[[...slug]]/page.tsxrenders MDX pages;src/lib/source.tswires the FumadocsloaderwithbaseUrl: '/docs'.- LLM-friendly full text route:
src/app/llms-full.txt/route.ts. OG images per doc:src/app/og/docs/[...slug]/route.tsx.
@/*→./src/*fumadocs-mdx:collections/*→./.source/*(generated)
None. Earlier patches/ for fumadocs-mdx and @tailwindcss/node (swapping module.register → registerHooks) were dropped after upgrading to fumadocs-mdx@^15.2.2 / @tailwindcss/node@4.3.3, which fixed the issue upstream. If a Node module.register deprecation error resurfaces in MDX/Tailwind, that's the code path to re-patch.
- Tailwind CSS 4 via
@tailwindcss/postcss(seepostcss.config.mjs); notailwind.config.*file — Tailwind 4 config-less setup. - ESLint flat config (
eslint.config.mjs) extendseslint-config-next/core-web-vitals+eslint-config-next/typescript. Ignores:node_modules,.next,out,build,.source,next-env.d.ts. - TypeScript is pinned to
^6.0.3, not^7. TS 7 (the native port) is latest but Next 16.2.12's generated route types (.next/dev/types/validator.ts) don't type-check clean under it, andnext dev/buildreject it ("TypeScript 7.x does not provide the compiler API required by Next.js"). Stay on TS 6 until Next ships TS-7-clean generated types.next.config.mjs'sexperimental.useTypeScriptCligets past the compiler-API error but not the generated-type errors — don't rely on it. - Deployment target is ambiguous:
@opennextjs/cloudflaredependency indicates Cloudflare (OpenNext adapter), butREADME.mdsays Vercel. Confirm the deploy target before changing build/runtime config.