Skip to content

Instantly share code, notes, and snippets.

@PieterCK
Last active February 16, 2026 13:53
Show Gist options
  • Select an option

  • Save PieterCK/71873fa7a7ded88cd4277d4a7e9659b1 to your computer and use it in GitHub Desktop.

Select an option

Save PieterCK/71873fa7a7ded88cd4277d4a7e9659b1 to your computer and use it in GitHub Desktop.

GSoC logo

GSoC Final Report @Zulip

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.

Quick Links

Project Overview

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.

Merged PRs

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_config bug. #35202
  • message_report: Fix flaky tests. #35201
  • slack_import: Update topic name format for Slack threads. #35151
  • message_report: Use get_message_link_syntax function. #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_options field. #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+

PRs created but not yet merged

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_topics to use UrlOption. #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+

PRs I Reviewed

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

Challenges & Learning

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.

Final Words

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!

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