I've been around small businesses for my entire life: My dad is a small business operator (he runs a dry cleaners that's literally located on Main Street in our hometown), and some of my earliest memories are of being in the store. At other jobs I've had at family owned and operated establishments, I've seen an emerging pattern: owner/operators have a great deal of expertise in their industry and are well-networked in their communities, but many struggle with technology and often haven't maximized the potential impact that innovative tools like Yelp, Facebook, and Twitter can have on their small businesses. Inspired by Yelp's hackathon, my goal was to build a platform that makes it easy for small business owners and managers to monitor their business' presence on the web and maximizes the impact of the tools available to them on the web all in one place.
What it does
This web-based application allows a small business owner or manager to claim his or her business in order to monitor the business' online presence (reviews on Yelp, mentions across a variety of social platforms)— all in one place. Additionally, MainStreet connects small business owners and managers with others in the same industry and/or location through community discussion boards. Owners/managers can post updates to a local bulletin board on behalf of the business and network through industry-specific communities.
How I built it
I began by cloning the angular-seed project from Github. (It's a very useful, bare-bones SPA structure that helps lay a solid foundation - I highly recommend it). Then, I integrated a user credentialing system using Firebase, allowing users to sign up or authenticate using email, Facebook, or Twitter. Since Firebase hosts the static files, I also needed to spin up a Node server on Heroku, which handles my API calls. I then used the Yelp Search API to allow a new user to search for and claim his or her business and store its information in my database. Based on this information, the user is subscribed to a discussion board that's based on the business' primary category and given permission to post to a local small business bulletin board (which includes all businesses in Zip codes that are part of the same city and state). If the business is not claimed on Yelp, the user is prompted to go to Yelp's site in order to configure their business there before they are able to see reviews on my site. Additionally, an integration with Social Seach's API uses the business' information to search for mentions across social media platforms and display them to the user. If a business is not claimed, the application displays data from Yelp's business listing through Yelp's Business API. The small business communities, which are broken down into specific categories and sub-categories, are also based on Yelp's API structure. Additional integrations included Sendgrid (for sending transactional emails) and Amazon (for storing images). I also configured users, businesses, and the relationship between their objects in my database to allow for multiple users to manage a single business.
Challenges I ran into
My two biggest challenges in building this project were (1) Configuring the node server to work with my static files on Firebase and (2) structuring my data in a way that allowed for multiple owners/managers to maintain a business. Allowing users to send invitations to others who can help manage the business required a complex set of permissions, which was further complicated by the ability to send and accept invitations by email. I've also run up against an API provider who isn't yet providing SSL - but have been in communication with them and hoping to have things fully SSL-compliant soon.
UPDATE: SSL has been made available for the social search data, and I've updated my server files accordingly :D
Accomplishments that I'm proud of
While I've built applications using Angular before, I was able to avoid using a server by limiting my interactions with third-party apps. I set out to integrate multiple APIs (i.e. Yelp, Sendgrid, AWS) and achieved that. Additionally, I am pleased with the simplistic design/UI that I designed. Even though it's too early to collect user feedback, I feel like I achieved my objective of creating a UI that's easy for business owners and managers to use, even if they aren't tech-savvy.
What I learned
Over the course of this project, I learned how to utilize three different 3rd-party APIs with a combination of Firebase, Angular, and Node. I also learned more about hosting and configuring a node server. From a UI/UX standpoint, I also devised creative solutions for sharing the management of a business, claiming/reclaiming a business' page, and handling community management by both industry (through the use of Yelp's categories and sub-categories) and location.
What's next for MainStreet for Small Businesses
I'm prepared to get the word out to small business owners now that the app is live in production and my security rules have been configured. I'm also hoping to allow users to message each other, create businesses that aren't listed in Yelp (I didn't develop this because I was concerned about duplication/authenticity), and a more robust integration of social media management capabilities for small businesses (for example, allowing a user to post to their business' Facebook page and Twitter account). I believe some more social media monitoring and management capabilities would also allow for a paid subscription model. Before building out any changes, though, I'd like to get a few users and collect some feedback about how they're using the site.