Skip to content

Project ideas for Google Summer of Code 2020

Eric Schultz edited this page Feb 11, 2020 · 3 revisions

Google Summer of Code project ideas:

Please do join us on Zulip. Each of these projects has already a mentor, and most have a "beta-tester" not for profit that will bring the end user perspective.

If you want to work on something but don't find it there (eg. bitcoin?), feel free to suggest it in our chat, we are open to new ideas and if we can find a mentor willing to take on your project, you will make it happen!

These project ideas are not detailed enough in this document. It's on purpose, one of your goal as a student is that you understand better the need and help specify it. We will work together (and some projects have already a longer specification or even a prototype), but you will need to actively reach out to the community and shape the project together based on your existing skills and experience.

In-software widget management

Description: Currently, users of Houdini have to include the options for their widget in their widget declaration. As an example, if they want the widget's donations to be associated with a particular campaign, they put that in the HTML of the page they want to add the widget. While this has worked relatively well, it does have some drawbacks:

  • If a nonprofit has a lot of different widgets and want to modify all of them, they need to find every place they have the widget and modify it.
  • If a non-technical user wants to make a simple modification, such as changing what the suggested donation amounts are, they are forced to look into the HTML of their own site's webpage.

This project flips this design on its head. A nonprofit user could use a management interface for creating and managing all of the widgets on Houdini. While the basic widget inclusion and identifier code would still need to be included on their website, the details could be easily managed by non-technical users.

Per our standards, the UI for this project will be created using React Hooks and Material UI.

Requirements: Javascript/Typescript, React (strongly recommended), HTML/CSS, a focus on usability

New donation widget using React

Description: Currently the donation widget for Houdini uses a custom, difficult to use Javascript framework. This makes improvements to the donation widget extremely difficult. Replacing the donation widget with a React-based donation widget.

The student will be expected to rewrite the donation widget using React. Part of the work of the project is meeting with community members to fully define the requirements of the widget, but featurewise, we can "simply" clone the existing widget .

As per our standard, it will use React Hooks and the Material UI React Library.

Requirements: Javascript or Typescript, some familiarity with React (optional but strongly recommended), CSS, HTML, strong writing ability

A/B testing of widgets

Description: A lot of tiny differences can have a big impact. What default amounts to display for instance? $5, 10, 20 and 50? or $3, 10, 42, 100?

Each fundraiser will have a lot of definitive opinions about it. Your project is to allow to test the two versions and compare. Which one works best? not based on how convincing the arguments of the fundraiser, but on how much real money is given by real users. Not only will you improve the amount of money raised, but also save hours/days/weeks of discussions about which alternative is better for nonprofits.

The student is expected to develop (or integrate) a user-friendly system for describing and running an A/B test actually does and provide statistics on the results to an end-user.

Requirements: Javascript or Typescript, Ruby, ability to do user research and summarize your results

Paypal support

Description: Houdini's core payment processing functionality is provided through Stripe credit card processing. Additionally, some users of Houdini include SEPA debits, a bank account debiting mechanism unique to Europe. Adding Paypal would help nonprofits raise money from donors who prefer to use Paypal. This work will require a bit of user research as well as trial and error to see how to use Paypal within a iframe-hosted donation widget.

Requirements: Javascript or Typescript, Ruby, HTML and CSS

Enable other payment methods on stripe

Description: While the Houdini Stripe integration only handles credit cards, Stripe allows a large number of payment methods other than credit card (some are country specific, like iDEAL in the Netherlands or ACH in the US). It will help getting new donations from a different set of countries as well as well as make Houdini useful to different nonprofits in those countries. You'll work with the community to decide which payment methods should be added as well as explore how these payment methods can be added within a iframe-hosted donation widget.

Requirements: Javascript or Typescript, Ruby, HTML and CSS

Webhooks/event support

Description: One way to make Houdini more useful is to automate the process of sharing data between different platforms. Right now, there's not a standard way for object changes on Houdini (a payment created, supporter created, payment refunded, etc) to trigger an action. As an example, imagine the usefulness of a new payment in Houdini automatically creating a new payment record in Quickbooks. This project will require collaboration between the student and the community to finalize an useful event model (notify a set of listeners when a donation happens and trigger an action), a way for nonprofit and instance owners to set and manage webhooks and an integration between Houdini and a service. Depending on how fast work is completed, additional integrations can be created.

Requirements: Ruby

Better data visualisation

Description: There are a large number of ways Houdini donation data could be visualized. These includethe ratio of first donation over time, the average or median amount, if these are new donations or recurring from previous months, etc.

The student will research the best way to visualize Houdini donation data sets. Part of this work will be balancing the needs of very large users of Houdini (having millions of donations) with small users of Houdini (having dozens). The solutions for large users will not be the same as smaller users. Tools the contributor may consider using are d3 and crossfilter.

Requirements: Javascript/Typescript, Ruby, maybe SQL, ability to consider multiple use-cases and design a tool that works for all use-cases.