Skip to content

Instantly share code, notes, and snippets.

@palashb01
Last active September 14, 2023 00:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save palashb01/15925bb27d5359f7c6042b4b9c9899c0 to your computer and use it in GitHub Desktop.
Save palashb01/15925bb27d5359f7c6042b4b9c9899c0 to your computer and use it in GitHub Desktop.
Google Summer of Code 2023 @zulip - Work Product


Google Summer of Code 2023 with Zulip - Work Product

Hey πŸ‘‹, Palash here. This is a summary of all the work I did for the Zulip chat application and my personal experiences as a part of the Google Summer of Code 2023.


πŸ“‹ Introduction

What is Zulip?

Zulip is an open-source chat application that combines the immediacy of real-time chat with an email threading model. With Zulip, you can always focus more on the important conversations rather than finding an important message in a mountain of messages.

Why Zulip? - Efficient communication with organized team chat.


πŸ“˜ Project Description



πŸ’» Contributions

Let's dive deeper into the work I did with the amazing Zulip community, but before that, there are a few terms I would be referring to, so let me explain them first.


πŸ“š What is Topics in Zulip?

But before understanding what topics are, let's first understand what streams are in Zulip.

What is Stream in Zulip?

A stream in Zulip is similar to a channel in Slack or any other IRC platform. Conversations are organized and filtered into these streams. Only those who have subscribed to a particular stream remain involved in the conversation. Does this sound confusing? Let me provide a better analogy.

Think back to when we used to study different subjects from various books. Each book had its unique content, independent of each other. These books were subdivided into topics. In the context of Zulip, think of each book as a stream, and the subdivided sections within them as topics..

Screenshot 2023-09-07 at 3 26 06 AM Screenshot 2023-09-07 at 3 28 08 AM

Let's take a close and concise look at what a topic is in Zulip.

Topics are unique to Zulip Screenshot 2023-09-07 at 3 29 11 AM
Organized Conversations Screenshot 2023-09-07 at 3 30 24 AM
let's take an example for better understanding Screenshot 2023-09-07 at 3 31 25 AM

Image credits: Zulip.com


πŸŽ‰ Merged Pull Requests

  • #26031: Settings_users: Migrate "Manage user" and "Manage bot" modal to full profile modal.

This PR migrates the functionality of the Manage User and Manage Bot modals into the user profile modal. As a result, there will no longer be a need for a separate modal to manage users. With this change, the user profile modal will become the comprehensive profile modal, used for all user-related actions. A separate tab is being added to the user profile modal, and its content will be displayed according to the organization's permissions.

  • #26183: User_profile: Add subscribe widget to user profile.

This PR introduces a new feature in the user profile, allowing admins, users, and bot owners to subscribe themselves and others to available streams directly through the dropdown menu in the user profile model, in accordance with the organization's permissions.

  • #26380: User_profile: Render the streams list dynamically.

This PR addresses one of the crucial issues related to live-updating the stream list in a user's profile. With this fix, now whenever subscribe or unsubscribe events occur, the stream list is live-updated in the user's profile. Previously, the stream list would only update when the user profile model was reopened.

  • #26483: Search: Add title to the search bar when in "sender:" narrow & rewrite is_common_narrow.

This PR introduces new changes for the sender: filter, giving it a special title, and also rewrites the is_common_narrow function along with its dependent functions. This addresses a long-standing issue where is_common_narrow had an inappropriate dependency on the can_mark_messages_read function. These changes ensure that the expectations and meanings of both functions remain independent and are not coupled together.

  • #25848: Upload_banner: Add a cancel button.

This PR introduces a cancel button to the upload banner, allowing users to cancel the upload of any file. Previously, this wasn't possible, and the only way to achieve it was to wait for the entire file to upload and then remove it from the compose box.

  • #25883: Message_feed: Improve edited/moved tooltip.

This PR enhances the tooltip for edited messages in the message feed. Now, the tooltip is rendered in accordance with the organization's settings, and the wording of the lines has been updated.

  • #26245: Message_feed: Remove the view edit history option from the three-dot menu & add shortcut.

This PR is a follow-up to the previous work, which removes the "View Edit History" option from the three-dot menu and introduces a shortcut key, Shift+H, to open the "View Edit History" dialog.

  • #26161: Message_feed: Fix edited notice to appear for disabled edit_history.

This PR addresses the issue where the "edited" notice in the message feed was not appearing when the edit history was disabled at the organization level. It ensures that the "edited" notice remains visible, as the display of the edit history dialog is dependent on the edit history option, while the "edited" notice tooltip should still be displayed regardless of the edit history setting.

  • #25786: Tippy: Add delay for recipient bar icons.

