Skip to content

Instantly share code, notes, and snippets.

@sm-sayedi
Last active September 6, 2025 02:17
Show Gist options
  • Select an option

  • Save sm-sayedi/7baf3caf98d787f84af7be679571425b to your computer and use it in GitHub Desktop.

Select an option

Save sm-sayedi/7baf3caf98d787f84af7be679571425b to your computer and use it in GitHub Desktop.
GSoC'24 with Zulip - Work Product

Google Summer of Code 2024 at Zulip - Work Product

Hey πŸ‘‹, Sayed Mahmood Sayedi here. This is a summary of all the work I did for the future Zulip mobile client, zulip-flutter, and my personal experience as a part of the Google Summer of Code 2024.

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 important conversations than finding an important message in a mountain of messages.


ℹ️ Project information

Title: Future Zulip client using Flutter
Size: Large (350+ hrs)
Organization: Zulip
Repository: zulip-flutter
Mentor: Vishnu Ks
Contributor: Sayed Mahmood Sayedi

🌌 Overview

While working on Zulip this summer, I actively addressed a wide range of issues, encompassing tasks such as feature additions and enhancements. I got a total of 11 heavily reviewed PRs merged with 2,000+ lines of code. There are still 3 other PRs with 1,000+ lines of code under review which will be merged soon. The major aspects of my work include implementing new data structures and algorithms and optimizing them for improved performance as well as improving the UI/UX of the application.

πŸ—οΈ Contributions

πŸ”— Quick links

πŸŽ‰ PRs merged

  1. #880 - api: Add stream/update event
  2. #872 - deps: Upgrade Flutter to 3.24.0-1.0.pre.518
  3. #849 - autocomplete: Add "human vs. bot user" and "Alphabetical order" criteria
  4. #844 - profile: Display user email
  5. #828 - autocomplete: Add "recent senders criterion" to user-mention autocomplete
  6. #816 - compose_box: Replace compose box with a banner in DMs with deactivated users
  7. #777 - deps: Upgrade flutter_local_notifications and Flutter to the latest
  8. #729 - internal_link: Parse topic permalinks
  9. #713 - msglist: Add "Copy message link" button to action sheet
  10. #693 - autocomplete: In user-mention autocomplete results give priority to users in DM conversations
  11. #692 - model: Introduce data structures for "recent senders criterion" of user-mention autocomplete

❌ PRs closed (unmerged)

  1. #781 - internal_link: Generate narrow links with "channel", not "stream" (closed to make sure a large portion of the users get updated to a certain server version)
  2. #764 - ui: Distinguish bot users in more places (closed becuase of having less priority compared to other PRs/issues)
  3. #608 - autocomplete: Sort user-mention autocomplete results (closed in the favor of its successor PRs)

πŸ•΅οΈβ€β™‚οΈ PRs under review

  1. #889 - autocomplete: Support @-wildcard in user-mention autocomplete
  2. #886 - compose_box: Replace compose box with a banner when cannot post in a channel
  3. #853 - action_sheet: Redesign bottom sheet

🎊 PRs merged (before GSoC)

  1. #605 - msglist: Distinguish isBot: true message senders with a bot marker
  2. #593 - accounts-ui: Make accounts list scrollable
  3. #590 - autocomplete: Add user avatars to user-mention autocompletes
  4. #560 - inbox: Fix collapsing a section from its sticky header

πŸ“ PRs I reviewed

  1. #878 - notif: Handle remove notification message
  2. #875 - subscription_list: Show @-mention indicator when that applies
  3. #846 - api: Rename to ChannelDestination and ChannelPostPolicy from "stream"
  4. #839 - api: Rename UnreadStreamSnapshot to UnreadChannelSnapshot
  5. #838 - channel_colors: Rename Stream to Channel
  6. #837 - narrow: Rename StreamNarrow to ChannelNarrow
  7. #801 - channel: Rename StreamStore to ChannelStore
  8. #795 - notif: Replace flutter_local_notification createNotificationChannel with pigeon
  9. #779 - action_sheet: Add "Mark as unread from here" button
  10. #724 - api: Embed platform and app info in user-agent
  11. #714 - subscription_list: Show a dot for unreads if channel is muted
  12. #711 - subscription_list: Show muted streams as faded in streams list
  13. #694 - lightbox test: Add video player regression tests
  14. #627 - autocomplete: Introduce topic input autocomplete

πŸ†• Issues I opened

  1. #824 - model: Investigate alternatives of passing messages to RecentSenders
  2. #675 - msglist/dm: Provide proper feedback when sending DMs to a deactivated user
  3. #618 - autocomplete: Give preference to subscribed users first in @-mention autocomplete

πŸ”œ Immediate future work

As there are still 3 PRs open (under review), I intend to continue working on those to get them merged.

πŸ§— Challenges

For me, participation in the GSoC program was quite smooth, but it was only true until the 10th week in which I faced a significant hurdle and developed eye fatigue. I think it was associated with the continuous work with my laptop until late night and sometimes until morning. This definitely affected my work progress as well as my mental status as it was the end of the program and I had to maximize my work. Fortunately and thanks to the Almighty God, the recovery took only two weeks (way less than I expected), but during this period the biggest challenge was to find a balance between work and rest break for my recovery. In week 12 (after recovery), I had to put in extra effort to compensate for the last two weeks and I am happy with the results I had.

πŸ’‘ Learning experience

During these few months of the summer working on the Zulip Flutter application as part of the Google Summer of Code 2024, I gained valuable insights and skills that have significantly contributed to my professional growth. These few months are definitely direction-changing for my programming journey so far. Some of the key learnings from this experience include:

  • Sofware testing: I had always wondered how tests are written for software, and this lack of knowledge was there until I started working on my first PR. Back then, I was left with no choice but to write tests for it as it's a crucial part of software development in Zulip. After that, I wrote tests for almost all of the subsequent PRs. Not only did I learn how to write tests, but how to write clean and readable tests, all with the continuous help of the amazing maintainers.
  • Open-source best practices: I always wanted to contribute to open-source, but had no idea where to start and whether I had the right skills to start doing it. Contributing to an open-source project like Zulip introduced me to the best practices for code management, version control, and maintaining consistency within a large-scale software project.
  • Code reviews: The first time I have ever reviewed someone else's code was in Zulip this summer. Although reviewing others' PRs was a challenge at the beginning, I soon realized how valuable it is to be able to review code as it gives you insights into others' approaches to a specific problem.

🌟 Acknowledgements

I want to thank Google and Zulip from the bottom of my heart, for believing in me and giving me this golden opportunity to be part of this program and work on such an interesting project. I want to give special thanks to Greg Price, Chris Bobbe, and my mentor Vishnu Ks for their guidance and mentorship. I greatly appreciate their patience and support throughout. It was a blessing to learn from them and gain insightful knowledge of programming and software engineering in general. I also want to thank my talented peers, Khader M Khudair and Rajesh Malviya for their helpful and constructive reviews on my PRs.

πŸ“… Post GSoC

I had a lot of fun during my summer at Zulip and I hope to stay involved in the project after the program too. There is a lot of work left to do to make the Zulip Flutter client more feature-rich and ready for release. Apart from this, a large portion of issues that I initially planned to work on during GSoC got pushed back due to other issues getting top priority. I will try to pick up those issues and help in getting the app ready for launch. I will also help newbie contributors in getting started with the project and make them feel at home, the way I felt in my early days with the help of the amazing maintainers of the project.


Check out my GSoC 2025 work with Zulip here.

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