Inspiration

frieren. Check us out at https://github.com/g00gol/frieren!

frieren

In the spirit of Hacktoberfest, we wanted to take a deep dive into the world of open-source projects. After a bit of Googling, we realized that there just wasn't a very good standard for organizing and sorting these projects. That's why we're here: we aim to create a product that gives people the power to organize these projects themselves and also setting a standard for them!

What it does

Our project is s standard to unite Open-Source Software (OSS) developers looking for new projects. With our tooling ecosystem, maintainers of our project create an opensource.fern file, which specifies custom metadata about the project. We use the .fern file data with the Github repo's data and store it into a centralized database.

This database can be accessed through our API and our GUI.

frontend_demo

This project was split primarily into 4 parts: backend, frontend, server scripts, and CLI. We'll explain what each of those do here.

Backend

We wanted to give users the power to find and filter projects themselves. So, the backend facilitates the API route for users to query for our dataset.

Frontend

Even though our product is fully headless (does not come with a frontend), we still thought it would be helpful to give less experienced users access to our dataset without the hassle of fetching the data themselves. The frontend is our nice graphical interface for the API that allows users to query data.

Server scripts

The server scripts keep our database up to date; Rust allowed us to validate our database's schema as well as quickly synchronize our database and users' projects.

Command-line interface

The CLI allows users to generate a .fern metadata file, allowing them to connect their project to our website and reach prospective contributors more easily.

bubbleteago

How we built it

This project used 4 different languages, one for each part of the site. We've made it a tradition to always learn different technologies during each Hackathon, and we got extra ambitious this time.

Backend (Golang + Chi)

The API backend was built using Chi web framework for Go. It was the main handler of our MongoDB data.

Frontend (NextJS, TailwindCSS, Daisy UI)

The frontend uses NextJS as the main framework plus Daisy UI powered by TailwindCSS for styling. The app uses context API to keep states nice and organized. The web design was done on Figma.

Server scripts (Rust)

Our server scripts are written in Rust to leverage its robust type-checking and memory management. We make REST API calls to Github and use them to update our MongoDB database.

Command-line interface (Python/Golang with Bubble Tea)

Our CLI started as a simple Python script that would populate our DB with a repo's data. It directly used the Github API to request repo information and use that as an identifier. It also directly integrated with our Golang routes to update repo information.

Since we had extra time, we wanted the CLI to be more visual, so we created a v2 with Bubble Tea powered by Golang - shown above.

Challenges we ran into

frieren_fern

While Rust is very cool and give great performance, strict type checking and concepts that were new to us like borrowing references made programming with this new technology a fun challenge.

Additionally, while Github API served as a powerful engine to facilitate our scripts, we ran into a lot of rate limiting issues.

Accomplishments that we're proud of

We've made it a tradition to always learn something new during a hackathon. We all had little to no experience with Rust and Go, so this tech stack was a new learning experience for all of us. We're proud that we manged to make a working application with this tech stack. We call it the PR(i)NG(le) stack.

What's next for frieren.

Integration with Github's OAuth would allow us to add repos through a GUI, and we also are looking into integrating other source control platforms like Sourceforge and GitLab.

Built With

Share this project:

Updates