This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Bilingual (English/Spanish) Python textbook built with MkDocs Material, deployed to GitHub Pages. Content organized as 12 modules: Foundations (M1-M9, beginner) and Beyond the Basics (M10-M12, intermediate). Selected chapters have in-browser Python execution via Pyodide.
# Setup
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Local dev server (http://127.0.0.1:8000)
mkdocs serve
# Build static site (outputs to site/)
mkdocs build
# Deploy to GitHub Pages (CI does this automatically on push to main)
mkdocs gh-deploy --force- mkdocs.yml — Central config: navigation, theme, plugins, i18n settings, markdown extensions
- docs/ — All content as Markdown files
- Bilingual via suffix convention:
file.md(English),file.es.md(Spanish) — handled bymkdocs-static-i18nplugin modules/— All chapters with numbered prefixes (m01-throughm12-) matching curriculum modulesexercises/foundations/— Exercises for Modules 1-9exercises/beyond/— Exercises for Modules 10-12authoring/chapter-template.md— Canonical chapter structure (What you'll learn → Explanation → Example → Common mistakes → Exercises → Further reading)assets/js/pyodide-runner.js— In-browser Python execution engine (Pyodide v0.27.2)assets/js/language-switcher.js— EN/ES toggle
- Bilingual via suffix convention:
- site/ — Generated output (gitignored in deployment, present locally)
- Chapters follow the template in
docs/authoring/chapter-template.md - Interactive code blocks use
<div class="py-run" markdown="1">wrapper - Exercises use
??? tipfor hints and??? successfor solutions (pymdownx.details collapsibles) - Every English content file should have a corresponding
.es.mdSpanish translation - Navigation translations for Spanish UI strings are defined in
mkdocs.ymlunderplugins.i18n.languages.es.nav_translations
All contributions require explicit maintainer authorization before starting work. See CONTRIBUTING.md for the full process. All changes require review from @enaguero (defined in .github/CODEOWNERS).