Skip to content

Instantly share code, notes, and snippets.

@HemantUmre12
Last active September 25, 2023 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HemantUmre12/32d5cec77ee681011c824fe37d678d64 to your computer and use it in GitHub Desktop.
Save HemantUmre12/32d5cec77ee681011c824fe37d678d64 to your computer and use it in GitHub Desktop.
GSoC'23 @zulip - Final Product Report

GSoC logo

Google Summer of Code'23 with Zulip - Work Product

Zulip combines the immediacy of real-time chat with an email threading model. With Zulip, you can catch up on important conversations while ignoring irrelevant ones.

Why Zulip? - Efficient communication with organized team chat.

πŸ”— Quick Links

πŸš€ Final Work Product Overview:

My GSoC proposal was primarily centered on improving Zulip's permissions with user groups. However, ongoing work in the same area by others made it impossible to address other issues related to user groups, as everything builds on top of each other. Consequently, during the summer, I redirected my efforts to address the priorities for the Zulip server 8.0 release. The issues I worked on spanned various areas within the Zulip codebase, including UI redesign, organizational settings, onboarding, the search bar, and more. Below, I provide details on each issue I worked on, the current status of the work, and any future steps required to integrate them.

πŸ“ Note

  • All the mentioned work is listed in chronological order based on the dates when the PRs were opened.
  • * represents work that started before GSoC and continued during the community bonding period.
  • ** represents work that started before GSoC and continued during the official coding period.

⭐ Add an Option to Make a Stream Default for New Users in Stream Creation and Editing UIs **

When new users join a Zulip organization, they are automatically subscribed to a default set of streams. Previously, users had to navigate to a different panel to add a stream as a default. There was no indication in stream settings to show whether a stream was part of the default streams list. I worked on adding a checkbox in the stream creation and editing UI to allow users to add or remove a stream as a default.

πŸ› Issue: #24048
βš’οΈ PR: #24216

πŸ“Š Status: Merged

⭐ Add Settings for Restricting Direct Messages *

Some organizations need to restrict private messages between users. So, we intended to introduced two new settings to control private messaging between users:

  • All direct message and group direct messages must include as sender or recipient at least one member of
  • Who can start a direct message thread

Before implementing this, some preparatory work was necessary as it was the first realm-based user group settings.

πŸ› Issue: #24467
βš’οΈ PR: #24762
πŸ’¬ Discussion: API design

πŸ“Š Status: Most of the preparatory work required for adding a realm-level group setting was completed with #25884. Now that #25884 is merged, as of writing this, I have resumed work on this and am close to opening a new PR for the feature.

⭐ Allow Admin to Set Organization Language at Creation Time

Added a dropdown called "Organization language" on the "Create a new Zulip organization" form (/new page). This allows messages from the Welcome Bot and introductory messages in streams to be internationalized.

πŸ› Issue: #25729
βš’οΈ PR: #26102
πŸ’¬ Discussion: Unicode normalization

πŸ“Š Status: Work on this is nearly complete, waiting for the final review and requiring some feedback on a couple of points discussed in the PR.

⭐ Improve Design of Empty List View

Various lists and tables in Zulip were using the ::after pseudo-element to display a message indicating that the list is empty. With this PR, we redesigned the UI and added functionality in list_widget.js to render a message when the list is empty, eliminating the need for the ::after pseudo-element for non-decorative content.

πŸ› Issue: #23072
βš’οΈ PR: #26196
πŸ’¬ Discussion: Design

πŸ“Š Status: Awaiting integration review.

⭐ Fix Exception When Exiting "More Topics" After Losing Access to a Stream

πŸ› Issue: #25670
βš’οΈ PR: #26210

πŸ“Š Status: Merged

⭐ Show User Pills in Search Typeahead Dropdown

Currently, users in the search dropdown are displayed as pills before they are selected. However, if the search continues, the already-selected users are shown as email addresses instead of user pills Screenshot 2023-07-26 191427

With this PR, our goal is to consistently display users in the dropdown as user pills, even after the user has been selected. Screenshot 2023-07-26 191725

πŸ› Issue: #23365
βš’οΈ PR: #26360

πŸ“Š Status: The logic and implementation have been figured out. However, the area is undergoing a redesign with #24345, so further work is pending until the redesign is merged.

⭐ Make jitsi_server_url an Organization-Level Setting

Zulip integrates with Jitsi Meet, a fully-encrypted, 100% open-source video conferencing solution. I worked on adding support for a custom Jitsi Meet server URL that organizations can use. Previously, organizations could only use the default server level hardcoded URL.

πŸ› Issue: #17914
βš’οΈ PR: #26399
πŸ’¬ Discussion: API design

πŸ“Š Status: Merged

⭐ Migrate from Spectrum-colorpicker to HTML5 <input type="color"/>

Zulip currently uses Spectrum-colorpicker, a third-party dependency, to offer a color picker. We are planning to migrate from Spectrum-colorpicker, which is no longer maintained, to the native HTML5 <input type="color"/>, supported by most browsers.

πŸ› Issue: #14961
βš’οΈ PR: #26637
πŸ’¬ Discussion: Design

πŸ“Š Status: Design has been finalized, with ongoing discussions on minor points. The coding part is also completed and will require a few rounds of review before integration.

⭐ Notify User When Messages in Unsubscribed Streams Are Not Marked as Unread

Zulip has an invariant that all unread messages must be in streams to which the user is subscribed. Therefore, with this PR, we are working towards notifying users when a message from a stream to which they are not subscribed is skipped while marking messages as unread in an interleaved view.

πŸ› Issue: #23470
βš’οΈ PR: #26634
πŸ’¬ Discussions: UI Design, API Design, Stream/Message filtering

πŸ“Š Status: Most of the work is completed. Currently, we are in the process of figuring out how to filter affected messages and stream IDs before returning them from the API.

βœ… Pull Request Reviewed

  • Improve UI of deactivated and reactivated users #26147
  • Make stream name in stream settings panel a link #25212
  • Warn when archiving a notification stream #26111
  • Add a new setting Who can create multiuse invite link #25884

🌟 Challenges & Learning

This journey presented its fair share of challenges and provided numerous learning opportunities. The issues I tackled included multiple areas of the codebase, making it somewhat more challenging. A basic understanding of each area was required before diving into the actual tasks. However, this became achievable thanks to a well-structured codebase, comprehensive testing, and excellent documentation.

Throughout my GSoC journey, I had the chance to gain insights into how different components of a large codebase collaborate to deliver a seamless and efficient solution. Starting with a basic knowledge of HTML, CSS, JavaScript, and Git when I first began contributing to Zulip, I gradually progressed to contributing to various components within this extensive codebase while continually acquiring new skills. πŸš€

πŸ™Œ Acknowledgment

I'd like to thank Google for arranging this amazing program that introduces students to open-source communities.

A huge thanks to the core Zulip team and the entire Zulip community for being such an incredible group of people, always ready to provide assistance whenever needed and for fostering a collaborative and welcoming environment.

Finally, a special thanks to my mentors, Sahil Batra and Purushottam Tiwari, for their invaluable time and incredible support throughout the program.

πŸŒ… Post GSoC

I have multiple open PRs which I will continue to work on after GSoC. Beyond that, I will strive to be an active member and contributor to this amazing community.

πŸ“« Connect with me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment