Thanks for your interest in contributing! Follow these steps to get started:
- Set up the local development environment (below).
- Bug fixes are always welcome — check the issues list.
- New to the project? Look for issues labeled good first issue.
root/
├── src/
│ ├── pages/ # Astro routes (e.g. tour/variables.astro)
│ ├── layouts/ # shared page layouts
│ ├── components/ # Astro/React components
│ ├── content/ # MDX/content collections (e.g. blog)
│ ├── i18n/
│ │ ├── locales/ # per-language UI strings (en.yml, id.yml)
│ │ └── chapters/<lang>/ # per-language lesson content
│ └── styles/
├── scripts/ # Python tooling for translations
├── makefile # task runner (dev, build, translations, lint)
└── astro.config.mjs
- Fork the repository and clone your fork.
- Create a separate branch per issue/feature — avoid mixing unrelated changes in one branch.
This project uses pnpm for the site and Python 3 (+ PyYAML) for the translation tooling.
pnpm install
pnpm devThe dev server runs at http://localhost:4321.
make setup # install deps + check Python setup
make dev # start dev server
make build # production build
make lint # lint code
make format # format code
make validate-translations # validate all translation files
make new-language LANG=xx # scaffold a new language
make check-missing LANG=xx # find missing translation keys for a language
make stats # translation coverage statsRun make help (or just make) for the full command list.
Lesson content lives in src/i18n/chapters/<lang>/ and UI strings in src/i18n/locales/<lang>.yml. If you're adding a whole new chapter, use the /new-chapter workflow or check src/pages/tour/ for how existing chapters wire up routing, sidebar, and TOC entries.
Run make new-language LANG=xx to scaffold the locale file and chapter directory, then fill in translations and run make check-missing LANG=xx / make validate-translations before opening a PR.
Before pushing, make sure:
pnpm buildsucceedsmake validate-translationspasses if you touched anyi18ncontentpnpm devstill renders the pages you changed
- Commit your changes:
git commit -m "<your message>". - Push to your fork:
git push origin <your-branch-name>. - Open a pull request against
main, describing what changed and why. - Link the issue your PR resolves, if any.
By participating in this project, you agree to abide by the Code of Conduct.