Open-Source Contribution


Overview of my contributions to freeCodeCamp

Type of contributionOriginal PostTranslated PostIssuePull Request
TranslationHTML Line Break – How to Break a Line with the HTML <br> TagInterruzione di riga in HTML – Come andare a capo con il tag <br> (Published)HTML Line Break – How to Break a Line with the HTML <br> Tag (Issue #308)X (Different process for translations)
TranslationGit List Branches – How to Show All Remote and Local Branch NamesElenco dei branch in Git – Come visualizzare tutti i nomi dei branch remoti e locali (Draft)Git List Branches – How to Show All Remote and Local Branch Names (Issue #290)X (Different process for translations)
PosteditingHow to Work with SQLite in Python – A Handbook for BeginnersCome Lavorare con SQLite in Python – Un Manuale per PrincipiantiHow to Work with SQLite in Python – A Handbook for Beginners (Issue #532)Come Lavorare con SQLite in Python – Un Manuale per Principianti (Issue #631)

Joining freeCodeCamp

The first step I took was to research how to contribute to the Italian translation project. I came across the official volunteer form (click here to view), which is intended for individuals who want to help translate freeCodeCamp’s educational content into different languages.

After reviewing the guidelines, I submitted the form to express my interest in contributing to the Italian translation, which marked the beginning of my involvement in the project.

FreeCodeCamp volunteer team form.

Once submitted, this will be the message displayed.

FreeCodeCamp’s message after submitting the volunteer team form.

Why freeCodeCamp?

I chose to contribute to the freeCodeCamp Italian translation project because the platform offers educational articles closely aligned with the programming languages I studied, particularly in the context of web development. This made the content both familiar and meaningful to me. For my contribution, I selected articles about HTML and working with Git, topics I had already practiced, and I also post-edited an article related to SQL. These choices allowed me to apply my technical knowledge while making valuable resources more accessible to Italian-speaking learners.


How translation contributions work

When I began contributing to the Italian translation of freeCodeCamp content, I referred to the official README file that outlines the different non-coding contribution opportunities. One of the most prominent ways to support the community is through localising educational materials for a global audience.

FreeCodeCamp currently supports two main localisation methods:

1. Traditional Translation Process
In this method, collaborators manually translate educational articles or handbooks from English into the target language. After selecting an unassigned article, the contributor translates it in full and submits it for peer review. This approach is ideal for fluent speakers who are comfortable working with technical terminology and who want to produce highly accurate, human-translated content from scratch.

2. Post-Editing AI-Translated Articles
In this newer workflow, some articles are first translated using AI. Contributors are then invited to post-edit these drafts. This means reviewing the AI-generated translation for grammatical correctness, coherence, and technical accuracy. The post-editing process also involves fixing common AI-related issues, such as:

  • Untranslated words or paragraphs
  • Missing or duplicated sections
  • Incorrect formatting

In both cases, the human collaborator plays a vital role. Especially in the AI-assisted workflow, it’s crucial to conduct a meticulous review to ensure the quality and clarity of the final content. AI is helpful but not perfect (more on this in the Conclusion section); technical language and contextual nuances often require a human touch to get right.

This flexible system allows contributors to choose the method that best matches their skills, confidence level, and time commitment. I found the structure helpful, as it allowed me to ease into the project by first working on a post-editing task before moving on to full manual translations.

Dario, the Italian translation coordinator, provided additional clarification about the translation workflow (see screenshot below). Generally, Crowdin is used for translations; however, for the Italian translation project, the team uses Ghost as the primary platform for contributing and reviewing articles. This choice aligns better with the Italian team’s workflow and publishing process.

A welcome email from the Italian translation coordinator after submitting the form.

Translation: “We’ve only recently started using GitHub for this purpose, so you’ll find just a few articles to choose from, but I’ll be adding more in the coming days. If there’s a specific article you’re interested in, we can add it.

I’m sending you an invite to Ghost, the CMS we use to publish articles. To translate an article on Ghost, create a new Post. Open the English article, copy the entire content (starting from below the cover image), paste it into the blank page on Ghost, and begin translating.

Once you’ve finished the translation, comment “/review” on the issue to let me know the article is ready for review and then for publication“.

Understanding the specific tools used for each language helped me adapt my approach and made me more aware of how open-source projects often customise their workflows based on team structure, contributor familiarity, and project needs.


Choosing an article

In order to contribute to the Italian translation of freeCodeCamp articles and handbooks, I used their GitHub project board (click here to view), which is organised by topic and translation progress. The topic selection was relevant to the content of the course I am taking, which is why I chose to contribute to freeCodeCamp in the first place.

FreeCodeCamp’s GitHub project board.

The board includes separate columns for different types of tasks. I focused on the "To Translate" column for articles that needed to be fully translated from English to Italian, and the "To Post-edit" column for articles that had already been machine-translated and required human review and editing. Articles in the post-editing column are usually labelled with "auto" to indicate that they were generated using AI.


Translation contributions

Once I found an article I wanted to work on, I opened its GitHub issue and left a comment with /translate. This command automatically assigned the article to me and moved it to the "In Translation" column, so others would know it was being worked on.

After that, I translated the article from English to Italian. When I finished, I followed the instructions in the issue to submit my work and get it reviewed.

  1. Translated article for HTML Line Break – How to Break a Line with the HTML <br> Tag in Ghost.
Beginning of the translated article in Ghost
End of the translated article in Ghost
FreeCodeCamp’s Issue page for HTML Line Break article.

2. Translated article for Git List Branches – How to Show All Remote and Local Branch Names in Ghost.

Beginning of the translated article in Ghost.
End of the translated article in Ghost.
FreeCodeCamp’s Issue page for Git List Branches article.

For Italian translations, freeCodeCamp uses Ghost, a content management system, to organise, edit, and review translation drafts. Unlike contributing directly through GitHub, which is more common for code-related contributions, Ghost provides a user-friendly, editorial environment better suited for managing written content. Contributors receive access to Ghost where they can either translate new articles or suggest edits to existing drafts. Once submitted, the drafts go through a review process by language moderators before being approved and published to the official freeCodeCamp Italian news page.

This workflow makes the translation process more accessible for contributors who may not be familiar with version control systems, while still maintaining quality through collaborative moderation.

Side-by-side view of English and Italian versions to ensure clarity and consistency during translation.
Side-by-side view of English and Italian versions to ensure clarity and consistency during translation.

Post-Editing contributions

As mentioned earlier, while full translations in the freeCodeCamp Italian project are submitted via Ghost, post-editing is carried out using GitHub. In this workflow, an article is first translated by an AI tool, and contributors are then responsible for reviewing and correcting the content to ensure clarity, accuracy, and consistency.

Initially, I assumed post-editing would be easier than doing a full manual translation. However, I quickly realised that this task can be equally challenging. The AI-generated translation often contained numerous errors: some English technical terms were wrongly translated into Italian, while others that should have been translated were left untouched. This made it essential to double-check each section carefully to preserve both technical accuracy and readability for an Italian-speaking audience.

A particularly striking issue occurred in the article I worked on: a large section(almost 100 lines, from line 1016 to 1106) was entirely skipped by the AI. Instead of translated content, an error comment was left in the file. I had to manually retrieve, translate, and format this entire portion, ensuring it aligned with the style and tone of the rest of the article.

This experience taught me that AI can assist, but not replace the careful eye of a human contributor, especially when dealing with technical documentation. Post-editing requires not just linguistic skill, but also an understanding of the subject matter and attention to detail.

Despite the challenges, contributing through post-editing was a valuable learning process. It gave me hands-on experience in maintaining the quality of open educational content and helped sharpen my technical translation and problem-solving skills in a collaborative, version-controlled environment.

Error message left by AI in the automatic Italian translation.

Translation: “Sorry, but I am unable to execute the automatic Italian translation for you.

This process helped me contribute to making freeCodeCamp’s content available in other languages.


Published translations

My translation of “HTML Line Break – How to Break a Line with the HTML <br> Tag was officially published on Monday, May 12th.

The issue was closed after publishing the translated article.

After the article went live (click here to view it), the corresponding GitHub issue was closed, and the task was moved to the “Published” column on the freeCodeCamp GitHub Project Board, marking it as complete.

Two of my other contributions are still in the review phase and are waiting to be approved before being published.

Post now available in Italian.

Conclusion

Contributing to the freeCodeCamp Italian translation project has been a rewarding experience, not only because it allowed me to apply my language skills to a real-world open-source initiative, but also because it gave me a deeper understanding of how collaborative communities function behind the scenes. What initially seemed like a straightforward translation task quickly grew into a meaningful learning opportunity that touched on accessibility, community values, and the importance of non-code contributions in tech.

Although my main role was to translate and review educational articles, I also unexpectedly contributed by identifying and reporting a technical issue. When I tried to assign a task to myself using the /translate command, the system failed to automatically assign it. I reached out to Dario, one of the maintainers at freeCodeCamp, to report the bug. He kindly acknowledged the issue and told me he would look into it. A few weeks later, he published my translated article, thanked me for my contribution, and confirmed that the command issue had been resolved (Figure below).

Message left by the Italian translator coordinator.

Translation: “Thank you for your contribution @filippopresti, I have just published it. And the issue with the /review and /translate commands should be resolved“.

This experience highlighted something important: in open-source communities, every contribution matters, whether it involves translating content, catching an error, offering feedback, or reporting a bug. Being involved in this project showed me that open-source is not just about writing code but also it’s about solving problems together, sharing knowledge, and helping others learn.

I’m proud to have played a small role in making high-quality educational resources more accessible to Italian speakers. And I’m even more inspired to continue contributing to open projects in the future, knowing that thoughtful participation (of any kind) can have a lasting impact.