Google Summer of Code 2021

Google Summer of Code 2020

Update July 11, 2021

Due to sudden departure of an active mentor, we are in jeopardy of losing two key projects for the year. Thankfully two heroines from Rocket.Chat's own Agile Planning and UI/UX team came forward and, together with mentors from our front-end team, saved the day for these projects. The new mentors assignments are now reflected on these two projects.

Student

Project

Mentors

Ghulam Ghous

Omnichannel Project: Live Chat Widget - Accessible ModeL

Leticia Peuser, Tasso Evangelista

Dhruv Jain

Introduce Audio calls to LiveChat

Murtaza Patrawala, Gabriel Henriquesz

The unsung heroine here is Aline Nunes, our senior Agilist, without whose help the last minute mentors re-assignment would not have been possible.

Update June 25th 2021

Community bonding period is now officially over. Coding has officially began on all projects. Students are working towards the July 12 first evaluations.

To accommodate another highly qualified student, and keen interests from mentors, our long time community partner Credit Suisse APAC has sponsored an additional project. This brings our total number of projects this season to 15.

Student

Project

Mentors

Priya Bihani

Image Manipulation: Editing / Cropping on Upload

Gabriel Henriques, Tasso Evangelista

Update May 20th 2021

2021 is an incredible year for GSoC at Rocket.Chat. Thanks to the enthusiastic early support from students and community (mentors), Google has graciously granted us TWELVE project slots. The official listing of students selected for these 12 projects is now published. We are delighted to welcome these 12 active community members to work with us during the GSoC 2021 season:

Student

Project

Mentors

Ghulam Ghous

Omnichannel Project: Live Chat Widget - Accessible Mode

Leticia Peuser

Kartik Gupta

Speech-to-Text

Marcelo Schmidt

Darshil Patel

Introducing Ephemeral Channels in Rocket.Chat

Kevin Aleman

Yash Rajpal

App: Bad-Words Filter

Douglas Guebert

Dhruv Jain

Introduce Audio calls to LiveChat

Murtaza Patrawala

Anant Bhasin

E2E Testing for Android in Rocket.Chat.ReactNative

Diego Mello

Rahul Halder

Voice Channels

Douglas Fabris

Aditya Mitra

Out Of Office Settings with an Assigning Deputy

Amol Babu

Jean Staquet

Task Channels

Pierre Lehnen

Adithya Vardhan

Channels Discovery

Martin Schoeler

Rohan Lekhwani

Poll App Mega Extensions

Ramkumar KB

Allan Juan

Language Power Tools

Rodrigo Nascimento

Even with the generous slot assignment this year, it is still a very difficult decision for many mentors to select from the large number of highly qualified students (we were able to engage the students early on in the GSoC cycle with open source contributions via the GSoC Leaderboard ; with 219 participating students, 61 students with contributions, 21 code committers, working on 196 Merged PRs, 231 Open PRs, and 290 Issues so far). Several high calibre open source contributors were left out and not selected for GSoC; to accommodate these exceptional students, Rocket.Chat has arranged to sponsor an additional TWO projects this season.

Student

Sponsored Project

Sumukha Hegde

New statuses for user actions/events (Typing 2.0)

Deepak Agarwal

Introduce Video calls to LiveChat

All verified students are now interacting with their mentors and the greater Rocket.Chat community during the community bonding phase of the 2021 GSoC season.

Update April 15th 2021

We are having a phenomenal Google Summer of Code season this year, participation from students is at an all-time-high. The enthusiasm and aptitude of student applicants have also improved over prior years. In our 24 x 7 GSoC 2021 channel - we have over 473 mentors, alumni and students collaborating actively on GSoC projects. On our GSoC leaderboard, we are tracking 219 students actively contributing code to the Rocket.Chat open source ecosystem. As of today, we have welcomed 17 new code committers to our projects. With a total of 138 merged PRs, 182 open PRs, and 246 issues raised by GSoC 2021 students so far. To rally student spirit and assist them in creating their proposal, we organized an Alumni Re-union Summit where we invited former Rocket.Chat GSoC Alumni from all previous years to share tips with this year's GSoC students. More than 20 students attended throughout the day to enjoy the talks from 10 alumni and mentors. Highlight talks included one from a Facebook engineer and a Brazilian open source movement champion. As of student application deadline on April 13th, Rocket.Chat has received a total of 98 proposals from interested students. Mentors are now busy reviewing the proposals and continuing to keep the students engaged on contributing to the Rocket.Chat open source ecosystem.

How to apply

Application for GSoC 2021 is now closed.

Accepted student projects will be announced on May 17th , 2021

Please see the Official GSoC 2021 schedule for more timeline details. Students continue to interact with mentors actively on our 24 x 7 GSoC 2021 community channel:

