Skip to content

feat: interactive learning paths (spec 006) - #40

Merged
matbrgz merged 5 commits into
masterfrom
feat/learning-paths
Oct 12, 2026
Merged

matbrgz merged 5 commits into
masterfrom
feat/learning-paths

Conversation

@matbrgz

@matbrgz matbrgz commented Oct 12, 2026

Copy link
Copy Markdown
Member

Implements spec 006: IPL's own interactive learning paths.

Pages

  • /<lang>/learning-paths/ lists every path, grouped by level.
  • /<lang>/learning-paths/<slug>/ shows one path:
    • stages and numbered steps as <details>, so the page reads as an ordered list without JavaScript;
    • each step's IPL curated resources;
    • with JavaScript, a "finished this step" checkbox per step and a progress bar, with progress announced to screen readers and kept in localStorage;
    • credited roadmap.sh links under "See also".
  • Subcategory pages list their paths, and the footer links the index.

Content

12 paths per language: frontend, backend, JavaScript, Python, data analysis, machine learning, DevOps, cybersecurity, databases, UX design, mobile and computer science, with 9 to 14 steps each.

  • Written for IPL from IPL's curated resources only. pt-BR is written natively, not translated.
  • No external roadmap was consulted or adapted. roadmap.sh roadmaps appear only as credited links.
  • Writing the paths exposed curation gaps, which a separate commit fills with 41 checked resources: native mobile, Python, and DevOps in pt-BR.

How it works

  • _plugins/learning_paths.rb resolves each step URL to its curated entry. An unknown URL fails the build outside production.
  • test/learning_paths_test.rb (2,326 assertions) checks that both languages have the same paths, the schema, source: ipl, and that every step resource is curated.

Checked

  • Rendered in a Ruby 3.2.2 container: 26 pages (24 paths and 2 indexes). The frontend path shows 14 steps and 33 resource links. The frontend subcategory page lists its paths.
  • test/resources_data_test.rb and test/learning_paths_test.rb pass.

Still open (spec 006)

  • T4: index paths in search.
  • T6: e2e test for persisted progress, and axe.

🤖 Generated with Claude Code

matbrgz and others added 2 commits October 12, 2026 00:40
…s need

Adds 41 checked entries (all HTTP 200):
- mobile: official Android, Apple, SwiftUI, Flutter, React Native, Expo,
  Firebase, Material 3 and Human Interface Guidelines resources, plus the
  Kotlin and Swift docs;
- Python: the official tutorial, Python for Everybody, Automate the Boring
  Stuff and PEP 8;
- DevOps (mainly pt-BR, which lacked them): Terraform, GitHub Actions,
  GitLab CI/CD, Docker Get Started and the Kubernetes docs in Portuguese.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- _plugins/learning_paths.rb creates /<lang>/learning-paths/<slug>/ from
  _data/<lang>/learning-paths/*.yaml, plus an index per language. It
  resolves each step's resource URLs to IPL's curated entries; an unknown
  URL fails the build outside production.
- _layouts/learning-path.html: stages and numbered steps as <details>, so
  the path reads without JavaScript. javascript/learning-path.js adds
  per-step checkboxes, a progress bar and a polite status message, with
  progress kept in localStorage under the path key.
- Subcategory pages list their paths, and the footer links the index.
- 12 paths per language (frontend, backend, JavaScript, Python, data
  analysis, machine learning, DevOps, cybersecurity, databases, UX, mobile,
  computer science), written for IPL from IPL's curated resources; pt-BR is
  written natively. No external roadmap was used: roadmap.sh roadmaps
  appear only as credited "see also" links.
- test/learning_paths_test.rb: same paths in both languages, schema,
  source: ipl, and every step resource is a curated IPL URL.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Deploying iplibrary-website with  Cloudflare Pages  Cloudflare Pages

Latest commit: cbfe957
Status: ✅  Deploy successful!
Preview URL: https://ca1100c6.iplibrary-website.pages.dev
Branch Preview URL: https://feat-learning-paths.iplibrary-website.pages.dev

View logs

matbrgz and others added 3 commits October 12, 2026 00:40
Commit security review: "see also" URLs came from YAML and went into href
unchecked, so a javascript: URL would have survived HTML escaping. The
generator now accepts only plain https URLs for see_also and for resolved
resources, and requires lowercase-hyphen slugs. The progress key attribute
is escaped. The data test enforces the same rules.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	_data/en-US/development/development-environment/learn.yaml
#	_data/en-US/development/plataforms/learn.yaml
#	_data/en-US/development/programming-languages/learn.yaml
#	_data/pt-BR/development/development-environment/learn.yaml
#	_data/pt-BR/development/plataforms/learn.yaml
#	_data/pt-BR/development/programming-languages/learn.yaml
Review of #40: resource_stats and the search index walked every data key
except menu and translations, so each path's "see also" links counted as
curated resources and were indexed as resources. Both now skip
learning-paths, as the learning paths generator already does.

Also from review: without JavaScript every step is open, so its resources
are readable. With JavaScript, only the next unfinished step stays open.
A learning path file that is empty or not a mapping is ignored instead of
failing the build.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@matbrgz
matbrgz merged commit c187026 into master Oct 12, 2026
10 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant