mirror of https://github.com/zulip/zulip.git
337 lines
18 KiB
Markdown
337 lines
18 KiB
Markdown
# GSoC project ideas
|
|
|
|
This page describes ideas you can use as a starting point for your project
|
|
proposal. If you have not done so yet, you should **start by reading our [guide on
|
|
how to apply](./apply.md)** to a Zulip outreach program. As noted in the guide:
|
|
|
|
> Your first priority during the contribution period should be figuring out how
|
|
> to become an effective Zulip contributor. Start developing your project proposal
|
|
> only once you have experience with iterating on your PRs to get them ready for
|
|
> integration. That way, you'll have a much better idea of what you want to work
|
|
> on and how much you can accomplish.
|
|
|
|
## Project size
|
|
|
|
GSoC offers two project size options: 175 hours and 350 hours. We have
|
|
designed all our projects to have incremental milestones that can be
|
|
completed throughout the program. Consequently, Zulip projects
|
|
described below are generally compatible with either project size. Of
|
|
course, the amount of progress you will be expected to make depends on
|
|
whether you are doing a 175-hour or 350-hour project.
|
|
|
|
It's also important to understand that how much progress one can
|
|
accomplish over the course of the summer is as much a function of the
|
|
project as of the contributor. Contributors who learn to consistently
|
|
package their work into [reviewable pull
|
|
requests](../contributing/reviewable-prs.md) tend to accomplish the
|
|
most during GSoC.
|
|
|
|
## Focus areas
|
|
|
|
For 2023, we are particularly interested in GSoC contributors who have
|
|
strong skills at full-stack feature development, Typescript, visual design,
|
|
HTML/CSS, or performance optimization. So if you're an applicant with
|
|
those skills and are looking for an organization to join, we'd love to
|
|
talk to you!
|
|
|
|
The Zulip project has a huge surface area, so even when we're focused
|
|
on something, a large amount of essential work goes into other parts of
|
|
the project. Every area of Zulip could benefit from the work of a
|
|
contributor with strong programming skills, so don't feel discouraged if
|
|
the areas mentioned above are not your main strength.
|
|
|
|
## Project ideas by area
|
|
|
|
This section contains the seeds of project ideas; you will need to do research
|
|
on the Zulip codebase, read issues on GitHub, read documentation, and talk with
|
|
developers to put together a complete project proposal. It's also fine to come
|
|
up with your own project ideas. As you'll see below, you can put together a
|
|
great project around one of the [area
|
|
labels](https://github.com/zulip/zulip/labels) on GitHub; each has a cluster of
|
|
problems in one part of the Zulip project that we'd love to improve.
|
|
|
|
### Full stack and web frontend focused projects
|
|
|
|
Code: [github.com/zulip/zulip](https://github.com/zulip/zulip/) -- Python,
|
|
Django, JavaScript, and CSS.
|
|
|
|
- Contribute to Zulip's [**migration to user groups for
|
|
permissions**][user-group-permissions]. This migration is intended to replace
|
|
every setting in Zulip that currently allows organizations to assign
|
|
permissions based on role (admin, moderator, etc.) with a setting based on
|
|
arbitrary "user groups", making it much more customizable. This is very
|
|
important for large organizations using Zulip, including businesses and
|
|
open-source projects. Much of the basic design, API structure, and scaffolding
|
|
is complete, but there is a lot of work that remains to complete this vision.
|
|
The project can likely support a couple students; there is considerable work
|
|
to be done on the settings UI, both for user groups and for stream and
|
|
organization-level settings, dozens of existing settings to migrate, and [many
|
|
new settings][organization-settings-label] that users have long requested that
|
|
we've delayed adding in order to avoid having to migrate them. 175 or 350
|
|
hours; moderate difficulty. **Skills required**: Python, JavaScript, and CSS.
|
|
Attention to detail around code reuse/duplication, thoughtful testing, and
|
|
splitting large migrations into reviewable chunks.
|
|
|
|
Experts: Purushottam Tiwari, Sahil Batra
|
|
|
|
[user-group-permissions]: https://github.com/zulip/zulip/issues/19525
|
|
[organization-settings-label]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A%22area%3A+settings+%28admin%2Forg%29%22
|
|
|
|
- Help **migrate our JavaScript codebase to Typescript**. Zulip is in the process of
|
|
porting the main web app JavaScript codebase to TypeScript; at present we've
|
|
done much of the necessary tooling setup, and about 8% of lines have been
|
|
migrated (mostly in libraries used widely); the goal for this project will be
|
|
to get that to ~75%. [This topic in the Zulip development
|
|
community][typescript-migration] is a good place to coordinate work on this
|
|
project. Multiple students are possible; 175 or 350 hours; difficult.
|
|
**Skills required**: TypeScript and refactoring expertise; we're specifically
|
|
interested in students who are a type theory nerd and are invested in writing
|
|
types precisely and checking their work carefully.
|
|
|
|
Experts: Zixuan James Li, Priyank Patel, Anders Kaseorg
|
|
|
|
[typescript-migration]: https://chat.zulip.org/#narrow/stream/6-frontend/topic/typescript.20migration
|
|
|
|
- **Add an Inbox view** to the web app. We intend to add a new
|
|
home screen option for the Zulip web application that works like
|
|
the mobile app's home screen -- showing just topics containing
|
|
unread messages, in an organized fashion, in the web app's center
|
|
pane. Details are available in the
|
|
[issue](https://github.com/zulip/zulip/issues/22189) and a [draft pull
|
|
request](https://github.com/zulip/zulip/pull/22408) with prototyping
|
|
towards this was done in GSoC 2022. The goal for this project would be
|
|
to extract preparatory refactoring changes to make it nicely
|
|
parallel to the similar "Recent conversations" panel so that it can be
|
|
merged in a maintainable fashion, work with the community to
|
|
integrate those changes, complete the Inbox feature through being
|
|
merged, and then spend the remainder of the summer polishing it. 175
|
|
or 350 hours; moderate difficulty. **Skills required**: JavaScript,
|
|
CSS, and reading and understanding a complex code path.
|
|
|
|
Experts: Aman Agrawal, Shlok Patel
|
|
|
|
- **Extended notification settings**. Extend Zulip's powerful
|
|
notification settings model to support additional configuration
|
|
options. The top priorities in this area are [unmuting topics in
|
|
muted streams](https://github.com/zulip/zulip/issues/2517) and
|
|
[following a topic](https://github.com/zulip/zulip/issues/6027);
|
|
these are two of the 5 most requested features for the Zulip project
|
|
overall. For this project, one will likely want to start with some
|
|
simpler issues in the [notifications (messages)
|
|
area][notifications-messages] in order to get familiarity with the
|
|
code paths in question. There is enough to do in this project that
|
|
we could have two students working in this area. 175 or 350 hours;
|
|
moderate difficulty. **Skills required**: Python and JavaScript,
|
|
with a bit of CSS, database design, and other aspects of full-stack
|
|
feature development. Attention to detail, thinking through subtle
|
|
corner cases, designing good abstractions to help ensure
|
|
correctness, and writing tests to verify correct behavior in them
|
|
will be important for this work.
|
|
|
|
Experts: Abhijeet Bodas, Ryan Rehman
|
|
|
|
[notifications-messages]: https://github.com/zulip/zulip/labels/area%3A%20notifications%20%28messages%29
|
|
|
|
- **Cluster of priority features**. Implement a cluster of new full
|
|
stack features for Zulip. The [high priority
|
|
label](https://github.com/zulip/zulip/issues?q=is%3Aissue+is%3Aopen+label%3A%22priority%3A+high%22)
|
|
documents hundreds of issues that we've identified as important to
|
|
the project. A great project can be 3-5 significant features around
|
|
a theme (often, but not necessarily, an [area
|
|
label](https://github.com/zulip/zulip/labels); the goal will be to
|
|
implement and get fully merged a cluster of features with a
|
|
meaningful impact on the project. Zulip has a lot of half-finished
|
|
PRs, so some features might be completed by reading, understanding,
|
|
rebasing, and reviving an existing pull request. 175 or 350
|
|
hours; difficulty will vary. **Skills required**: Depends on the
|
|
features; Tim Abbott will help you select an appropriate cluster
|
|
once we've gotten to know you and your strengths through your getting
|
|
involved in the project.
|
|
|
|
Experts: it depends
|
|
|
|
- Zulip's [**REST API documentation**](https://zulip.com/api), which is an
|
|
important resource for any organization integrating with Zulip, as
|
|
well as the developers of our API clients. Zulip has a [nice
|
|
framework](../documentation/api.md) for writing API documentation
|
|
built by past GSoC students based on the OpenAPI standard with
|
|
built-in automated tests of the data both the Python and curl
|
|
examples. However, the documentation isn't yet what we're hoping
|
|
for: there are a few dozen endpoints that are missing, several of
|
|
which are quite important, the visual design isn't perfect
|
|
(especially for, e.g., `GET /events`), many templates could be deleted
|
|
with a bit of framework effort, etc. See the [API docs area
|
|
label][api-docs-area] for some specific projects in the area; and
|
|
`git grep pending_endpoints` to find the list of endpoints that need
|
|
documentation and their priorities. Our goal for the summer is for
|
|
1-2 students to resolve all open issues related to the REST API
|
|
documentation. 175 or 350 hours; difficulty easy or medium. **Skills
|
|
required**: Python programming. Expertise with reading documentation
|
|
and English writing are valuable, and product thinking about the
|
|
experience of using third-party APIs is very helpful.
|
|
|
|
Expert: Lauryn Menard
|
|
|
|
[api-docs-area]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A%22area%3A+documentation+%28api+and+integrations%29%22
|
|
|
|
- **Improve the UI and visual design** of the Zulip web app. We are working on a
|
|
major redesign for the core surfaces of the Zulip web app -- see the [redesign
|
|
label][redesign-label] for specced out work, with more to come. We're
|
|
particularly excited about students who are interested in making our CSS clean
|
|
and readable as part of working on the UI. 175 or 350 hours; medium to
|
|
difficult. **Skills required**: Design, HTML and CSS skills; most important is
|
|
the ability to carefully verify that one's changes are correct and will not
|
|
break other parts of the app; design changes are very rewarding since they are
|
|
highly user-facing, but that also means there is a higher bar for correctness
|
|
and reviewability for one's work. A great application would include PRs making
|
|
small, clean improvements to the Zulip UI (whether logged-in or logged-out
|
|
pages).
|
|
|
|
Experts: Aman Agrawal, Alya Abbott
|
|
|
|
[redesign-label]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3Aredesign
|
|
|
|
- **Optimize performance and scalability**, either for the web frontend or
|
|
the server. Zulip is already one of the faster web apps out there,
|
|
but we have a number of ideas for how to make it substantially
|
|
faster yet. This is likely a particularly challenging project to do
|
|
well, since there are a lot of subtle interactions to
|
|
understand. 175 or 350 hours; difficult. **Skill recommended**:
|
|
Strong debugging, communication, and code reading skills are most
|
|
important here. JavaScript experience; some Python/Django
|
|
experience, some skill with CSS, ideally experience using the Chrome
|
|
Performance profiling tools (but you can pick this up as you go) can
|
|
be useful depending on what profiling shows. Our [backend
|
|
scalability design doc](../subsystems/performance.md) and the
|
|
[performance label][perf-label] may be helpful reading for the
|
|
backend part of this.
|
|
|
|
Experts: Tim Abbott, Yash RE
|
|
|
|
[perf-label]: https://github.com/zulip/zulip/labels/area%3A%20performance
|
|
|
|
- Fill in gaps, fix bugs, and improve the framework for Zulip's **library of
|
|
native integrations**. We have about 120 native integrations, but there are a
|
|
number of others we would like to add. Also, several extensions to the
|
|
framework that would dramatically improve the user experience of using
|
|
integrations, e.g., being able to do callbacks to third-party services
|
|
like Stripe to display more user-friendly notifications. The [the integrations
|
|
label on GitHub](https://github.com/zulip/zulip/labels/area%3A%20integrations)
|
|
lists some of the priorities here (many of which are great preparatory
|
|
projects). 175 or 350 hours; medium difficulty with various possible difficult
|
|
extensions. **Skills required**: Strong Python experience, will to install and
|
|
do careful manual testing of third-party products. Fluent English, usability
|
|
sense and/or technical writing skills are all pluses.
|
|
|
|
Expert: Zixuan Li
|
|
|
|
- **Make Zulip integrations easier for nontechnical users to set up**.
|
|
This includes adding a backend permissions system for managing bot
|
|
permissions (and implementing the enforcement logic), adding an
|
|
OAuth system for presenting those controls to users, as well as
|
|
making the `/integrations` page UI have buttons to create a bot,
|
|
rather than sending users to the administration page. 175 or 350
|
|
hours; easy to difficult depending on scope. **Skills recommended**:
|
|
Strong Python/Django; JavaScript, CSS, and design sense
|
|
helpful. Understanding of implementing OAuth providers, e.g., having
|
|
built a prototype with [the Django OAuth
|
|
toolkit](https://django-oauth-toolkit.readthedocs.io/en/latest/)
|
|
would be great to demonstrate as part of an application. The [Zulip
|
|
integration writing guide](../documentation/integrations.md) and
|
|
[integration documentation](https://zulip.com/integrations/) are
|
|
useful materials for learning about how things currently work, and
|
|
[the integrations label on
|
|
GitHub](https://github.com/zulip/zulip/labels/area%3A%20integrations)
|
|
has a bunch of good starter issues to demonstrate your skills if
|
|
you're interested in this area.
|
|
|
|
Expert: Zixuan James Li
|
|
|
|
[all-settings-issues]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A%22area%3A+settings+%28admin%2Forg%29%22%2C%22area%3A+settings+%28user%29%22%2C%22area%3A+stream+settings%22%2C%22area%3A+settings+UI%22
|
|
|
|
- Work on Zulip's **development and testing infrastructure**. Zulip is a
|
|
project that takes great pride in building great tools for
|
|
development, but there's always more to do to make the experience
|
|
delightful. Significantly, about 10% of Zulip's open issues are
|
|
ideas for how to improve the project's contributor experience, and
|
|
are [in](https://github.com/zulip/zulip/labels/area%3A%20tooling)
|
|
[these](https://github.com/zulip/zulip/labels/area%3A%20testing-coverage)
|
|
[four](https://github.com/zulip/zulip/labels/area%3A%20testing-infrastructure)
|
|
[labels](https://github.com/zulip/zulip/labels/area%3A%20provision)
|
|
for tooling improvements.
|
|
|
|
This is a somewhat unusual project, in that it would likely consist of dozens
|
|
of small improvements to the overall codebase, but this sort of work has a
|
|
huge impact on the experience of other Zulip developers and thus the community
|
|
as a whole (project leader Tim Abbott spends more time on the development
|
|
experience than any other single area). 175 or 350 hours; difficult. **Skills
|
|
required**: Python, some DevOps, and a passion for checking your work
|
|
carefully. A strong applicant for this will have completed several projects in
|
|
these areas.
|
|
|
|
Expert: Tim Abbott
|
|
|
|
### Terminal app
|
|
|
|
Code: [Zulip Terminal](https://github.com/zulip/zulip-terminal)
|
|
|
|
Experts: Neil Pilgrim, Aman Agrawal
|
|
|
|
- Work on Zulip Terminal, the official terminal client for Zulip. zulip-terminal
|
|
is out in beta, but there's still a lot to do for it to approach parity with
|
|
the web app. We would be happy to accept multiple strong students to work on
|
|
this project. 175 or 350 hours; medium difficulty. **Skills required**: Python
|
|
3 development skills, good communication and project management skills, good
|
|
at reading code and testing.
|
|
|
|
### Desktop app
|
|
|
|
Code:
|
|
[Our cross-platform desktop app written in JavaScript on
|
|
Electron](https://github.com/zulip/zulip-desktop).
|
|
|
|
Expert: Anders Kaseorg
|
|
|
|
- **Contribute to our [Electron-based desktop client
|
|
application](https://github.com/zulip/zulip-desktop)**. There's plenty of
|
|
feature/UI work to do, but focus areas for us include things to (1) improve
|
|
the release process for the app, using automated testing, TypeScript, etc.,
|
|
and (2) polishing the UI. Browse the open issues and get involved! 175 or 350
|
|
hours. This is a difficult project because it is important user-facing code
|
|
without good automated testing, so the bar for writing high quality,
|
|
reviewable PRs that convince others your work is correct is high. **Skills
|
|
required**: JavaScript, Electron; you can learn Electron as part of your
|
|
application.
|
|
|
|
- **Prototype a next generation Zulip desktop app implemented using
|
|
the Tauri Rust-based framework**. Tauri is a promising new project
|
|
that we believe is likely a better technical direction for client
|
|
applications than Electron for desktop apps, for security and
|
|
resource consumption reasons. The goal of this project would be to
|
|
build a working prototype to evaluate to what extent Tauri is a
|
|
viable platform for us to migrate the Zulip desktop app to. 350
|
|
hours only; difficult. **Skills required**: Ability to learn
|
|
quickly. Experience with Rust and secure software design may be
|
|
helpful.
|
|
|
|
### Mobile apps
|
|
|
|
Code:
|
|
[React Native mobile app](https://github.com/zulip/zulip-mobile); [Flutter
|
|
prototype app](https://github.com/zulip/zulip-flutter)
|
|
|
|
Experts: Greg Price, Chris Bobbe
|
|
|
|
We're exploring rewriting Zulip's mobile apps, which are currently implemented
|
|
using React Native, using Flutter. See [this development community
|
|
thread][flutter-thread] for details.
|
|
|
|
If you are a Flutter expert and excited about getting involved, feel free to
|
|
introduce yourself in the [#mobile stream][mobile-stream] in the development
|
|
community. However because the project and the development process around it are
|
|
not yet established, **we expect not to accept any GSoC contributors for the Zulip
|
|
mobile apps** for GSoC 2023.
|
|
|
|
[flutter-thread]: https://chat.zulip.org/#narrow/stream/2-general/topic/Flutter
|
|
[mobile-stream]: https://chat.zulip.org/#narrow/stream/48-mobile
|