Skip to content

Instantly share code, notes, and snippets.

@lolkinetzky
Last active July 15, 2021 16:40
Show Gist options
  • Save lolkinetzky/ba37ad5315999651899a0bd4aa9bd58d to your computer and use it in GitHub Desktop.
Save lolkinetzky/ba37ad5315999651899a0bd4aa9bd58d to your computer and use it in GitHub Desktop.
capstone concept: scissors class l.o.

Capstone Concept

Laurel Olkinetzky

Problem Statement #1

      A "time bank" consists of people who have agreed to use time as currency amidst members. It's likened to a gift economy or bartering system that values skills of every kind and supports strengthening an interdependent, self-sufficient, and connected community. While there have been many attempted technological implementations of the time bank model, there are two main issues that have not been resolved: the reliance on the commitment of a single organizer, and bad or outdated tools and UI.

      It has become a cliche in the world of alternative communities to hear "what happened to the 'x' timebank?" Member engagement is often dependent on one organized and connected individual. The organizer keeps the community connected and engaged. This person recommends member connections based on skills and personal interests, tracks hours within the community, and organizes socials. When this person moves or becomes too busy to connect others, the existing system’s weak UI makes it practically impossible for members to meaningfully connect, lacking the organizational knowledge to do so. Based on the UI alone, a member may not know who is active in the community, and what skillsets other members possess. Without this contextual knowledge, a time bank is doomed to fail.

      Many of the existing tools mentioned fall just short of replacing that organizer role, often only tracking earned hours. The functionality of the existing tools and UI usually amount to a message board, public posts, and a record of total hours exchanged and individual's earned credits. Many timebanks simply organize on an existing platform such as Facebook Groups, and leave the members to track hours elsewhere. Information noise builds with posts that aren’t relevant to the user's interests or skills. Without a few successful interactions, engagement slowly declines and timebanks deteriorate.

      The concept of a Holacracy lends some solutions for these issues, and the ideals supporting a Holacracy compliment the goals of a timebank. A Holacracy revolutionizes how organizations think of managing and distributing responsibilities. Rather than a top down organization, it values distributed authority and embraces self organizing networks. Roles within a Holacratic organization are dynamic, clearly outlined, and can be shared. While this concept was intended for labor of a different sense, if a time bank tool were to adopt this model, user interactions and total banked hours would increase. By providing clear roles and skills of a member within an existing time bank's structure, more organic cooperation and interactions can occur.

      My goal is to create a web app that fuses these concepts into a fully functional time bank tool. This app needs to be particularly performant and up to date with the technologies available today, in hopes that access to a more invigorated and modern tool will encourage more timebanks to form and stay connected. My learning goal is to build something that can scale well and is closer to an industry standard than anything I've written before. Long term, post Ada, I intend for ML tools to live in this app that can leverage social filters, sentiment analysis, and monitor activity to connect and recommend members.

MVP Feature Set

  1. Users can navigate a more intuitive UI
    • skill request posts are attached to skills: Users can navigate posts by tag of requested skill
    • roles (skills) are attached to user profiles: users can navigate users with a specific skill, or specific role
    • skills and roles are displayed on user profiles
  2. Users can define, manipulate: role domains and skills
    • pass off roles to, share moderator/organizer roles with, other users
    • draft new roles specific to the particular timebank
  3. Time bank logs user interactions, tracks time credits
    • asks if a timecredit was exchanged after a string of messages, reminds users to submit a timecredit exchange to bank
    • users can independently submit or log time exchange, have to provide detail of skill exchanged, app adds skill to profile or in tag

