Inspiration
As developers ourselves, we noticed that the Github Mobile app lacks features that allow users to connect with actions on their repositories. We decided that we could make an iOS app that would act as an extension to Github and provide this missing functionality while also serving as a general app that developers could use to manage their projects on the go.
What it does
Our app is an OAuth app, so the user signs into Github on our iOS app, and we save the token through our custom REST API to a Heroku PostgreSQL database. Then it provides four significant functions to users:
It forwards major actions (like opened issues/updated commits, pull requests, etc.) to text messages using Twilio to allow users to get live SMS notifications when significant changes have been made to their projects.
It compiles Github notifications to be able to be viewed in the app
It allows users to browse their repositories and assign Twilio text notifications to specific repositories
It has a custom idea board (synced across devices) where developers can track their current tasks, ideas, and assignments for later
These tools are not designed to replace Github Mobile but extend its features to facilitate a more "on the go" experience. Text notifications on commits, PRs, issues, and more can allow developers to keep updated with their repositories. The idea board enables developers to keep track of ideas when away from the computer. Notification compilation allows developers to see all of their notifications at a glance.
How we built it
The IOS app is built using SwiftUI (Apple's new declarative framework) and AlamoFire for handling requests. It also uses combine and Swift’s new async-await language feature for simplifying handling data flow. The IOS connects to Github using the Github API to generate a Github OAuth token.
This Github OAuth token is then sent to our custom API. Our API is a dockerized python-fastapi REST API that is deployed on Heroku cloud-hosted docker service and also is connected to a PostgreSQL instance and a Twilio client.
When the Github OAuth token is sent our API, a new user row is added to our SQL database. Then the IOS app allows the users to choose which repositories they would like to assign SMS to and then sends a request to API with the repository information. The API then uses the Github API with the OAuth token to add a /webhook to that repository.
This /webhook function sends "POST" requests to our API on major actions of our choosing (such as pull request, commit, issue, etc). Then, whenever the API receives a request from the webhook, it parses the data into a simple text and sends it via a Twilio Client over SMS texts to the relevant user. In this way, every time something happens to the user's repository (and they can choose what events to listen for), they will get SMS notifications.
The notifications compiler and the repository viewer use the Github API. The purpose to have important data visible at a glance.
The project-board with the list of tasks and reminders is built using PostgresSQL and the python package psycopg2 (installed on our API). The iOS app sends requests with updates the project board that the user makes and these updates are then stored in the database.
The API is dockerized using docker-compose and deployed on a Heroku cloud container in order to ensure smooth, reliable and fast server operation.
We also have a website which acts as a product demo (see in links) that is coded using simple static html/css and hosted with GitHub-pages.
We used Github-actions as well in order lint code for seamless deployment.
We used Github-project boards as well to keep track of our assignments and enable effective collaboration. This automatically opens issues in the respective repositories which allows us to keep track of necessary changes and where they need to happen.
Challenges we ran into
This was our first major app using OAuth as a result it was a little confusing to implement. Our web framework Fast-Api does not allow for redirects that parse html data and enable cookies, as a result we had to bug fix when the app was on mobile for Github API commands.
The Github API also had a slight bug with the /webhook add function where it failed to convert JSON request data. In order to get around it we had to send the data in a different format than JSON (we used URL Encoded data).
Accomplishments that we're proud of
We are proud of setting up a full tech stack in only a day and of learning a lot about integrating the frontend and the backend. Although we dealt with bugs, this was a great learning experience.
What we learned
We learned about our respective languages, frameworks and packages. We learned about Github and the Github API works. We learned about OAuth and how tokens work. We learned about Twilio and how to send SMS messages.
What's next for DevVerse
Expand to involve more interaction with Github, like mobile commits.
Log in or sign up for Devpost to join the conversation.