Making of “ClearFund” – Rails App

By May 19, 2019 Uncategorized

It took me a few days to decide what I was going to make for my rails app portfolio project. I decided on making a democratic charity called “ClearFund”. The idea is a charity with membership, proposals, and voting. Proposals are funded according to how many votes they have, memberships allow members to vote, but they also incur membership dues. Membership dues can be set anywhere between $11-$150 a month. Every 1 minute the membership is active, the proportional amount is withdrawn from the member’s account. As the app is currently implemented all funds are imaginary, but if I continue to develop the project I could implement user bitcoin wallets and if the user ran out of funds in their wallet their membership would be canceled. The proposals could also be funded via bitcoin, likewise donations. I hope I can do this in my free time. If I wanted to make the app really special I could make a private ethereum chain, and use that to process memberships. This is all to say that the app currently does not accept money, but using a real-time payment mechanism wouldn’t be ideal for a payment processor that charges a flat minimum fee (credit card processors). The app is intended for use with micropayments. As previously mentioned it is possible to integrate a private ethereum chain for payments into the app but, furthermore, a percentage of the ethereum mined on the private chain could be used to fund active proposals. Hopefully, this discussion explains some of the simulated payment functionality.

Overall I took this project as an opportunity to explore some new features of rails apps. Most notably, cron jobs, activerecord relationships, and jquery ui elements. Personally, I think the idea is interesting because it can be difficult to trust that money donated to charities directly benefits the people it is intended to help. ClearFund outsources the management of a charity organization to membership holding users, this yields efficiency as well as equity. I see the project as the base for a small scale decentralized charity. Along these lines of reasoning, the app would only be useful if more security features were implemented. For example, once a proposal is funded, the proposal creator would be required to provide periodic updates in order to keep their account in active status. Subsequently, such a “good faith” culture would need to verify someone’s real identity via a passport if someone’s active account status was all that was at risk. Even this might not be insurance enough. Some ideas for increasing security: deposit could be required for user creating proposal, as well as some number of consecutive months of membership. These measures would help to reduce fraud, but I suspect at full scale more comprehensive security features might have to be implemented.

Once I had decided on the project I wanted to work on, I quickly realized that I couldn’t implement a fully functioning payment system, due to the inherit security vulnerability of the platform. Only if I was to further develop the application to make it “trustless”, would I want to add payment functionality. Currently, all data is stored on the server computer with no admin protections, if the data was being stored on a blockchain, then the payment system could use the api of that blockchain for data verification and storage. The only way a democratic charity can exist is with a decentralized method of payment and subscription. Some of the logic for processing memberships, donations and funding proposals could later be extracted to a smart contract, but the app in its current form could be adapted to using bitcoin as well.

The development of the project went relatively smoothly. I spent some time, in the beginning, learning some jquery which I later discarded. I learned how to write specs for my rails project which I currently have only two implemented. I also learned how to create cron jobs which were useful in the end, but at first kept crashing the virtualbox IDE. The project lended itself well to the project requirement, I was forced to add comments to votes, but I think it integrated well. In the future, I hope to add mandatory project updates, deposits, and cryptocurrency payments to enable to app to be fully functional. The interface and explanations of the philosophy behind the project could be expanded, as well as some kind of forum for members to discuss potential project ideas.

The most difficult part of the development process was learning about some of the difficulties of using many complex associations on the same object. Describing some of the details of the concept of the app proved more difficult than I expected. Developing UI for the app was relatively straightforward as was routing, validations, user authentication, and third-party authentication (Google). One aspect that proved conceptually difficult was the modeling of a Treasury object. My app relies on a Treasury object that is meant to simulate a blockchain database. The object is currently implemented to be created when the app is used for the first time. All payments and donations are processed through the Treasury object. In order to adapt the app to a blockchain, the Treasury object could be replaced with an object representing a blockchain api connection. I’m considering adding a longer disclaimer on the homepage describing the current shortcomings of the app.


I will post a video demo here once I record it.

Leave a Reply