Creative FOSS - Open Source Collaboration Tool

Webapp that streamlines the open source contribution process for non-technical people. Won $1000 in the Gnome Community Engagement Challenge.

demo

The designer signs up using the Github OAuth 2 integration. They are presented with a list of projects they can contribute to (filterable by work required, posted by project maintainers). In this demo, I forked the repository and submitted a pull request to replace the project logo by simply uploading an image. This was accomplished using Svelte on the frontend and Kotlin/Spring/PostgreSQL on the backend interfacing the Github API. Note that only a proof of concept was required for the competition.

Kotlin Spring

For this project, I chose to use PostgreSQL because it's familiar and reliable. Combining Kotlin with Spring Boot allows me to write some incredibly expressive code.

A Spring Boot properties file is used to configure the database connection, with the password supplied through an environment variable.

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=${POSTGRES_PASSWORD}
spring.datasource.driver-class-name=org.postgresql.Driver

Kotlin dataclasses are annotated with Spring Data JDBC to behave as an ORM.

@Table("member")
data class Member(
    var username: String,
    val origin: String = "GITHUB",
    @Id var id: Int? = null,
)

This allows to use Spring Data's magical derived query methods in addition to built-in CrudRepository operations.

interface MemberRepository : CrudRepository<Member, Int> {
    fun findByUsernameAndOrigin(username: String, origin: String): Member?
}

The MemberService uses Spring's dependency injection to get an instance of MemberRepository and SessionData.

@Service
class MemberService(val memberRepository: MemberRepository) {
    fun ensureMemberExists(currentUser: SessionData) {
        val member = memberRepository.findByUsernameAndOrigin(currentUser.username, "GITHUB")

        if (member == null) {
            memberRepository.save(Member(currentUser.username))
        }
    }
}

the pitch

Software isn’t just about the code. Good software requires a good user experience. But what do graphic/UI/UX designers, marketers, copywriters, animators, translators, and other creative people have in common? They almost never contribute to FOSS, and that’s an issue. Creative FOSS aims to lower the barrier to entry of contributing to open source projects, specifically for non-technical people. No command line, no building the project from sources, and no spooky git commands, just a dead simple streamlined way for creative people of various professions to contribute their work.