Google Summer of Code Project Ideas 2023

These are project ideas proposed for Plone's participation in Google Summer of Code 2023. Student interested in working on these are encouraged to apply for the program.

Note: most projects do not require the candidate to know Plone already, but we do expect applicants to have started to learn about Plone before applying. The specific technologies required for each project are listed in the details for the idea.

Prospective students should follow our ideas for getting started before writing up their proposal:

As a GSoC applicant, please direct your questions to the community forum. Do not use any other contact method, as doing so may harm your chances of acceptance into the program by demonstrating your unwillingness to follow instructions.

The GSoC contributor application period is now open and will last until the 4th of April.

If you want to apply and you have questions, please use exclusively the community forum. DO NOT USE:

  • direct emails to mentors
  • GitHub issue tracker

Thank you!

Modernize Data Fetching API

Modernize the data fetching story in Volto by deprecating AsyncConnect library and moving the Server State handling to TanStack Query. As a result, provide an agnostic library of actions called @plone/client that could be reused not only in Volto but in other React frameworks or JS apps. It will be the standard de-facto plone.restapi React client for Plone.

More information: https://github.com/plone/volto/issues/4347

Skills: React, Plone

Possible mentors: Víctor Fernández de Alba

Expected size of project: 350 hours

Difficulty : hard

Improve drag & drop support in the blocks engine

Refactor the current Volto drag and drop infrastructure and components to use dnd-kit (https://dndkit.com/) library. Extend the feature set to being able to support move blocks between the main blocks stream and block containers (row/grid block, group block, etc).

More Information: https://github.com/plone/volto/issues/4204

Skills: React, Plone

Possible mentors: Víctor Fernández de Alba

Expected size of project: 250 hours

Difficulty : medium

Improve add/select/modify link widget

Improve the overall UX for the "add a link to a internal content or external URL". We already have one AddLinkForm that we use in a couple of scenarios to link content (in Slate editor and in the Image block and component alike. The idea is to improve and unify the experience across all the elements that has this interaction.

We have an UX proposal since this is a well known and used UX pattern that is well accepted and present in Google products, Confluence, WP, etc...

More information: https://github.com/plone/volto/issues/4303

Skills: React, Plone

Possible mentors: Víctor Fernández de Alba

Expected size of project: 350 hours

Difficulty : medium

Refactor class components to functional components

Volto still have a number of core components that are React class-based components. This prevents the use of hooks in them, and newest DX on them. The idea is also while moving to them, use hooks to abstract the functionality present in Redux and in data fetching.

More information: https://github.com/plone/volto/issues/4460

Skills: React, Plone

Possible mentors: Víctor Fernández de Alba, Jeff Bledsoe, Nilesh Gulia

Expected size of project: 350 hours

Difficulty : medium

Add WebAuthn 2 support for Plone

WebAuthn would allow to support passwordless authentication to Plone using either external hardware keys like a Yubi key or using biometric methods build-in into our own devices like Face ID or Touch ID. Almost all modern browsers support the W3C standard WebAuthn. There are variations on the level of support for build-in biometric methods. On Mac, you can use Touch ID with Chrome and Safari, but not with Firefox. On iOS, you can use Face ID across browsers.

Skills: Python, Plone

Possible mentor: Andreas Jung

Detailed proposal

Expected size of project: 350 hours

Difficulty : hard

Recycle bin (canceled)

Implement a new delete action which moves contents to a recycle bin, so that users can restore deleted items if needed. Note: the backend has been implemented during GSoC 2022, we now need to implement the Volto part of the feature.

Skills: React, Plone

Possible mentors: Jakob Kahl

Expected size of project: 350 hours

Difficulty : hard

Use Nuclia search across all Plone properties

Index plone.org, docs.plone.org and training.plone.org contents in a Nuclia knowledge box so people can easily find information about Plone wherever it is located.
Note: a Nuclia knowledge box already indexes all the Plone YouTube videos, the same knowledge box can be used to index these web contents.

Skills: Python, Plone

Possible mentors: Steve Piercy, Eric Bréhault

Expected size of project: 350 hours

Difficulty : medium

Locking Control Panel

The Zope Management Interface (ZMI) provides a view to search for locks and release locks on objects under "Control_Panel/DavLocks/manage_workspace". This is a useful feature that we could expose via restapi and Volto (as control panel).

Skills: Python, React, Plone

Possible mentor: Rob Gietema, Jakob Kahl

Expected size of project: 175 hours

Difficulty : medium

User Management

Volto has basic user management implemented for Plone. You can create users and groups and assign roles but there are a lot of feature missing in the frontend like editing users or editing groups.

The goal of this project is to implement the missing features and redo the management screens.

Skills: React, Plone

Possible mentors: Rob Gietema

Expected size of the project: 175 hours

Difficulty: medium

Slug based linked headlines in volto-slate (canceled)

Add a anchor link target to headings (h1,h2,h3,h4) in volto-slate. We often came across situations where we might want to direct a user to specific section/heading (h1,h2,h3,h4) in a page. We need an ability to create those anchors links within headings written in volto-slate.

More information: https://github.com/plone/volto/issues/4298

Skills: React, Plone

Possible mentors: Víctor Fernández de Alba

Expected size of project: 350 hours

Difficulty : medium