Hi, I'm Pieter Cardillo Kwok, and this document is a summary of my work and experiences during Google Summer of Code 2025 at Zulip. Zulip is a Django-based open-source team chat tool designed to enable efficient and organized communication.
- Title: Improve Zulip's mirroring and data import tools
- Size: Large
- Assigned Mentor: Visnu KS & Dinesh Ch
- Repository: https://github.com/zulip/zulip
This project focused on improving existing data import tools, such as better conversion of Slack to Zulip features when importing Slack's data export, as well as starting a new data import and mirroring tool.
During coding period
(June 02 2025 - September 01 2025)
- settings_export: Fix plural strings in export confirmation modal. #35869
- narrow: Fix topic highlighting issue with apostrophes in search. #35269
- users: Fix
check_valid_bot_configbug. #35202 - message_report: Fix flaky tests. #35201
- slack_import: Update topic name format for Slack threads. #35151
- message_report: Use
get_message_link_syntaxfunction. #35138 - url_encoding: Standardize narrow URL encoding methods. #35021
- prep PR for #34524. #34990
- user_profile: Fix the field for outgoing webhook bots interface. #34914
- integration-doc: Add instruction to Slack integration. #34883
- integrations: Add
WebhookIntegrations.url_optionsfield. #34823
Github search query: https://github.com/zulip/zulip/pulls?q=is%3Apr+author%3ApieterCK+created%3A2025-06-02..2025-09-01+state%3Amerged+
During bonding period
(May 08 2025 - June 01 2025)
- filter: Mark message as read when searching with not-is-dm. #34760
- mattermost_import: Add message with faulty HTML to fixture. #34720
- mattermost_import: Log when processing messages and add try-except block. #34686
Github search query: https://github.com/zulip/zulip/pulls?q=is%3Apr+author%3ApieterCK+created%3A2025-05-08..2025-06-01+state%3Amerged+
During coding period
(June 02 2025 - September 01 2025)
- export: Improve export flow when there are consented admins with inaccessible emails. #35854
- dropdown_list: Fix class for map-to-channel option. #35736
- slack_integration: Port
channels_map_to_topicsto useUrlOption. #35680 - test_slack_importer: Refactor existing tests for thread message conversion. #35390
- slack_importer: Add cross-linking notification to first thread messages. #35382
- service_bots: Implement multiple-triggers system for service bot. #35250
- url_encoding: Create
generate_narrow_link_from_narrow_terms. #35056
Github search query: https://github.com/zulip/zulip/pulls?q=is%3Apr+author%3ApieterCK+created%3A2025-06-02..2025-09-01+state%3Aopen
During bonding period
(May 08 2025 - June 01 2025)
- moderation_request_channel: Add UI elements for the setting. #34618
Github search query: https://github.com/zulip/zulip/pulls?q=is%3Apr+author%3ApieterCK+created%3A2025-05-08..2025-06-01+state%3Aopen+
During coding period
(May 08 2025 - June 01 2025)
- Allow changing the bot type of a bot user in the "manage bot" modal. #34929
- Keep focus on dropdown input in integration URL modal. #34828
- user_settings: Add backend for admin to modify user settings. #33701
- Prep PR for #32077 #35244
A challenge I faced this time around was communicating and managing larger projects. A large project is usually a chain multiple PRs, where even a mistake in one part can ripple forward, affecting the following PRs and creating a bullwhip effect that magnifies the error.
One of the larger projects that I've been working on throughout GSoC is fixing a bug on how the import tool processes narrow links in messages. This requires standardizing a couple existing formatting modules(#35021), copying a couple of frontend modules to the backend(#33116, #33590), before implementing the actual bug fix(#35056, #31100).
Poor communication on my part led to confusion about why we couldn’t reuse the existing formatting modules and it ended up blocking the project for some time. The downside of poor communication is that at best it makes a PR harder to review, and at worst, you risk working on an implementation that misses the mark by a factor of ten or more.
In the end, opening a dedicated discussion thread (#backend > Fix narrow URLs in exported messages.) helped me step back, clarify my reasoning, and make sure the project is moving in the right direction.
Shout out to both my mentors @Visnu KS and @Dinesh Ch for supporting and motivating me throughout the program!
And as always, thank you to @Lauryn Menard, @Niloth, and @Tim Abbot for the reviews, guidance, and feedback along the way!
