Documentation site for Propeller, built with Fumadocs and Next.js.
Visiting /docs/propeller/ redirects to /docs/propeller/architecture/.
pnpm install
pnpm devOpen http://localhost:3000/docs/propeller/ with your browser to see the result.
This site uses:
- Next.js static export —
next buildoutputs static files toout/ - Next.js
basePath— generates links and assets under/docs/propeller - Post-build nesting —
scripts/nest-static-export.mjsmoves the export underout/docs/propeller/so Cloudflare static assets can serve it from the route prefix - Worker-proxied doc images —
worker/index.ts(themainentry inwrangler.jsonc) sits in front of the static assets and serves/docs/propeller/img/*requests directly from the sharedwebsites-imagesR2 bucket; every other request falls through to the static asset binding unchanged. Seescripts/README.mdfor how images get published there.
| Setting | Value |
|---|---|
| Build command | pnpm run build |
| Deploy command | pnpm wrangler deploy |
| Version command | pnpm wrangler versions upload |
| Root directory | / |
flowchart LR
subgraph Build_and_Deploy
A[Git push] --> B[Cloudflare build trigger]
B --> C[pnpm run build]
C --> D[next build — static export]
D --> E[nest export under out/docs/propeller]
B --> F[pnpm wrangler deploy]
E --> G[Cloudflare static assets]
F --> G
end
subgraph Runtime_Request_Flow
U[Browser request] --> W[worker/index.ts]
W -->|"/docs/propeller/img/*"| R[(R2: websites-images)]
W -->|everything else| H[ASSETS binding]
R --> U
H --> U
end
Only one build variable is needed:
NEXT_PUBLIC_BASE_URL=https://www.absmach.eu/docs/propellerSet this as a Cloudflare build variable so it is embedded into the static output at build time.
| Path | Description |
|---|---|
src/app/[[...slug]]/page.tsx |
Docs page renderer (all routes) |
src/app/api/search/route.ts |
Static search index route handler |
src/app/og/[...slug]/route.tsx |
OG image generation for docs pages |
src/app/llms-full.txt/route.ts |
LLM-readable full docs text |
content/docs |
MDX source files |
src/lib/source.ts |
Fumadocs source adapter |
src/lib/layout.shared.tsx |
Shared layout options |
content/openapi.yaml |
OpenAPI spec (generates API docs) |
scripts/nest-static-export.mjs |
Moves static export under /docs/propeller |
worker/index.ts |
Cloudflare Worker: proxies /docs/propeller/img/* from R2, falls through to static assets otherwise |
src/lib/remark-doc-images.ts |
Remark plugin resolving markdown image paths (relative to their source file) to their R2-proxy URL at build time |
scripts/publish-image.mjs |
Maintainer-only: uploads a content image to R2 and purges its cache entry |