Skip to content

Instantly share code, notes, and snippets.

@sanchi-t
Created September 19, 2024 09:00
Show Gist options
  • Select an option

  • Save sanchi-t/8bb78ed56eb7540dd825e4ffd7a3620c to your computer and use it in GitHub Desktop.

Select an option

Save sanchi-t/8bb78ed56eb7540dd825e4ffd7a3620c to your computer and use it in GitHub Desktop.

Google Summer of Code 2024 with Zulip

This document 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 2024.

Introduction

During this Summer of Code, I had the opportunity to work on Zulip, an open-source team collaboration application known for its organized, topic-based threading. The Zulip community is incredibly helpful and active, which made contributing an even more enjoyable and fulfilling experience.

Find here my working timeline of GSoC coding period. Zulip > GSoC > Sanchit

Project Overview

Zulip has a wide range of features and issues that require attention. My GSoC project aimed to address various important challenges to significantly contribute to Zulip's development. Throughout the coding period, I focused on integrating essential feature requests and worked on "completion candidate" pull requests (PRs)โ€”those that were partially finished or left incomplete by previous contributors.

Merged Pull Requests

  • #28823: User_profile: Update modal to show confirmation feedback.

This PR enhances the user profile modal to display confirmation feedback when a user edits a profile field and clicks "Save Changes." Previously, the modal would close automatically, leaving users uncertain if their changes were applied. Now, users receive clear feedback, allowing them to manually close the modal once they've verified the updates.

  • #28686: Invite: Replace Checkboxes List with Stream Pills in Invite Users Modal.

This PR replaces the old list of checkboxes used for stream selection in the "Invite Users" modal with an input field that includes typeahead and stream pills. This update makes the selection process simpler and more user-friendly. The added typeahead suggestions and pill features further improve the user experience, making it easier and faster to pick streams.

  • #30580: Invite: Improve channels typeahead on invite modal.

A follow-up to replacing checkboxes with input pills, this PR improves the typeahead feature in the invite modal. Now, it displays 12 options instead of 5 and sorts channels alphabetically, ignoring whether they are pinned or related to the user's personal preferences.

  • #30578: Invite: Improve invitation modal stream pills backspace interaction.

when users modified the stream pills in the user invitation modal by pressing backspace to delete one, the typeahead menu appeared to suggest adding another pill, which prevented a second backspace from working. To address this, we avoided showing the "empty input" typeahead when the empty input resulted from deleting a pill with backspace. This PR ensured that the typeahead menu did not pop up each time a pill was deleted.

  • #30576: Test: Remove the requirement to mock templates.

This PR removes the necessity of using mock_template. If the template was not mocked or was being rendered as a partial, the actual implementation is now used, simplifying the testing process.

  • #30441: Settings: Improve visibility of "Enter Sends Message" setting.

This PR addresses user feedback by duplicating the "Enter Sends Message" setting in the "Preferences" menu in Settings under the "General" section. The aim was to make this configuration easier to find and use, ensuring consistency across platforms. For Mac users, the label uses "Return" instead of "Enter" to match the terminology on Mac keyboards.


๐Ÿ” Opened Pull Requests During GSoC

Under Review:

  • #30315: Streams: Prerequisite PR for #28478 (Management of names of archived streams).

This PR addresses issues with stream deactivation logic, ensuring that archived streams are properly restricted. It prevents users from incorrectly accessing archived streams or messages. Additionally, it no longer marks the stream as private or removes all subscribers from the stream, which was the previous behavior.

  • #31544: Css: Fix dark theme styling for kbd element.

This PR fixes a styling issue where the dark theme CSS was not applied to <kbd> elements in the #message-formatting and #keyboard-shortcuts sections.

  • #31535: Message: Notify user when messages in unsubscribed streams are not marked as unread.

This PR enhances user feedback by notifying users when the "Mark as unread from here" action fails to mark messages in unsubscribed streams as unread. The API for updating message flags was updated to reflect this behavior, ensuring clarity for users. Additionally, it clarifies that message flags, such as read/unread status, are not maintained for messages in unsubscribed streams.


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

Under Review:

  • #28478: Streans: Management of names of archived streams.

This PR makes important changes to how stream archiving works. Archived streams are no longer renamed or given a prefix; instead, they are now included in the client data and the list of unsubscribed streams. To make things clearer, archived streams are hidden from the settings menu and are labeled with "(archived)" for better visibility. The APIs /streams/{stream_id} and /events now include an is_archived property, and new options like exclude_archived for /streams are added to improve stream management. Additionally, a new test for stream deactivation has been implemented, and users with the right permissions can now rename archived streams when creating a new stream with the same name.

  • #29520: Streams: Create "support" stream type with topic-specific permissions

This PR introduces private support-type streams, allowing only designated user groups to access specific topics. A new stream setting, "Who can access all topics?", has been added to define these accessibility parameters. This enhancement offers greater flexibility in managing stream permissions and user access, ensuring that discussions remain secure and tailored to the appropriate audiences.

My experience with Zulip

Participating in GSoC with Zulip has been an invaluable learning experience. I enhanced my ability to write cleaner, more readable code while recognizing the importance of effective communication within a large team. Collaborating with the Zulip community highlighted the power of teamwork, proper Git practices, and the significance of thorough documentation. I also learned to avoid overengineering, prioritizing clarity and maintainability in my solutions.

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