I'm building an open source rails app aimed at empowering nonprofits to efficiently manage government grants. It's called 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.
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.
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.
Create a Wireframe
Next, I created a wireframe using Balsamiq. 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,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.
If the user clicks sign up, have user sign up and ensure they choose an organization. Signing up immediately logs in the user.
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.
After user submits documents, show a confirmation message, as well a link to ask the administrator questions.
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 to visualize the workflow and allow others folks to contribute to issues. I've already had one person submit a pull request!
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.
Top comments (5)
Thanks for your interest, Alex! That's cool that you've worked with nonprofits that use open source software. Do you know of any specific open source software that is commonly used by nonprofits? I would like to check them out.
Hi, I didn't find balsamiq in the link from your article as free.
Or what you actuallly mean is "Free Trial"?
Thanks for pointing that out. It's updated now.
Wow! Thanks for the insight. I will definitely check out ActiveAdmin, as well as potentially integrating with a chat service. Great ideas.
Cool! I just emailed you.