https://open.rocket.chat/channel/gsoc2021

About GSoC 2021

For project ideas, check out our growing list of ideas for some inspiration.

Meet our global community of 470+ mentors and students for GSoC 2021 and get some real-time help on the next steps. Please visit our 24 x 7 community server channel:

https://open.rocket.chat/channel/gsoc2021

For offline discussions, we have a discussion forum:

https://forums.rocket.chat/t/about-the-gsoc2021-category/10335

If you have ideas and proposals that are not on our ideas list, or if a mentor is not available, please email to:

[email protected]

Interested students are also encouraged to interact with our core team and contributor community on GitHub:

https://github.com/RocketChat/Rocket.Chat

https://github.com/RocketChat/Rocket.Chat.ReactNative

https://github.com/RocketChat/Rocket.Chat.Electron

Project Ideas

Out of office settings with assigning deputy

  • Mentors: @amol.babu, @asrar

  • Description: The project's focus is to solve a very common but problem relating to Out of office functionality in Chat.

    The goal:

    • Any user can create out-of-office settings in Rocket.Chat by giving from and to date with the auto-reply message.

    • User should be able to select the channels which would receive the out of office notification.

    • The out-of-office notification should only be sent once for the first incoming message.

    • The user can also define his deputy from the list of eligible users.

    • At the time of out of office, the selected deputy will be automatically added to channel and can reply on behalf of main user.

    • After the out-of-office time ends, the deputy should be auto removed from the channel.

  • Desirable Skills: Familiarity with Rocket.Chat, nodeJS, Experience with ReactJS. Must have database skills, ideally MongoDB.

Ephemeral messages

  • Mentors: @kevin.aleman

  • Description: This project aims to create a channel in which the messages sent will vanish after a configured amount of time. This would be a room (channel) setting where you can define how long the messages will last. Messages from here cannot be retrieved after its deletion, and the deletion cannot be deactivated, just postponed.

  • Desirable skills: Familiarity with JS Full Stack web app development. Experience with MongoDB and PM2 are ideal.

Voice Channels

  • Description: The ability to create voice channels would allow users to quickly enter and leave pre-existing voice calls from Rocket.Chat's own UI, enabling a more practical usage of audio features for team collaboration. This project would add the UI elements and integrate them with an established audio platform to handle the calls.

  • Desirable Skills: Familiarity with nodeJS full-stack web app development.

Decentralized Storage Integration

  • Description: The goal of this project is to add new decentralized P2P-based storage providers within Rocket.Chat. Decentralized solutions not only provide more security but are also more cost-effective. Some examples of decentralized solutions include Filecoin, Saicoin, Storj, etc. Via this project, the files uploaded on Rocket.Chat should be stored on the decentralized network, and the uploaded files should be accessible within Rocket.Chat.

  • Desirable Skills: Familiarity with nodeJS full-stack web app development. Experience with Rocket.Chat codebase and/or with any of the decentralized solution providers is ideal.

Omnichannel: Help Center

  • Mentors: @murtaza.patrawala

  • Description: This project aims to add a Help Center within the Omnichannel Domain of Rocket.Chat. This will allow the creation of content that will answer people’s simple questions faster. This project's focus would be to provide an interface to create content (similar to how we can create an article on a Blogging platform like Medium) and then allow users/agents and customers to search within these contents, quickly answering their questions. This project will add a self-serve support layer that will help with scaling by automatically resolving repetitive questions with the help of such articles and guides, leading to faster answers for the customers and fewer questions to users/agents.

  • Desirable Skills: Familiarity with nodeJS full stack web app development. Experience with ReactJS is ideal.

Apps-Engine E2E Testing

Poll App Mega Extensions

  • Description: The poll app already allows anyone to create engaging rich interaction polls within any chat room. This project aims to expand its scope and capabilities hugely: making it a tool for enhancing participant's engagement with interactive quizzes/trivia / live-polls.

    Some initial ideas include:

    • Better bar-graph visualization for the responses (with a switch for anonymous responses - so 3 types: Open / Confidential / Mixed)

    • Ability to add user options in the poll response and show the response of those responses in a visual way (e.g., word-cloud)

    • Ability to create different types of polls (e.g., 1-to-5, Agree/Disagree, Overrated/Underrated)

    • Ability to add emoticons on the response options

    • Ability to create /poll live or /live-poll feature - it has 2 parts (prepare a set of questions beforehand and retrieve it just before the live poll starts. During the live-poll, a countdown timer for each question is shown, and upon completion, the responses are shown visually) a.k.a. multi-question version of the single poll feature

    • (Stretch Goal) Ability to download the live-poll response, once the poll is over

    • Enhance UIKit if needed to meet the above goals

  • Desirable Skills: The sky is not even the limit for this project. We will need a hot-shot all round challenge-loving student already familiar with JavaScript, TypeScript, React, current poll-app codebase and Rocket.Chat + Fuselage codebase.

