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.
Title: Future Zulip client using Flutter
Size: Large (350+ hrs)
Organization: Zulip
Repository: zulip-flutter
Mentor: Vishnu Ks
Contributor: Sayed Mahmood Sayedi
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.
- #880 - api: Add stream/update event
- #872 - deps: Upgrade Flutter to 3.24.0-1.0.pre.518
- #849 - autocomplete: Add "human vs. bot user" and "Alphabetical order" criteria
- #844 - profile: Display user email
- #828 - autocomplete: Add "recent senders criterion" to user-mention autocomplete
- #816 - compose_box: Replace compose box with a banner in DMs with deactivated users
- #777 - deps: Upgrade
flutter_local_notificationsandFlutterto the latest - #729 - internal_link: Parse topic permalinks
- #713 - msglist: Add "Copy message link" button to action sheet
- #693 - autocomplete: In user-mention autocomplete results give priority to users in DM conversations
- #692 - model: Introduce data structures for "recent senders criterion" of user-mention autocomplete
- #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)
- #764 - ui: Distinguish bot users in more places (closed becuase of having less priority compared to other PRs/issues)
- #608 - autocomplete: Sort user-mention autocomplete results (closed in the favor of its successor PRs)
- #889 - autocomplete: Support @-wildcard in user-mention autocomplete
- #886 - compose_box: Replace compose box with a banner when cannot post in a channel
- #853 - action_sheet: Redesign bottom sheet
- #605 - msglist: Distinguish isBot: true message senders with a bot marker
- #593 - accounts-ui: Make accounts list scrollable
- #590 - autocomplete: Add user avatars to user-mention autocompletes
- #560 - inbox: Fix collapsing a section from its sticky header
- #878 - notif: Handle remove notification message
- #875 - subscription_list: Show @-mention indicator when that applies
- #846 - api: Rename to ChannelDestination and ChannelPostPolicy from "stream"
- #839 - api: Rename
UnreadStreamSnapshottoUnreadChannelSnapshot - #838 - channel_colors: Rename Stream to Channel
- #837 - narrow: Rename StreamNarrow to ChannelNarrow
- #801 - channel: Rename
StreamStoretoChannelStore - #795 - notif: Replace flutter_local_notification
createNotificationChannelwith pigeon - #779 - action_sheet: Add "Mark as unread from here" button
- #724 - api: Embed platform and app info in user-agent
- #714 - subscription_list: Show a dot for unreads if channel is muted
- #711 - subscription_list: Show muted streams as faded in streams list
- #694 - lightbox test: Add video player regression tests
- #627 - autocomplete: Introduce topic input autocomplete
- #824 - model: Investigate alternatives of passing messages to
RecentSenders - #675 - msglist/dm: Provide proper feedback when sending DMs to a deactivated user
- #618 - autocomplete: Give preference to subscribed users first in @-mention autocomplete
As there are still 3 PRs open (under review), I intend to continue working on those to get them merged.
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.
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.
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.
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.
