Theodora: Starting an Open Source Project
Tags: ruby, rails, opensource
Published: 2018-06-29 18:12:39

---
title: "Theodora: Starting an Open Source Project"
published: true
description: 
tags: #ruby #rails #opensource
---

I'm building an open source rails app aimed at empowering nonprofits to efficiently manage government grants. It's called [Theodora](https://github.com/hcarnes/theodora) 👑. Large nonprofits often have a structure where one adminstrative organization distributes grant funds across multiple smaller nonprofits. This structure is (sort of) similar to how fast food 🍔 chain businesses are affiliates of a central corporate office. 

This post will share the steps I took toward creating Theodora as an open source project. Here is an overview of each step I will discuss:

* Determine the Goal
* Determine the Stack
* Determine the Architecture
* Sketch the Idea
* Create a Wireframe
* Use Zenhub

## Determine the Goal
Theodora will allow an adminstrative office to manage documents for each local nonprofit through a single app. Without this app, documents would have to be sent through email, resulting in multiple attachments. Sending and receiving information through email attachments creates room for human error (forgetting an attachment 😱, receiving attachments over multiple emails, etc.). 

Theodora aims to solve this problem by providing one place to upload and submit all documents. In the future, I would like to add the ability to create document templates, so that users fill out forms instead of uploading Word or Excel documents. 
<img src="https://i.imgur.com/15lULox.png?1" alt="Log in" width="500px"/>

## Determine the Stack
Ruby on Rails is an opinionated framework that will allow me to set up the application quickly. There is a large community of Rails developers to learn from, as well a sea of libraries to choose from when building out features. For the MVP, there isn't a need to use a JavaScript framework for the frontend. As I build out more interactive features in the future, I plan to use React.

<img src="https://upload.wikimedia.org/wikipedia/commons/f/f1/Ruby_logo.png" alt="Log in" width="100px"/>

## Determine the Architecture
Because each local nonprofit will need to log in to upload, edit, and submit documents, Theodora will be a multi-tenant Software as a Service (SaaS) application. Multi-tenancy means that multiple administrative organizations can employ the same application. This way, developers only need to maintain one code base while offering the same service multiple to organizations. For Theodora, administrative organizations will be the "tenants" and the local nonprofits will be the "users".

## Sketch the Idea
To get started, I sketched out the Minimum Viable Product (MVP). My goal was to quickly draw out my ideas, so that I can easily build out a more detailed wireframe.

<img src="https://i.imgur.com/iLqCV14h.jpg" alt="sketch" width="300px"/>

## Create a Wireframe
Next, I created a wireframe using [Balsamiq](https://balsamiq.com/). I chose Balsamiq because I could use the free trial, and it was easy to use. 

>Note: If you want to export your wireframe to PDF and PNG, Balsamiq creates a low quality document. There are other tools, like [Sketch](https://www.sketchapp.com/),that allow you to quickly build web and mobile wireframes and also export high quality documents.

I used Balsamiq to formulate this plan:

Prompt user to log in either manually or through Google.
<img src="https://i.imgur.com/yGeDWIG.png" alt="Log in" width="400px"/>
If the user clicks sign up, have user sign up and ensure they choose an organization. Signing up immediately logs in the user.
<img src="https://i.imgur.com/t0TTkp0.png" alt="Sign Up" width="400px"/>
Once user is logged in, show them a custom organization page where they can upload documents. If all documents are uploaded, user can submit documents.

<img src="https://i.imgur.com/0lTXCii.png?1" alt="Organization Page" width="400px"/>

After user submits documents, show a confirmation message, as well a link to ask the administrator questions.

<img src="https://i.imgur.com/zCBwMKc.png?1" alt="Confirmation" width="450px"/>

## Use Zenhub

With a plan for the MVP, I could easily begin developing with a clear goal in mind. I created a repository for Theodora in Github and created a [ZenHub Board](https://www.zenhub.com/guides/setup-my-zenhub-boards) to visualize the workflow and allow others folks to contribute to issues. I've already had one person submit a pull request!

<img src="https://i.imgur.com/2BKUHUV.png" alt="workflow" width="400px"/>

## Next Steps

At this point, it's time to start researching and coding. I hope this post will perhaps inspire others to collaborate on the project. Stay tuned for a new post on building out multi-tenancy in Rails, and feel free to reach out if you are interested in learning more.