Language Power Tools

  • Desirable Skills: JavaScript / TypeScript

  • Description: Create internal scripts to extract translation strings from the source code and give some options:

    • Check if all strings are translated in the target languages (en by default)

    • List strings present in the target language that are not in the code anymore

    • Option to render a completion chart for all languages

    • Option to remove strings from all languages based on a target one

    • Option to import missing strings into the target language to easily add translations

    • Integrate the script on CI to block PR from merge if there are new strings without translations

Introduce Video and Audio calls to LiveChat

  • Description: The outcome expected from this project is to support Video and Audio calls in one of the native Omnichannel entry points called LiveChat. LiveChat is a small and lightweight application designed to provide B2C communication between Agents and website visitors. It is developed with PreactJS, which means that any ReactJS developer will be able to implement the new features using WebRTC framework.

  • Desirable Skills: Experience with JavaScript, ReactJS and WebRTC, and WebSocket API.

App: Speech-to-Text

  • Mentors: @marcelo.schmidt

  • Description: This project aims to save a text version of audio in the file metadata. This should be done server-side upon receiving the audio.

  • Desirable Skills: Familiarity with JavaScript and TypeScript. Knowledge in how to build Rocket.Chat Apps is a plus.

Channel Discovery

  • Mentors: @martin.schoeler

  • Description: The idea is to add a page where you can discover new channels. This will allow users to find channels based on: Total number of users, number of messages, search for specific topics, if the channel has been trending lately, and any more ideas we can think of. The whole idea of this project is to improve communities using Rocket.Chat and add a sprinkle of social aspects to Rocket.Chat.

  • Desirable Skills: Familiarity with JavaScript, React, and TypeScript. Knowledge in how to use Rocket.Chat fuselage is a plus.

Task Channels

  • Description: This project aims to create a new kind of channel where instead of sending messages, users would be able to create task cards with several custom fields. Those tasks would then work as a thread header, allowing comments in the format of a thread. The basic additional information for a task message would be an assigned user and a status. The channel header should also list options to filter the tasks by those fields.

  • Desirable Skills: Familiarity with nodeJS full stack web app development. Experience with ReactJS is ideal.

Image Manipulation: Editing/Cropping on Upload

  • Mentors: @gabriel.henriques

  • Description: This project aims to improve the Image upload feature, allowing users to crop images before sending it to a channel. Adding text and the possibility to draw on images could be implemented too.

  • Desirable Skills: Experience with Javascript and React + Hooks. TypeScript is a plus.

App: Bad-Words Filter

  • Description: Rocket.Chat currently uses a third-party package to filter bad words. This poses a few problems, such as having to update the package every so often, having to check which words have been added or excluded in newer versions, and deciding if we would like to keep blocking or allowing words. This project is for building an App that can be enabled in our Marketplace to filter out a list of default bad words but will allow admins to add or delete words from that list. The app will need to cover the following requirements:

    • Create a UI for managing the App settings

    • Load a list of words from a URL

    • Add/Remove words from a list

    • Add/Remove channels where the bad words filtering is enabled (with a toggle for "all channels")

    • Provide statistics on blocked words and offending users

    • Automatically deactivate users that go above a certain threshold

  • Desirable Skills: Familiarity with JavaScript and TypeScript. Knowledge in how to build Rocket.Chat Apps is a plus.

Houston Improvements - Rocket.Chat release/changelog generator

  • Desirable Skills: TypeScript, Git, Shell

  • Description: Houston is the CLI tooling we use to release new versions of Rocket.Chat and generate our changelogs from merged pull requests. We want to:

    • Rewrite the tooling in TypeScript

    • Accept a new format of PR titles (conventional changelog)

    • Add a validation system for PRs titles via GitHub Actions

    • Add tooling to preview the generated changelog for the PR

    • Add new top level of separation for product type (like Enterprise and Community) based on labels

    • Support dependent repositories to import their changelogs, for example, import the changelogs of apps engine

Add a bundler to the Apps-Compiler

  • Mentors: @douglas.gubert

  • Description: Currently, the Apps-Compiler package uses the bare TypeScript compiler to process apps' code and generate the JS version. This has some limitations, e.g. we can't "simply" bundle the whole app in a single file, we can't bundle npm packages, and so on. By changing this compiler into a proper bundler (Webpack, Rollup, etc.), we would have access to a richer ecosystem of tooling to handle the compilation process of Rocket.Chat Apps.

  • Desirable Skills: JS/TS, familiarity with bundlers (using them, not necessarily writing one) would be interesting

