This scraper downloads selected freeCodeCamp courses and puts it in a ZIM file, a clean and user friendly format for storing content for offline usage.
This project consists of two major components:
zimui
- A Vue.JS application specially crafted to:- be embeded inside the ZIM and serve as main entry point (through compilation for offline usage with Vite)
- present FCC curriculum, including solving exercices
- be compatible with most ZIM readers
scraper
- The Python tool that build FCC ZIM. It is responsible to:- fetch FCC curriculum and package it into a proper format
- embed client can read, as well as our zim builder
Aside Node.JS and Python dependencies which are managed, other binary dependencies comes from Python zimscraperlib
See CONTRIBUTING.md.
- Node 20.x
- Python 3.11
You have to:
- build the
zimui
frontend which will be embededed inside the ZIM (and redo it every time you make modifications to thezimui
) - run the
scraper
to retrieve FCC curriculum and build the ZIM
Sample commands:
cd zimui
yarn install
yarn build
cd ../scraper
hatch run fcc2zim --language eng --course "regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects" --name "fcc_en_javascript" --title "freeCodeCamp Javascript" --description "FCC Javascript Courses"
Run from official version (published on GHCR.io) ; ZIM will be available in the output
sub-folder of current working directory.
docker run --rm -it -v $(pwd)/output:/output ghcr.io/openzim/freecodecamp:latest fcc2zim --language eng --course "regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects" --name "fcc_en_javascript" --title "freeCodeCamp Javascript" --description "FCC Javascript Courses"
Currently this scraper only supports challenge types 1, 4 and 5 (challenge types can be found in the markdown file describing the challenge). This means courses from javascript-algorithms-and-data-structures
, project-euler
, rosetta-code
and most of coding-interview-prep
curriculum (frontend projects are type 3 and are not working).
A list of courses is passed to the scraper as a comma seperated list of 'course slugs'.
When you pass a course with an unsupported challenge to the scraper, the ZIM will still create but an error message will be displayed instead of the challenge with wrong type.
You can find a list of course slugs in the freeCodeCamp curriculum folder
In docker example above, see the --course
argument : regular-expressions,basic-javascript,basic-data-structures,debugging,functional-programming,object-oriented-programming,basic-algorithm-scripting,intermediate-algorithm-scripting,javascript-algorithms-and-data-structures-projects