One of my greatest passions is community & I have a deep belief in doing your part to contribute back to your community and do the part you can to help it thrive. For every dollar spent locally, that dollar circulates an average of 3 more times through that community before leaving it. That's circulating through 3 small businesses owned by parents saving to put their children through college, 3 teenagers earning money for school sports, 3 shops that provide places for the community to gather. Money spent locally can have a big impact on a communities ability to thrive so I've been thinking about what things can be done to encourage buying local. One of my friends is a crafter. She has traditionally used platforms like Etsy to sell her items but has been struggling with the impact of shipping costs. She asked me if I knew how to go about finding places that would let her sell her items out of their physical shops. I did not, but I could think of many local shops that had extra space and could easily offer that. This got me thinking, why didn't they? So I started asking them to find out. The biggest things I heard were they didn't have an easy way to manage it & they didn't want the transactions going through their POS system. So I decided to create a solution that solved both my friends problem of how to find places to sell her items and the shops problem of not having an easy way to manage it.
What it does
mrkntile aims to solve 2 main problems:
- Help local sellers without a physical location find shops in the area with extra space willing to display their items.
- Provide both parties with the tooling they need to easily manage the partnership by integrating with their Square accounts so the shop can take payments directly on behalf of the seller.
How we built it
Mrkntile is currently solely web based. In the future I plan to add native apps but I want to keep web as the primary use case. One of the biggest things I've learned in beta testing is setup for employees needs to be EASY. Downloading an app isn't difficult, but its one more thing the manager has to have employees do. With a web based solution, all the employee has to do is scan one of the shops account QR codes & it will automatically take them to the site and log them in. As for the technical choices, the site is built on a react / rails stack and centers around the concept of Shop entities and Sellers entities. Both shop & seller entities can own IntegrationConfiguration entities which hold all the information about their given integrations including square. All endpoints are permissioned based on a granular permission system but sensitive information like square access tokens are also encrypted both at rest and in any payload returned. Thus, these values are only decrypted at time of needed use right before applying them to headers for requests to Squares APIs to provide the most secure experience.
Challenges we ran into
One of the biggest challenges has been integrating with the Terminal API. Currently Square's Terminal API does not support displaying checkouts to terminal devices where the device is not owned by the same account as the the payment. I have a feature request open to enable this: feature request Currently the site is setup based on the model where the shop creates device codes that are owned by the application & when the shop goes to checkout a sellers item with that paired terminal device, the checkout request is made with the sellers oauth generated access token. This means when using mrkntile with the connected devices options, the checkout object will be created but will never be displayed on the terminal device. I'm hoping this feature request is accepted but if not, the terminal checkout option will be removed from the app before I take it out of beta as there is no helpful use case in the context of mrkntile's goal to have a terminal device at the shop that can only be used to checkout a single seller. Currently, shops can accept card payments for the seller by manually entering them through the web payments SDK as an alternative.
Accomplishments that we're proud of
- Shops can accept payments through square on behalf of the seller
- Configuration options allow the shop and seller to customize how mrkntile interacts with their square account to best fit there existing process
What we learned
As I touched on before, one of the biggest things I've learned is EASY EASY EASY as possible for the shop employees without compromising security and quality. This was the motivation behind implementing QR codes for all the products created in mrkntile. Transactions can be created manually but the QR code allows for a much easier experience for the employee. In addition, I added the concept of shop owned accounts to make onboarding employees as easy as possible. Shop owned accounts can be generated by the shop and have limited functionality only for that shop. When one of these accounts is created, a QR code is also generated that can be scanned to log in as the limited use user. This give the shop full control over the account & makes it very easy for the employee to login. The downside to this is that anyone with the content of the QR code can log in as that user. The password contained in the content body is encrypted so its not directly viewable but if entered in the staged login url it will authenticate the user as is its intended functionality. To mitigate this, if the shop is concerned the QR code content has become compromised, the accounts permissions can be revoked at any time.
What's next for mrkntile
I currently have a coffee shop from my home town & a group sellers beta testing the site for me to help identify needed features & find bugs. My dream for mrkntile in the next few months is to polish the site and fill in the remaining product gaps while working with my shop beta testing it. The biggest feature I want to add is to allow sellers to sync their products with items in their square account for better logging and reporting. Once the product is market ready, I plan to market it to other coffee shops with extra space to help enable & promote buying local in their communities.