Stop notifications and Notifications schedule

  • Desirable Skills: JavaScript/TypeScript, React, React Native,, Rocket.Chat codebase

  • Description: This feature consists of two new options for the end-users:

    • Stop Notifications: A list of options to stop notifications for a certain time (30min, 1h, 2h, 24h, custom date/hour).

    • Notifications Schedule: Option to configure (in user's settings) the availability time where notifications will be sent:

      • With the option to configure for every day from X time to Y time

      • With the option to configure for weekdays from X time to Y time

      • With the option to configure X and Y times for each day of the week manually

      • The same settings should be available for the workspace admin to configure a default value for all users

      • The implementation should cover the web and mobile applications

New statuses for user actions/events (Typing 2.0)

  • Desirable Skills: JavaScript/TypeScript, React, React Native,, Rocket.Chat codebase

  • Description: Improve the current `Typing` functionality to support, on web and mobile applications, two new things:

    • New properties to allow define new actions like `recording` or `uploading`, changing the current implementations to support and send those 2 new events and improve the end-user experience

    • Support specifies a context for the typing, allowing it to be shown inside a thread when users are typing in that context instead of in the main room.

App: Global Translation

  • Mentors: @marcelo.schmidt

  • Description: Rocket.Chat currently uses a package to provide message translations. This project aims to build that functionality on an app, thus reducing the codebase of Rocket.Chat and allowing for easier configuration.

  • Desirable Skills: Familiarity with JavaScript and TypeScript. Knowledge in how to build Rocket.Chat Apps is a plus.

Community Collaboration Platform: Improvements

  • Description: This is a chat and networking platform that helps to manage, grow and connect communities through messaging, content and discovery. This platform's aim to is to provide an easier way to collaborate over any Github, Gitlab, and other repository hosting services. The focus will be to add new features like User Management, Administration Module, etc. - also improve the current features, which add more advantages and provide a frictionless experience to all the fellow developers.

  • Desirable Skills: Familiarity with nodeJS full stack web app development. Experience with ReactJS and ExpressJS is ideal.

Community Collaboration Platform: Discourse integration

  • Description: This is a chat and networking platform that helps manage, grow and connect communities through messaging, content and discovery. The platform aims to provide an easier way to build a massive community collaborating over any Github, Gitlab, and other repository hosting services. The focus of this project will be to add tightly integrated support for Discourse, the leading open-source forum (civilized discussion) platform.

  • Desirable Skills: Familiarity with nodeJS full stack web app development, and Ruby on Rails. Experience with Discourse and Discourse API programming a big plus.

UiKit Playground

  • Description: Develop an application/playground that allows developers to test UiKit Blocks and Interactions. Should allow developers to generate code used by Rocket.Chat apps and edit the content to preview the result

  • Desirable Skills: JavaScript/TypeScript

Omnichannel: Livechat Widget Accessible Mode

  • Mentors: @rafaelferreira

  • Desirable Skills: Accessibility, React, SCSS

  • Description: Omnichannel users, including users with visual disabilities, must be able to perceive content at the Livechat widget. The main idea here is to give some options to Livechat widget users to active "Accessible mode", which means:

    • High contrast colors.

    • Icons accompanying text.

    • Bigger highlight over selected text or cursor active/hover using the "tab" key.

    • Show a better solution when an Agent is typing.

    • Etc

Matrix Interoperability: migrating to native support

  • Desirable Skills: Familiarity with matrix.org protocol; skilled in rust, golang, and TypeScript development

  • Description: Explore and improve existing Rocket.Chat to Matrix.org bridge(s) Investigate the current state of development in dendrite and hydrogen. Start the work on migrating to native support of the matrix protocols.

Big Blue Button: replace embedded chat with Rocket.Chat

  • Desirable Skills: Familiarity with Big Blue Button; skilled in JavaScript, nodeJS and Meteor development

  • Description: The embedded chat in Big Blue Button is already a Meteor based chat with a similar structure to Rocket.Chat. However, other components in Big Blue Button also depend on the same Meteor stack working against the same MongoDB instance for proper operations. This project aims to create the ability to integrate an existing Rocket.Chat server into Big Blue Button, replacing the existing embedded chat component.

Channel's Calendar View

  • Mentors: @pierre.lehnen

  • Desirable Skills: Familiarity with nodeJS full stack web app development. Experience with ReactJS is ideal.

  • Description: Create a new option to see your activity in a channel in the format of a calendar, listing any action you had on each day. The listed actions would be things like: "joined discussion X", "created discussion Y", "sent messages on thread Z". This will help users find messages that they know they read/sent on a specific day but don't remember where.