$O$ - Nonprofit Startup

Tools Used: BotKit.ai, Twilio, NodeJS, MongoDB, Kubernetes, Illustrator, Cricut Maker

$O$ is a national non-profit startup focused on helping people experiencing poverty and homelessness. Our members and volunteers hand out cards to people with our phone number on them, and either a gift card, cash, or a personal note inserted in the card.

My Impact

  • Got more than a dozen people off the street and into permanent housing
  • Fed 100+ people in partnership with our local Taco Bell franchise
  • Developed a volunteer program to talk to people experiencing homelessness via SMS
  • Made partnerships with other local and national organizations to help as many people as possible
  • Met with congressional representatives and talked with them about our mission as it relates to policy

The Team

  • Alan U. - Executive Director
  • Elliott B. - Research
  • Angel B. - Fundraising
  • Daniel N. - Operations
  • Mandolin C. - Volunteer Coordinator
  • Courtney B. - Special Adivsor
  • Gary C. - Special Advisor
  • Morgan U. - Office Manager
  • Harold R. - Web Design
  • Austin L. - Developer

and more than a dozen volunteers!

$O$ Card Front and Back

Cards can be personalized with a name, note or hashtag such as #GivingTuesday.

$O$ Card Open

Space is left at the top and bottom for stickers, personal notes, or co-branded inserts.

$O$ Pivot - Featured at the LexLab 2020 Hack Homeless Challenge

When the COVID-19 pandemic hit, we were no longer able to provide food for people who needed it, so we needed a way to help people entirely remotely. At the 2020 Hack Homeless Hackathon sponsored by UC Hastings Law School in San Francisco we presented the following pivot toward becoming a service to help people recover their IDs and register to vote.

Scenario Map


Storyboard panel 1

Storyboard panel 2


Storyboard panel 3

Storyboard panel 4


Storyboard panel 5

Storyboard panel 6


Storyboard panel 7

Storyboard panel 8b

Greeting Flow

When a person calls or texts the phone number, they are first sent a series of automated welcome texts, ending with a text asking for their name. After being greeted by a volunteer and asked if they have any immediate needs, they are asked a series of questions by an automated chatbot. The answers are stored, and they will then be used to help them see which social services they qualify for. We help with any immediate needs we can and then refer them to the appropriate service provider.

Almost all people experiencing homelessness — up to 95% — have cell phones and as many as 75% of them are smart phones. We use SMS as the lowest common demoninator because it works for all phones, even wifi-only smart phones with the use of an app. Our platform, BotKit, allows us to expand to other services, but we have kept it simple for this implementation.

Greeting Flow

Text messages are routed through Twilio into a Discord chat server. Each phone number is assigned to a Discord channel and mods or volunteers with appropriate permissions can enter the channel and interact with the user.

Blurry Screenshot of Discord

Blurred Screenshot of our Discord Server

Messages sent to the Discord channel are then sent to the user via SMS without identifying tags, creating a seamless experience for the end user. It is this seamlessness that allows us to transition between human and non-humans to create a hybridized chat flow.

Automated Question Flow

Once the user has been greeted, the first question in the automated question flow is, "What do you need most urgently" to draw the person into conversation and to make sure that they don't need emergency services.

"What do I need the most? I'm homeless. I need a house. If I had a house, I wouldn't be homeless." Anonymous survey participant, Las Vegas, NV

After a few moments of greeting conversation, we tell them that we are going to have a volunteer come into the channel named Anna and Anna will ask a few questions. Anna is a bot, but with a proper introduction most people don't mind. She may be a bot, but it's still better than filling out forms.

Anna can be paused or stopped by either the user or a moderator, and at any time a human volunteer can be summoned by asking a question. Questions from the user automatically pause the bot and notifty the volunteers that a human is needed in the user's conversation channel.

Questions file in JSON

Questions flows are created manually in JSON and loaded into the bot. Mutliple question flows can be used by creating multiple instances of the Anna bot, each with its own questions file.

After the question flow, we usually have a volunteer return with specific information regarding their original request. Requests ranged from helping to recover lost ID documents, help finding housing, or in one case help providing Christmas to their kids in a transient living situation. In most cases though, the most urgent request was for food. For those people, we would give them a donated digital Taco Bell gift card that would allow them to choose a meal from the Taco Bell menu after they answered our questions.

What do we do with the data?

The questions we ask are a mix of the most common questions on forms that are used to request government or non-profit assistance. We store their answers in an MongoDB database that can then be queried for form-filling later. If they ask us for help with food, for example, we can use the information they have already provided to help them apply for CalFresh or other food assistance programs. This saves us from having to ask the same questions twice for multiple forms, and it allows us to collect the data that we are interested in as well.


Before going out on my own as an entrepreneur I validated this idea in multiple ways, first and foremost by taking it directly to the affected communities. I feel strongly that it isn't right to build services to help marginalized communities without being in direct contact with those communities.


Even though I was not homeless many of my friends, and friends of friends were. These people went out to communities of unhoused, either temporarily or long-term, and ran our survey questions manually without phones or automated chatbots to vet the questions and make sure that these are the ones we should be asking. Elliott, our research director, oversaw and coordinated this effort.

$O$ Post-It Notes

These are the original Post-It Notes that were on the wall of my apartment as we were working on the conversation flow, as scanned in by the official 3M Post-It Note mobile app.

Funding Model

To validate the funding model, I went to the Hive Global Leadership Summit, a conference of entrepreneurs for social good and talked to business leaders from the United Nations Foundation Entrepreneurship Council, as well as venture capitalists and social enterpreneurs of all stripes to make sure that they would be interested in supporting an idea like this. I followed this up by asking founders and executive directors of existing and successful non-profits and social enterprises for feedback. Finally we tested the cards on both donors and recipients by offering them for sale online in limited quantities and then testing the results of those limited run sales.

Card Design

The card design was done over several iterations in Adobe Illustrator. The cards were printed using an Epson Expression 960. They were cut, scored and perforated using a Cricut Maker. Card design iterations were tested by handing them out, soliciting feedback from donors and potential donors, and by surveying recipients.

Development & Deployment

The bots were developed in NodeJs using BotKit.ai for Discord and SMS (via Twilio). The scripts are short, only about 100 lines long, so development was not a major factor for us, except while developing the question engine. Once we had a reliable question engine, it was simply a matter of cloning question bots for different question flows.

$O$ VS Code

The bots were originally deployed to gCloud with Kubernetes but we found it to be overkill for our application and to cut costs we now deploy them to a single VM hosted on DigitalOcean.