Hi, I'm Pieter Cardillo Kwok, and this document is a summary of my work and experiences during Google Summer of Code 2024 at Zulip. Zulip is a Django-based open-source team chat tool designed to enable efficient and organized communication.
- Title: Third party integration improvements
- Size: Large
- Assigned Mentor: Satyam Bansal
- Repositories: https://github.com/zulip/zulip & https://github.com/zulip/python-zulip-api
My project was around improving and maintaining third-party integrations, primarily by brushing up existing and adding new webhook-based native integrations. As the summer progressed, I've also branch out into adjacent code areas, such proposing new bot related feature, working on the import/export processes, fixing TypeScript components and refactoring CSS rules.
Integration related works: #30848, #31182, #30465, #826, #29730, #29390, #824
The new feature that I proposed aims to automatically populating the bot avatar based on the bot's integration app. I got the opportunity to drive the implementation of this new feature from drafting the proposal, participating in the technical design and as of this writing, reviewing a contributors PR for the feature.
Feature discussion thread: CZO Github Issue:#30139 PR: #30518
In the import/export area, my work is primarily around improving how Slack export data are converted into Zulip-ready import. This requires understanding of both Zulip's import/export process and Slacks export data structure. Along the way, I've also worked on a slew issues around this area such as enhancing the import process by adding logic to fix imported message links, decoupling a set of Slack-related text reformatting functions accross multiple code areas and centralizing it into slack_message_conversion.py to promote reusability and maintainability.
Some of the frontend work I've done involves refactoring and fixing CSS classes, moving from "one file fits all" approach as in dark_theme.css into a more granular yet still centralized CSS variables based structure in app_components.css. Although this might seem simple, untangling and refactoring even a single CSS rule carries the risk of causing major UI regressions in unexpected areas. This requires understanding how the current CSS rules are structured and then creating new CSS variables with the right level of abstraction specifically tailored to each element.
Other than that, I've also tackled tasks such as miscellaneous bug fixes for the 9.0 release and updating integration documentations. A full summary of the PRs I've worked on is provided in the next section.
During coding period
-
#29839 stream_settings: Fix stream row switching behavior when adding subscribers
-
#29898 popover: Fix user pop over not showing when clicked in channels /group settings
-
#29859 dark_theme_css: Fix border color for tables in message/chat
-
#30431 informational_overlays: Fix CSS for tables in info_overlay
-
#30449 app_components: Fix CSS for tables in settings menu
-
#30682 subscription css: Fix cut off bottom border for subscriber list
-
#30848 integrations: Prevent duplicate PR review messages
-
#31182 integrations: Update notifications for commented events in Jira integration.
-
#31231, #30752, #30726, #30725. integration-docs: Update integration doc
Before coding period
- #29671 integrations_docs: updated integrations css.
During coding period
-
#30166 slack_import: Improve how Slack thread messages are handled
-
#30465 integrations: Update Slack integration to handle Event API
-
#31311 slack_import: Support converting Slack's integration bot messages.
-
#826 Slack bridge: Update Slack bridge with Events API
Before coding period
-
#29730 integrations: Update Newrelic integrations.
-
#29390 integrations: Add ClickUp integration.
-
#824 integrations/ClickUp: Add ClickUp integration script
During coding period
-
#31166 Typed-endpoint-docs
-
#30518 Addition of Integration_type key in add a new Bot
-
#31077 search operators: Add is-muted search operator.
-
#30700 ListWidget: Fix sliding of actions column in tables.
-
#31051 Multiple-modals-default-stream
-
#30641 Spoiler block with datetime will push its dropdown button in smaller screen devices
-
#30993 travis_webhook: Removed the ignore_pull_requests from the CI integration
-
#30643 ui: Fix overflowing time tag in spoiler block
-
#30974 Fix typos in integration docs
-
#30964 Multiple-modals-issue
-
#30875 edit_embedded_bot: Check if service is defined.
-
#30132 new conversation: Show correct tooltip when dms are disabled.
-
#30734 user_profile: Pass correct element to toggle_submit_button.
-
#30522 reactions view: Add narrow title.
-
#31233, #30798, #30799, #30792, #30793, #30794, #30790, #30731, #30733 integration-docs
-
Working on a large collaborative project through GSoC significantly deepened my understanding of Git. It’s one thing to commit and push changes to my own project, but collaborating with others requires ensuring that my work is clear and understandable for contributors looking at my code years later. Additionally, practicing writing clear and coherent commits has an important side effect: it forces you to ensure your reasoning for changes is solid, which helps catch bugs along the way.
-
A particularly challenging situation arose when I fumbled a merge conflict and accidentally squashed a bunch of commits together instead of properly rebasing them. I had to quickly learn how to use reflog, cherry-pick earlier commits, and resolve conflicts properly. It was definately one of the scariest moments for me, but I'm glad I experienced it because it pushed me to grow.
-
I’ve found that keeping an eye out for bugs and opportunities for improvement within one area can lead you to explore and learn more about other parts of the code base. So, I think it’s okay to start with small or "mundane" problems when you’re just starting working on a code base / project, and this will naturally lead you to work your way up to more interesting and important issues. For instance, while working on an integration PR I discovered a CSS bug(#29859) which lead me to work on other CSS and frontend related issues afterwards. Other than that, I've also opened 14 issues documenting new bugs and improvement plans that I've found while working other PRs.
This experience has been invaluable to me as a software engineer and I'm very grateful for it. I hope to give back by contributing to other open-source projects in the future and by continuing to contribute to Zulip.
Last but not least, I'd like to thank you @Tim Abbot, @Satyam Bansal, @Lauryn Menard for your feedbacks and support through out the programm.
