❗️ The README file is auto-generated on every
pushand/ormerge, so please do not edit it. Changes related to resources should happen within the/resourcesfolder.
Everyone is welcome to collaborate to this project, but please take into consideration the following:
- resources should align with the purpose of the project
- resources shouldn't be a duplicate; a text search on the README file should be enough to find this answer
- the list of resources is written in JavaScript; if you need assistance on this matter, please open an issue with the resource's information
- make sure to check all items listed on the pull request template before submitting your contribution
- currently, there is no fixed schedule for when the website will be synchronized with this repository, though we strive to keep them as synchronized as possible
- resources are organized alphabetically in separate files in the
resourcesfolder; use the resourcenameproperty to determine which file it belongs to - within the file, keep the alphabetical order, again based on the resource
nameproperty
Each resource belongs to an object, as such:
// File: resources/f.js
{
name: 'freeCodeCamp',
description:
'Learn to code at home. Build projects. Earn certifications. Since 2014, more than 40,000 freeCodeCamp.org graduates have gotten jobs at tech companies including Google, Apple, Amazon, and Microsoft.',
categories: [programming.learn, programming.codeChallenges],
links: {
[website]: 'https://www.freecodecamp.org',
[youtube]: 'https://www.youtube.com/c/freecodecamp',
},
icon: 'https://www.freecodecamp.org/news/favicon.png', // Optional, but good for the README file
keywords: ['html', 'css', 'javascript', 'development'], // Optional, but useful for the search feature on the website
},Observe that:
name,descriptionandiconare strings, where:nameanddescriptionshould not include line breaks(\n)nor the pipe symbol(|)iconshould be a URL
categoriesis an array, meaning the resource can belong to multiple categories; its values (e.g.programming.learn) should be used fromconstants/categories.js, as this ensures organization and avoids misspellingslinksis an object, where multiple platforms can be added; again, its key properties (e.g.[youtube]) should be used fromconstants/links.jskeywordsis an array of strings, which also should not include line breaks(\n)nor the pipe symbol(|)iconandkeywordsare the only optional properties, all others are required, withcategoriesandlinkscontaining at least one value- the
descriptionproperty can be custom or grabbed from the resource's metadata included in the<head>tag of the website's HTML document- you can use https://metatags.io to easily copy the description
- the
iconproperty can also be grabbed from the resource's metadata included in the<head>tag or by doing the following:- you can use https://favicongrabber.com to easily copy the image's url; OBS: it often fails, so just try again until it works
If you find that an existing resource could benefit from some editing, feel free to make modifications.
Renaming a category or changing the tree structure should happen as infrequently as possible, although it is allowed if the current structure can be improved.
Opening a new category is fine, as long as there isn't another category that could serve the same purpose.
As of now, the "Public APIs" section is powered by the Public APIs project, so any additions to this section should be done to their repository.
Contributions not related to adding resources are also welcome, but please open an issue explaining the changes you have in mind before making a pull request.
This project relies on Prettier and ESLint for code formatting and error/standards checking, so please ensure you have both installed globally or run npm install in order to install them in the project directory.
This repository uses a GitHub action to automatically update README.md and db (which serves our API), so no action is required from you.
The resources lists are created in JavaScript, and if you're unable to make a contribution for this or any other reason, feel free to open an issue explaining your situation, so another developer can help you get your resource in the lists.