There are times when I want to get something done but I just need someone knowledgeable to talk me through it. For example setting up and getting started on a machine learning tool. It would be a lot easier to be guided through it rather than reading countless web tutorials which might not specifically suit my use case. This is where the idea for foobash came from. A community of real-time online helpers!
In all practicality, a stranger is perfectly capable of helping out another stranger. Imagine if I could post an issue anonymously to a bulletin board and the first person to pick it up gets to help solve my issue in a real-time chat. foobash is about harnessing the active cohort of helpful peeps across the world. No strings, no thumbs up, no scores, no ratings, just that good old feeling you get when you help someone out.
Even if a stranger couldn't answer the question, they can post a question to Facebook (using an integrated process) and someone in their network could connect and solve the problem. Harnessing social networks to distribute the question but not the person can help support good privacy whilst bringing the community together.
What it does
foobash lets anybody propose a conversation on any channel. It lets anybody view the proposed conversations in a channel. It lets anybody share a proposed conversation to their network on Facebook. It lets anybody connect to a conversation on a specific channel and start a two-way chat. Unanswered questions will eventually expire in the system. The questions and conversations also expire from the database after a period of time.
Essentially, foobash lets anybody help anybody to get stuff done.
How I built it
The backend has a core chat database sitting on AWS DynamoDB, with a direct connection to API Gateway and a few AWS Lambda custom authorizors and backed usage level monitors to keep things secure and controlled. The frontend is a single HTML5 page with zero includes to keep things fast and private. The coolest part of this app is a special 'share' API which generates custom tags for Facebook's open graph meta tags thus enabling dynamic content and hot-linking after the user clicks one of foobash's custom Facebook sharing links.
Challenges I ran into
I found it hard to get the data model and data sources right such that the app would be secure yet completely open. I also wanted users to be able to share snippets of code with each other, so it took a bit of fiddling to get the formatting and escaping done right.
Accomplishments that I'm proud of
I got to build a really fun tool that is also pretty useful. I also discovered a bunch about the Facebook share plugin, crafting custom URLs and ways to tailor open graph meta-tags streamline usage behaviour. I'm quite happy with the outcome.
What I learned
Browser based messaging is tricky, and doing it with serverless technology makes it trickier. I am happy to have built a solution which is light weight and can easily scale out.
What's next for foobash
I want to look into proxying the proposed questions through a Facebook messenger bot to get wider device reach and let users take advantage of more familiar messaging experiences. Other things include further development and documentation of the underlying API (api.foobash.com). And I also want to build an Android app and add browser push notification integration.