This PR resolves the issue where Tippy tooltips were left floating when the icons suddenly disappeared upon entering topics, based on the organization settings, and when references were removed.

  • #26654: User_profile: Sort the stream list on update and Prevent unwanted reordering.

This PR resolves the issue where the stream list in the user profile gets incorrectly reordered whenever a stream subscription event occurs.

  • #22903: Custom_profile_fields: Fix empty field choices issue of select field. (Co-Author)

I co-authored this PR to address the issue of empty field choices. With this update, when submitting empty or zero choices, the submit button is now disabled. This prevents the silent failure that used to occur previously.


πŸ” Opened Pull Requests During GSoC

Marked for integration Review:

  • #26396: Pm_list: Show empty conversations in left sidebar.

This PR introduces a new feature that displays empty private conversations in the left sidebar PM list. It also removes these conversations whenever the user navigates to a different view.

  • #26049: Stream_settings: Add not-subscribed tab to stream settings.

This PR introduces a new tab in the stream settings called not-subscribed. This tab displays a list of all the streams to which the user is not currently subscribed. It also provides the ability to subscribe to these streams. Additionally, it changes the redirects of some links to direct users to the not-subscribed tab.

  • #26101: Hotkey: Fix cmd+return to send message in preview mode also on mac.

This PR addresses the issue where the cmd+return keyboard shortcut was not functioning in preview mode on Mac to send messages.

Under Maintainer Review:

  • #26587: Drafts: Add a copy draft button.

This PR adds a dedicated icon to each row in the drafts section, allowing users to easily copy the message content. This enhancement provides users with greater functionality in the drafts modal.


πŸ” Opened Before GSoC but Worked During Coding Period

Marked for integration Review:

  • #25033: Topic_sidebar: Add tab switcher to filter topics by state.

This PR addresses one of the most crucial issues by implementing a tab switcher to filter topics by state. Now, users can filter the topics of a stream using the tab switcher, whether they want to see the resolved, unresolved, or all topics. This enhancement provides users with more flexibility to quickly navigate to the topics they want to view.

  • #23899: Deactivated_user: Change the empty PM / group PM view text and compose_box.

This PR implements one feature and one fix. The feature involves changing the state of the empty private (and group) message narrow banner, text, and compose box to indicate when someone in the private message conversation is deactivated. The fix addresses an issue where the compose error state for deactivated users was not clearing when the recipient was changed. With this change, the compose box no longer remains open in the case of deactivated users, resolving the issue.

  • #24043: Message_feed: Add Button quote and reply to the message bar.

This PR introduces a new button to the message bar, eliminating the need for users to quote a message by selecting the option from the three-dot menu. Instead, a dedicated button is now included in the message bar. Clicking this button will quote the message, simplifying the process and making it much easier for users to quote messages.

Completed but ongoing discussions and work in progress:

This PR converts the plain text of user names into user pills in the organization settings tables, but due to the ongoing discussion on CZO, I am in the process of migrating all the user pills in the app to a single user pill to improve the consistency of user pills.

  • #24671: organization_settings: Add dropdown to filter users list by role.

This PR adds a dropdown to filter the list of users in the organization settings user table by role. Now, users can filter the list of users by role. However, it's worth mentioning that ongoing discussions are in progress, and I am currently in the process of refactoring the list_widget.js to allow this filter to be applied universally across all tables in the app.


πŸ’¬ Important Discussion Threads


✨Learning & Personal Experience with Zulip

As the Google Summer of Code comes to an end, and I reflect on my one-year journey of contributions, I see a miniature version of myself trying to learn and get into such a big organization, fearing to start something new and big. But fast-forward to today, I have learned and grown a lot as a developer and as a person. I will always be indebted to Zulip for helping me in this journey and for being such a great organization and developer's community. The documentation, people, mentors, everyone is so helpful and supportive that I always hoped to be in such an organization.

I learned so many things during this journey, from learning how to write industry-level code to writing good commit messages and using the git-rebase workflow to keep the PRs in good shape. But after all this, Zulip helped me learn the code review process and collaboration.

I had a great time working with the Zulip community, and I am really grateful to my mentors, Yogesh Sirsat and Priyam Seth, and all the organization members, especially Tim Abbott, Alya Abbott, and Lauryn Menard, for helping me throughout this journey.

Thank you, Zulip, for making this summer the most memorable journey of learning and growth. πŸ’™

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