Potential Additional Features

  1. Members earn a credit equivalent to 10 minutes for posting a picture of them disposing of someone else's dog poop at a local park or public nature trail. 20 minutes if it was unbagged.
  2. Have an additional type of profile for Organizations to do outreach. Offer these profiles tools to recruite and organize volunteers: tools similar to 'sign up genius' and google forms; anything that can unburden some of the responsibilites of a volunteer cooridinator. Volunteers can earn credits for this time or choose to gift earned time to the bank. Time Bank app identifies members that need to use a time credit before they have had a chance to earn one and distributes them.
  3. Elixir has an good way of pluging python trained ML models directly into it; it would be awesome to integrate that some day and make some of the previously mentioned tools AI driven!
  4. Implement a check that someone can't sign up and earn more hours than humanly possible.
  5. Build and enable messaging or email buttons; Automate sending reminders or texts to people within the community.
  6. Allow members to leave reviews or endorse other member's skills.
  7. To be more specific about potential feature 3, I was inspired by a post on reddit wherein someone in missoula was looking for a ride to a reproductive health clinic in missoula. I thought of the sensitivities around that, espeically so in a small town. If the relevant posts feature could not only connect based on skills offered (there may be a rideshare skill domain), but could also be alerted to send a sensitive post only to identified safe persons, and was able to intelligently provide some anonymity from the other posts of that user.
  8. Home feed has automated filters to only show relevant posts to user first
  9. Older posts or posts of inactive users change in display over a period of time
  10. App reinforces or uplifts volunteer opportunities from Organizations to timebank users, rewards users with credit for getting friends to sign up.

Draft Technology Choices

  • Elixir, Phoenix Liveshare, OTS/ETS, Postgres, OAuth?, deployed on Heroku
  • ...maybe python, node, elixir?

Additional content, diagrams, wireframes, user flows, etc.

Ask me about the tutorials I am doing.

@lolkinetzky
Copy link
Author

The mvp feature set is a mess, agreed. Sorry about that, I will try and focus on where to slim it out and pull many features out to be earmarked for stretch goals.

Phoenix uses a server called ecto. It is basically Postgres and you have to install Postgres as a dependency, which is why it is listed there.

Phoenix is a web framework for elixir and it has a feature called liveview. It allows the dev using it to develop rich applications without writing custom JavaScript. JS And I are ready to be apart for a while... I thought full-stack style sans JS sounded like a dream come true. Phoenix describes liveview as “server side react”
It tracks state for you, uses the functional aspects of elixir to pass connections or state changes through a pipeline of functions, finds the appropriate logic to handle that change, then sends a message back to adapt what the user sees. and its super fast too! It utilizes the erlang-borrowed-aspects of elixir. It handles assets with a little bit of node.js I think? I’m still on the chapter that covers channels and presence which have to do with the ‘front end’ part, so I don’t think I can explain it very well bc I’m still getting there myself.

Elixir & Phoenix make it seem like a web server app is a natural problem for a functional language to solve. I thought maybe kaida could be able to help since she is familiar with functional programming languages. I was also hopeful that since the syntax of elixir is heavily influenced by ruby, it may translate to instructors more than they’d anticipate? (this case would be relying on if I could explain what I was trying to do clearly when blocked maybe?)
Perhaps if I could get the simplest of web apps up and running to prepare for our meeting, you could gage if I was able to explain it clearly... then we could make a decision together on if it would be too tricky of a learning ramp-up?

In defense of this tech stack choice, Elixir and Phoenix has a super committed team that value clear documentation, so much so that I’ve been able to navigate it, which is saying a lot. That being said I’m not entirely married to the idea, ...but simply have found this specific community to be way more welcoming than other functional programming language communities, and I think ansel had mentioned that it might be good timing to dive in to functional programming paradigms before my brain hardens on other ways of doing things.

The special purpose that elixir is designed for is to quickly build up a highly performant yet simply written web app, one that scales well later without having to take it down or rebuild it. Think Ruby on Rails and how simple it made the process of shipping things and getting something up and running, but without the long term downsides that gives Ruby on Rails a bad wrap these days (I’m not down with the hate I’ve read about ruby, btw, I thought it was a joy to write in when I had to play with it for my previous two Ada applications)
I really like how it could handle messages and broadcasting to users, making multiple api calls at once, I think it’d be a good choice for this web app specifically.

@jmaddox19
Copy link

This all sounds so well thought out and exactly what you were looking for!

To respond to:

Perhaps if I could get the simplest of web apps up and running to prepare for our meeting, you could gage if I was able to explain it clearly... then we could make a decision together on if it would be too tricky of a learning ramp-up?

I want to clarify that it is absolutely your decision. My role is just to offer input based on my previous experience seeing students work on Capstones. In this case, I think my input was largely irrelevant because it sounds like you had already considered all of those things and thoughtfully decided this was the right choice for you, which is great!

I think coming to our 1:1 conversation with the experience of building a very simple "hello world" style app will hopefully be very self-assuring! I noticed there's a 18 minute video for building a "Twitter-like timeline" on the home page, so hopefully that is helpful in building something like that fairly quickly!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment