Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
7348aa0
docusaurus
r0ssing May 20, 2025
1c2be85
cleanup
r0ssing May 20, 2025
d01bc5c
conf update
r0ssing May 20, 2025
6dc1e65
First content
r0ssing May 20, 2025
09beac5
GH Actions
r0ssing May 20, 2025
2dcb592
GH Actions
r0ssing May 20, 2025
3b2b0ed
GH Actions
r0ssing May 20, 2025
89d3192
README
r0ssing May 20, 2025
f3a5396
Update docs
r0ssing May 21, 2025
6ee215e
Updated docs
r0ssing May 26, 2025
902059b
Fixed broken link
r0ssing May 26, 2025
74369ca
Add WIP comment
r0ssing May 26, 2025
afa86be
docusaurus version bump
r0ssing Jun 4, 2025
2665123
frontpage update
r0ssing Jun 4, 2025
1652aa7
Added newsletter box
r0ssing Aug 12, 2025
987ce57
update API spec
r0ssing Aug 12, 2025
1cce85c
Add service descriptions
r0ssing Aug 12, 2025
4f7ae4a
new images
r0ssing Aug 12, 2025
e2920b3
styling
r0ssing Aug 12, 2025
107a7c0
updated newsletter box
r0ssing Aug 12, 2025
7dcb4b8
disabled newsletter signup
r0ssing Aug 13, 2025
3ceb25e
add signup confirmation
r0ssing Aug 13, 2025
5cd5196
updated release date information
r0ssing Sep 11, 2025
daed10b
sourcecode gone public!
r0ssing Sep 16, 2025
3abed7d
Add installation guide for android
r0ssing Oct 6, 2025
7866590
Add announcement on front page
r0ssing Oct 6, 2025
04ae8b0
Add link to forum.opendataensemble.org
r0ssing Nov 19, 2025
4ddd6a0
Add component overview
r0ssing Nov 25, 2025
5657393
Refactor navigation and styles
najuna-brian Nov 29, 2025
283b0bb
Merge pull request #1 from najuna-brian/homepage-refactor
r0ssing Nov 29, 2025
763d772
Fix broken documentation links, add workflow and validation scripts (#2)
najuna-brian Nov 29, 2025
2db6b50
fix: display mobile-navbar
najuna-brian Nov 30, 2025
03338dd
Merge pull request #3 from najuna-brian/fix/mobile-navbar-title
r0ssing Nov 30, 2025
8daf717
docs: add ADB setup guide for Android developers
bahati308 Dec 2, 2025
71911c6
docs: add ADB setup guide for Android developers
bahati308 Dec 2, 2025
4faf36b
docs: add ODE workflow and port forwarding to ADB setup guide
bahati308 Dec 3, 2025
38c78f9
Merge pull request #5 from Bahati308/adb-setup-doc
bahati308 Dec 3, 2025
b76ef2e
Feat/docs restructure (#4)
najuna-brian Dec 3, 2025
c978c19
feat: implement ODE design tokens system
IamLRBA Dec 12, 2025
405e024
rerun validations
IamLRBA Dec 14, 2025
0065135
Merge branch 'IamLRBA-docs-ode-tokens'
IamLRBA Dec 14, 2025
8990207
Fix contradicting workflows
Ndacyayisenga-droid Dec 14, 2025
65034eb
docs: enhance quick start guides with comprehensive setup instruction…
najuna-brian Dec 14, 2025
82a6570
docs: enhance app bundle deployment guide (#28)
najuna-brian Dec 14, 2025
def48d5
Merge branch 'main' into docs-ode-tokens
bahati308 Dec 14, 2025
6529084
Merge pull request #32 from IamLRBA/docs-ode-tokens
bahati308 Dec 14, 2025
f359e37
docs: enhance forms and observations documentation (#27)
najuna-brian Dec 14, 2025
147de63
docs: enhance Synkronus CLI installation and add QR code configuratio…
najuna-brian Dec 14, 2025
5e03588
docs: enhance Formulus user guide and troubleshooting (#29)
najuna-brian Dec 14, 2025
36fbcb7
Merge branch 'OpenDataEnsemble:main' into main
IamLRBA Dec 14, 2025
e3d3006
refactor: improve docs sytle themes (#6)
najuna-brian Dec 14, 2025
9758c3b
Merge branch 'OpenDataEnsemble:main' into main
IamLRBA Dec 15, 2025
5ca07ef
Create CNAME
IamLRBA Dec 15, 2025
f32e4dc
feat: replace Noto Sans with Josefin Sans as primary font
IamLRBA Dec 15, 2025
9efeb5d
refactor: reduce body text weight to 300 and centralize font weights …
IamLRBA Dec 15, 2025
c1bb37a
refactor: self-host Josefin Sans fonts for improved privacy
IamLRBA Dec 16, 2025
01ad8cd
Merge pull request #1 from IamLRBA/fonts
bahati308 Dec 16, 2025
52e55af
feat(components): add reusable design system components
IamLRBA Dec 16, 2025
111f5f4
Fix: Browser detection error when starting the dev server
bahati308 Dec 23, 2025
ff80e3b
Merge pull request #5 from Bahati308/formulus-Install-guide
bahati308 Dec 23, 2025
dd2c186
Docs: Add v2 rewrite while preserving v1.0 to support ODE major relea…
najuna-brian Dec 30, 2025
b21fe3c
Merge pull request #3 from IamLRBA/main
IamLRBA Jan 6, 2026
7fc7c02
Add pronunciation helper for ODE acronym #8
IamLRBA Jan 6, 2026
434633c
Merge pull request #9 from IamLRBA/pronounciation-helper
IamLRBA Jan 8, 2026
e12184a
docs: enhance Formulus installation guide with screenshots and Obtain…
Jan 15, 2026
31a316d
Merge pull request #10 from OpenDataEnsemble/docs/update-installation…
Mishael-2584 Jan 15, 2026
277706d
fix: correct Docusaurus URL to match CNAME domain
Jan 15, 2026
ead29c1
Merge pull request #11 from OpenDataEnsemble/docs/update-installation…
Mishael-2584 Jan 15, 2026
c769c39
Update documentation for ODE v1.0.0 release
Mar 8, 2026
7a03829
Add comprehensive Quick Start guide for custom applications
Mar 8, 2026
fcccab1
Update favicon with ODE portal design
Mar 8, 2026
3aee9c1
Update navbar logo with official ODE logo
Mar 8, 2026
89da86f
Release v1.1.0 with comprehensive custom app documentation
Mar 8, 2026
baed0a3
Restructure documentation for better user experience
Mar 8, 2026
3503bab
Remove Try ODE Online page
Mar 8, 2026
e31e430
Move Quick Start guide to Development section
Mar 8, 2026
9081aeb
Fix all broken internal documentation links
Mar 9, 2026
d08f857
Release v1.1.1 with documentation structure improvements
Mar 9, 2026
65c8d27
Fix docusaurus.config.ts navigation links
Mar 9, 2026
526641c
Release v1.1.2 with navigation fix
Mar 9, 2026
9a234ed
Fix remaining broken links for successful build
Mar 9, 2026
5c65a10
docs: Updated the docs to persona driven
bahati308 Mar 21, 2026
a0519b8
Fix CI failure
bahati308 Mar 21, 2026
0a2515f
Merge pull request #13 from Bahati308/DocUpdate
r0ssing Mar 22, 2026
6290bee
Remove repeated info and fix broken links
bahati308 Mar 22, 2026
e4e8680
deleted build.log
bahati308 Mar 22, 2026
391fa45
Merge pull request #14 from Bahati308/DocUpdate
bahati308 Mar 22, 2026
fedc1b3
fix broken links and content placeholders
bahati308 Mar 22, 2026
efa4f83
Merge pull request #15 from Bahati308/DocUpdate
bahati308 Mar 22, 2026
5bc7f52
Added Quick start and Coffee app refrences
bahati308 Mar 22, 2026
c80157a
Merge pull request #16 from Bahati308/DocUpdate
bahati308 Mar 23, 2026
a6367bb
fix: updated header text
r0ssing Mar 23, 2026
fc5fc48
fix: button text
r0ssing Mar 23, 2026
7e7f5b5
Merge pull request #17 from OpenDataEnsemble/fix/update-front-attenti…
bahati308 Mar 23, 2026
991613f
feat: correct some mistakes, add ai section
r0ssing Mar 27, 2026
1b380bc
Merge pull request #18 from OpenDataEnsemble/feature/corrections
bahati308 Mar 27, 2026
8154a19
feature: add docs for sub observations
r0ssing May 2, 2026
088ec72
Merge pull request #19 from OpenDataEnsemble/feature/sub-observations
r0ssing May 2, 2026
c1f0583
feat(docs) add synkronus install instructions (#12)
r0ssing May 3, 2026
6d2ac73
feat: documentation for question types added (#20)
r0ssing May 4, 2026
82e7ce1
documentation of indexes and ODE Desktop developer mode
r0ssing May 16, 2026
f4ea562
documentation of indexes and ODE Desktop developer mode (#21)
r0ssing May 16, 2026
62736b5
feat: add choice lists guide and update dynamic choice lists document…
May 21, 2026
4b33dee
Merge pull request #22 from OpenDataEnsemble/docs/choice-lists-guide-…
Mishael-2584 May 21, 2026
150df74
refine choice lists documentation: update shared and dynamic lists de…
May 21, 2026
5fdf559
refine choice lists documentation: update shared and dynamic lists de…
Mishael-2584 May 21, 2026
3456cd9
enhance choice lists documentation: clarify dropdown types, improve s…
May 26, 2026
3c9f142
Merge origin/main into docs/choice-lists-guide-update
May 26, 2026
29707ed
Merge pull request #25 from OpenDataEnsemble/docs/choice-lists-guide-…
Mishael-2584 May 26, 2026
e8b9008
docs: update ODE monorepo guides for pnpm migration (#24)
najuna-brian May 27, 2026
bffe1de
docs: add Formulus legal pages and footer links (#26)
najuna-brian Jun 4, 2026
1794c74
docs(formplayer): document mobile UX and bridge API pack (#27)
r0ssing Jun 16, 2026
b6c8f9f
docs: v1.1.0 refresh, Community Days announce (#28)
r0ssing Jun 17, 2026
daeb4b3
docs(docs): updated diagrams and descriptions. Bump to v1.1.1
r0ssing Jun 26, 2026
966e946
merge: resolve main into feat/performance-lookups
r0ssing Jun 26, 2026
30e9fea
Merge pull request #29 from OpenDataEnsemble/feat/performance-lookups
najuna-brian Jun 26, 2026
a11756b
docs: added docs about form translation
r0ssing Jun 30, 2026
12884b6
Merge pull request #30 from OpenDataEnsemble/docs/translation
najuna-brian Jul 1, 2026
a110893
docs: document Likert and duration question types
najuna-brian Jul 2, 2026
2263d7f
docs: add Likert and duration quick-start recipes
najuna-brian Jul 2, 2026
c5539a3
docs: clarify Likert display is independent of scale content
najuna-brian Jul 2, 2026
4fba0f5
docs: present Likert display/content note as a tip admonition
najuna-brian Jul 2, 2026
75c6a4f
docs: add Likert N/A validation, layout, and i18n guidance
najuna-brian Jul 2, 2026
25ebd0a
Merge pull request #33 from OpenDataEnsemble/docs/likert-and-duration…
IamLRBA Jul 2, 2026
171a5ee
chore: release prep for v1.2.1
r0ssing Aug 3, 2026
5c69588
Merge pull request #34 from OpenDataEnsemble/feat/release-prep
najuna-brian Aug 3, 2026
1799c29
chore: prep for v1.3.0
r0ssing Aug 19, 2026
c1c461c
Merge pull request #35 from OpenDataEnsemble/v1.3.0-preparations
najuna-brian Aug 19, 2026
f5876f2
chore: docs update
r0ssing Aug 31, 2026
4362537
chore: add container image tag info
r0ssing Aug 31, 2026
00991eb
chore: release prep for v1.3.2
r0ssing Sep 1, 2026
942beca
Logo Change
IamLRBA Sep 9, 2026
8b8716c
Button Change
IamLRBA Sep 9, 2026
d2c8078
Text Readability
IamLRBA Sep 9, 2026
5de8686
Merge pull request #37 from OpenDataEnsemble/Minor-Changes
IamLRBA Sep 9, 2026
8b4f418
Footer Changes
IamLRBA Sep 9, 2026
2e9334d
Footer Changes
IamLRBA Sep 9, 2026
35af463
Merge pull request #38 from OpenDataEnsemble/Minor-Changes
IamLRBA Sep 10, 2026
c286896
updated sync instructions
r0ssing Sep 25, 2026
17700bd
Merge pull request #36 from OpenDataEnsemble/feat/new-sync-impl
r0ssing Sep 25, 2026
53286d7
chore(docs): prepare the docs/ prefix for the documentation site import
najuna-brian Sep 26, 2026
334de02
Add 'docs/' from commit '17700bdf40cca5478b3d285297c75f58d761015b'
najuna-brian Sep 26, 2026
8dc7fb8
docs: drop unused site files and move CNAME into static/
najuna-brian Sep 26, 2026
93840f9
docs: adapt the documentation site to the ODE monorepo
najuna-brian Sep 26, 2026
3adf377
ci: build and publish the documentation site from the monorepo
najuna-brian Sep 26, 2026
0e2f01c
docs: drop the executable bit from the validation script
najuna-brian Sep 26, 2026
4ee0e85
Update .github/workflows/docs.yml
najuna-brian Sep 26, 2026
557e851
Update .github/CICD.md
najuna-brian Sep 26, 2026
5470da8
Update .github/CICD.md
najuna-brian Sep 26, 2026
b92601a
Update .github/workflows/docs.yml
najuna-brian Sep 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .github/CICD.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,29 @@ This ensures:
- Each APK is built against the exact assets produced in the same run
- Formplayer build outputs do not pollute git history

### Documentation Site

**Workflow**: `.github/workflows/docs.yml`

Builds and publishes the Docusaurus site in [`docs/`](../docs/) to [opendataensemble.org](https://opendataensemble.org/) via GitHub Pages.

#### Triggers

| Event | Result |
|-------|--------|
| Pull request to `main` or `dev` touching `docs/**` | Validate and build only |
| Push to `main` touching `docs/**` | Validate, build, and deploy |
| `workflow_dispatch` | Validate and build |

#### Notes

- The deployed branch is main, so the published docs track the released version of ODE. Changes on dev and pull requests are validated by CI but are not deployed.
- The site is an independent **npm** project inside the pnpm monorepo: `cache-dependency-path` points at `docs/package-lock.json`, which is force-included in the root `.gitignore` so `npm ci` is reproducible.
- `docs/docs/` is the Docusaurus content root. URLs are unchanged from the previous standalone `OpenDataEnsemble/docs` repository — `routeBasePath` is still `/docs`.
- `actions/upload-pages-artifact@v4` is used deliberately: v5 excludes dotfiles by default, which would drop `static/.nojekyll` and `static/CNAME` from the artifact.
- The upload path is `docs/build` (repo-root relative). `defaults.run.working-directory` does not apply to `uses:` steps.
- No secrets are required. The deploy job needs `contents: read`, `pages: write`, and `id-token: write`.

### SBOM (CycloneDX) on releases

**Workflow**: `.github/workflows/sbom-release.yml`
Expand Down
102 changes: 102 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Docs

on:
pull_request:
branches: [main, dev]
paths:
- 'docs/**'
- '.github/workflows/docs.yml'
push:
branches: [main, dev]
paths:
- 'docs/**'
- '.github/workflows/docs.yml'
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
# Do not cancel an in-flight production deploy when another push lands.
cancel-in-progress: ${{ github.event_name != 'push' }}

permissions:
contents: read

env:
NODE_VERSION: '24'

jobs:
validate:
name: Validate
runs-on: ubuntu-latest
defaults:
run:
working-directory: docs
steps:
- name: Checkout repository
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
fetch-depth: 0

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: docs/package-lock.json

- name: Install dependencies
run: npm ci

- name: Check links and doc IDs
run: npm run test

- name: Build site
env:
CI: true
run: npm run build

deploy:
name: Deploy to GitHub Pages
needs: validate
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest

permissions:
contents: read # checkout (job permissions replace the workflow defaults)
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source

environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

defaults:
run:
working-directory: docs

steps:
- name: Checkout repository
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: docs/package-lock.json

- name: Install dependencies
run: npm ci

- name: Build site
run: npm run build

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4
with:
# Action paths are relative to the repo root, not defaults.run.working-directory.
path: docs/build

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ package-lock.json
**/package-lock.json
# F-Droid builds use npm ci / install --build-from-source in formulus/
!formulus/package-lock.json
# Documentation site deploys with npm ci, so its lockfile must be committed
!docs/package-lock.json

# Generated credentials
**/credentials.txt
Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ Do not assume custom app authors have local checkouts of **ODE** or internal exa
| [packages/tokens](packages/tokens/) | Design tokens (`@ode/tokens`) | Style Dictionary | [packages/tokens/AGENTS.md](packages/tokens/AGENTS.md) |
| [packages/components](packages/components/) | Shared UI (`@ode/components`) | React | [packages/components/AGENTS.md](packages/components/AGENTS.md) |
| [desktop](desktop/) | Data management + Forms / app workbench (Tauri) | React, Rust | [desktop/AGENTS.md](desktop/AGENTS.md) |
| [docs](docs/) | Documentation site (published at [opendataensemble.org](https://opendataensemble.org/)) | Docusaurus, MDX | [docs/README.md](docs/README.md) |

---

Expand Down
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ This is a monorepo, so the setup depends on the project you're touching. The ful
- **synkronus-cli** - Go command-line client. See `synkronus-cli/README.md`; pre-flight is `cd synkronus-cli && go build ./cmd/synkronus`.
- **synkronus-portal** - web admin UI (React). See `synkronus-portal/README.md` for both Docker and Dockerless setups.
- **desktop** - Tauri app. See `desktop/README.md` (Quick start).
- **docs** - public Docusaurus site under `docs/`. It is an independent **npm** project (`cd docs && npm install && npm start`); do not use pnpm there. See `docs/README.md`.
- **packages/tokens** and **packages/components** - see `packages/tokens/CONTRIBUTING.md` and `packages/components/CONTRIBUTING.md`.

The quickest cheat sheet for any package is its `AGENTS.md` file - it lists the day-to-day commands and exactly what to run before a pull request.
Expand Down
2 changes: 1 addition & 1 deletion FORM_LOCALIZATION_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ Behavioral config (`maxStars`, filters, …) stays in **`schema.json`** (`config
| UI locale preference (host) | `formulus/src/lib/locale.ts`, Settings → Language |
| Linked child specs for sub-obs columns | `FormInitData.linkedFormSpecs` (built in Formulus / ODE Desktop) |

When changing merge rules or label resolution, update **`applyFormUiTranslations.test.ts`**, affected renderers, and the [published form translations guide](https://opendataensemble.org/docs/guides/form-translations) in **ode-docs**.
When changing merge rules or label resolution, update **`applyFormUiTranslations.test.ts`**, affected renderers, and the [published form translations guide](https://opendataensemble.org/docs/guides/form-translations) in **`docs/docs/guides/form-translations.md`**.

---

Expand Down
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
[![Formulus Android](https://github.com/OpenDataEnsemble/ode/actions/workflows/formulus-android.yml/badge.svg?branch=main)](https://github.com/OpenDataEnsemble/ode/actions/workflows/formulus-android.yml)
[![ODE Desktop](https://github.com/OpenDataEnsemble/ode/actions/workflows/ode-desktop.yml/badge.svg?branch=main)](https://github.com/OpenDataEnsemble/ode/actions/workflows/ode-desktop.yml)
[![E2E attachments](https://github.com/OpenDataEnsemble/ode/actions/workflows/e2e-attachments.yml/badge.svg?branch=main)](https://github.com/OpenDataEnsemble/ode/actions/workflows/e2e-attachments.yml)
[![Docs](https://github.com/OpenDataEnsemble/ode/actions/workflows/docs.yml/badge.svg?branch=dev)](https://github.com/OpenDataEnsemble/ode/actions/workflows/docs.yml)

<!-- Release & distribution -->
[![Latest release](https://img.shields.io/github/v/release/OpenDataEnsemble/ode?include_prereleases&sort=semver)](https://github.com/OpenDataEnsemble/ode/releases)
Expand All @@ -26,7 +27,7 @@ ODE is a monorepo containing all the core components in the ODE universe - the e

## Architecture

This repository houses four main components:
This repository houses the core components plus the public documentation site:

### **formulus**
A React Native project containing the code for Android and iOS apps. This is your mobile data collection companion, designed for field work and offline-first data gathering.
Expand Down Expand Up @@ -58,6 +59,9 @@ curl -fsSL https://raw.githubusercontent.com/OpenDataEnsemble/ode/main/scripts/i
### **synkronus-portal**
A web-based version of the the **synkronus-cli**

### **docs**
The public documentation site (Docusaurus), published at [opendataensemble.org](https://opendataensemble.org/). It is an independent npm project inside this monorepo — see [docs/README.md](docs/README.md).

## We're Young & Fresh! 🌱🌱🌱

ODE is a **young and vibrant open-source project**, and we're incredibly welcoming to contributors of all experience levels and interests! Whether you're passionate about:
Expand Down Expand Up @@ -89,6 +93,7 @@ This monorepo uses GitHub Actions for CI/CD. For details (trigger conditions, ta

- Synkronus Docker build & publish: `.github/workflows/synkronus-docker.yml`
- Formulus Android build (includes Formplayer asset build): `.github/workflows/formulus-android.yml`
- Documentation site: `.github/workflows/docs.yml` (validates PRs; deploys from `dev`)
- Synkronus deployment docs: `synkronus/DOCKER.md`, `synkronus/DEPLOYMENT.md`

## Code Quality: Linting & Formatting
Expand Down
44 changes: 44 additions & 0 deletions docs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Dependencies
node_modules/

# Production build
build/
.docusaurus/
.cache-loader/

# Generated files
.docusaurus/
.cache/

# Misc
.DS_Store
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# Logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
devserver.log
devserver.err.log
devserver.pid

# Editor directories and files
.idea/
.vscode/
*.swp
*.swo
*~
.project
.classpath
.settings/
*.sublime-workspace

# OS
.DS_Store
Thumbs.db

54 changes: 54 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# ODE Documentation Site

The ODE documentation site, built with [Docusaurus](https://docusaurus.io/) and published at [opendataensemble.org](https://opendataensemble.org/).

This site lives in the [`OpenDataEnsemble/ode`](https://github.com/OpenDataEnsemble/ode) monorepo under `docs/`. It is an independent **npm** project — the rest of the monorepo uses **pnpm**, so run npm commands from this directory.

## Layout

| Path | Purpose |
|------|---------|
| `docs/docs/` | Documentation content (Markdown/MDX). One folder per section: `getting-started/`, `guides/`, `using/`, `reference/`, `community/`, … |
| `docs/static/` | Assets copied verbatim to the site root (`img/`, `fonts/`, `diagrams/`), plus `CNAME` and `.nojekyll` |
| `docusaurus.config.ts` | Site config: navbar, footer, routing, plugins |
| `sidebars.ts` | Sidebar structure (persona-based: For Data Collectors / For Implementers / For Developers) |
| `plugins/` | Remark/rehype link fixups |
| `scripts/validate-docs.ts` | Fast validation run by `npm run test` |
| `src/` | Custom React components, theme overrides, and the `/downloads` page |

## Local development

```bash
npm install
npm start
```

Starts a dev server with hot reload. The site is served at `/`, documentation under `/docs`.

## Validation

Run these before opening a PR — the CI workflow runs the same commands.

```bash
npm run test # fast: docId references, internal links, config paths
npm run build # full: compiles every page, fails on broken links
npm run validate # both of the above
```

`npm run build` is the real gate: the site is configured with `onBrokenLinks: 'throw'`, so a broken internal link fails the build rather than shipping.

## Deployment

[`docs.yml`](../.github/workflows/docs.yml) publishes the site to GitHub Pages:

| Trigger | Result |
|---------|--------|
| Pull request to `main` or `dev` touching `docs/**` | Validate and build only |
| Push to `dev` touching `docs/**` | Validate, build, and deploy |
| Manual (`workflow_dispatch`) | Validate and build |

The deployed branch is **`dev`**, so the site reflects the latest merged work rather than the last release. Deploys run with `actions/deploy-pages` and require no secrets.

:::note Versioning
Docusaurus versioning is currently **disabled** (`disableVersioning: true` in `docusaurus.config.ts`, and `versions.json` is empty). There is no version dropdown: every visitor sees the current docs.
:::
4 changes: 4 additions & 0 deletions docs/babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

Loading
Loading