Public website and documentation for OpenDataLoader. Built with Next.js 16 + Fumadocs.
All hand-written documentation lives in apps/v1/content/docs/. Clone this repo, edit, and preview locally.
git clone https://github.com/opendataloader-project/opendataloader.org.git
cd opendataloader.org
pnpm install
pnpm dev --filter v1
open http://localhost:3000/docsEdit any .mdx file in apps/v1/content/docs/ — changes appear instantly via hot reload.
All .mdx files in apps/v1/content/docs/ except reference/:
- Quick start guides (
quick-start-python.mdx,quick-start-nodejs.mdx,quick-start-java.mdx) - Feature docs (
hybrid-mode.mdx,ai-safety.mdx,reading-order.mdx, etc.) - Benchmark pages (
benchmark/*.mdx) - FAQ, roadmap, community, contributing, license
apps/v1/content/docs/reference/ — auto-generated from opendataloader-pdf at release time. They exist locally for preview, but do not edit them manually — your changes will be overwritten on the next release.
- Create a
.mdxfile inapps/v1/content/docs/:--- title: Your Page Title description: A short description for SEO and sidebar --- Your content here.
- Add the filename (without
.mdx) toapps/v1/content/docs/meta.jsonin the desired sidebar position. Lines starting with---Heading---are visual dividers, not pages. - The page is automatically available at
/docs/<filename>
- Images: place in
apps/v1/public/figures/, reference with absolute paths () - Links: use relative links (
[JSON schema](./reference/json-schema)). Fumadocs resolves them automatically. - Code blocks: always declare the language (
```bash,```python) for syntax highlighting - Components: MDX supports React components like
<Callout>— see existing files for examples
- Create a branch, make your edits
- Verify locally with
pnpm dev --filter v1 - Open a PR — Vercel generates a preview URL automatically
- Once the preview looks good, request a merge. Deployment to production is automatic from
main.
For engineers working on the website UI, components, or infrastructure.
- Node.js >= 18 and
pnpm@9(corepack enable pnpm) - Optional:
turboglobally (pnpm add -g turbo)
pnpm install # install dependencies
pnpm dev --filter v1 # dev server at localhost:3000
pnpm build --filter v1 # production build
pnpm lint --filter v1 # ESLint
pnpm format # Prettier| Variable | Required | Purpose |
|---|---|---|
RESEND_API_KEY |
No | /api/contact route. Contact form fails without it. |
NEXT_PUBLIC_GA_ID |
No | Google Analytics |
Add secrets to .env.local.
apps/v1/
├── src/app/ # Next.js App Router
│ ├── (home)/ # Marketing homepage
│ ├── docs/[[...slug]]/ # Fumadocs pages
│ ├── demo/ # PDF demo viewer
│ └── api/ # API routes (contact, search)
├── content/docs/ # MDX documentation source
│ ├── reference/ # Auto-generated (do not edit)
│ └── *.mdx # Hand-written docs
├── public/figures/ # Static assets for docs
└── source.config.ts # Fumadocs configuration
-
pnpm dev --filter v1— pages you touched render correctly -
pnpm lint --filter v1— no lint errors - Images resolve from
apps/v1/public/ - Sidebar order is correct in
meta.json
Stack: Turborepo + pnpm workspaces, Next.js 16 (App Router), React 19, Tailwind CSS 4, shadcn/ui, Fumadocs, Jotai
Deployment: Vercel (auto-deploy from main). Static assets served from Cloudflare R2.
Docs pipeline: Hand-written docs live in this repo. Auto-generated reference docs (CLI options, JSON schema, convert options) are generated by opendataloader-pdf CI at release time and pushed into apps/v1/content/docs/reference/.