Want to hear my favorite perk of getting married? Beware, it's pretty dorky... You ready?

ACCESS TO MY WIFE'S DATA.

I was in search of my next side project about four months ago. My wife quickly volunteered me to handle her Etsy product advertising on Facebook. She wanted to take her listings on Etsy and quickly create marketing campaigns using product images, titles, and descriptions. After a night of painfully searching for the same images used on Etsy while copying/pasting endless descriptions and titles I started to think to myself, "There's got to be an easier way." My engineering brain kicked into gear.

I spent the rest of that night researching the Etsy and Facebook APIs. If you aren't sure what an API is, good for you, you probably have a life, enjoying bottomless mimosa brunches with your besties. Essentially it's a way for programmers to gain access to data. I put two and two together. I could use the Etsy API to take my wife's listings and programmatically move those over to Facebook Ads. Yay technology!

My wife was surprised when she woke up the next morning and asked about how the progress was going. I moderately answered,

"Wellllll, I wasn't able to create your Ad last night, BUT… I did do some research into…"

She cut me off.

"Wait! So we don't have an ad created yet?"

I then went on to tell her how lazy I am and why it would take forever to create an ad by manually searching for the same images she used for her listings, why it would take forever to copy and paste titles and descriptions into an Ad campaign. I also made the point that Facebook's Ad manager is a pain to use! Have you seen that thing!? I didn't know it at the time but I was coming up with my value proposition. I was trying to find product-market fit. Her eyes started to gloss over, but in the end, she was onboard with the idea. So I got to work.

DEVELOPMENT

I first started by creating an App using Etsy's developer platform. Etsy offers a way for developers to easily access their API. They give you basic access using an API key so that you can get started working right away.

There's two types of access, Provisional Access, and Full Access. Provisional access allows for read-only access to any unauthenticated resource. Full Access allows authenticated read/write access for unlimited Etsy members. You also get to list your application in their App Gallery. Although my application didn't need write access, I still needed access to authenticated resources such as images, shop info, etc. So I requested and got access to my API keys. The next step was to set up an authentication flow using OAuth.

While scouring Etsy's OAuth documentation I noticed every example was written in PHP. What is this 2007? I was planning on writing my backend using Python. So I spent a couple hours translating their PHP code to Python. I used the requests-oauthlib library to fetch my access tokens.

Around this time, a few other areas of the product began to take shape. First, In order to create Facebook Ads, I needed to create a Facebook app using their developer platform. So I went to www.developers.facebook.com and began the process. You have to create what they call an App ID.

Second, I needed to host my application somewhere. I began to look at the different cloud solutions out there and decided on Amazon Web Services. I used AWS because it was what I was most comfortable with. I used Python/Django for my backend and there's some good documentation on creating an Elastic Beanstalk application using the AWS CLI.

Third, I needed a backend database to store API keys and additional global application information. So I added an Amazon RDS database to my Elastic Beanstalk environment. This was actually really easy to setup using this documentation as a guide. The hardest part was deciding on what tiered storage to use. I went with the cheapest option. I wanted to get a working prototype up without spending a bunch of time making premature optimizations. The point of an MVP (minimum viable product) is to simply get it out the door and optimize as you progress.

Fourth, I needed a front end for my website. I had previously been using AngularJS for all of my client-side JavaScript projects but I kept reading about ReactJS, so I decided to give it a shot. To make things easier on myself I decided to use an "admin framework" properly named admin-on-rest. The admin-on-rest framework offered my everything that I needed. It had one, easy to use ES6 module for interacting with JSON APIs. It had an admin-style UI with menu bars and routing already built in. I used Amazon S3 to host a "static website" using this great Medium write-up as a guide.

Lastly, I needed to set up a way to accept payments. Like most developers, I hadn't even thought about the business side of my work. This started off as a side project and I slowly began to see value in it. I started to think, "hell, if my wife's Etsy store could benefit from this tool, so could others." I didn't have a payment model fleshed out. So I started to bounce around some ideas. I quickly came up with a freemium model which allows users to create Facebook ads and interact with the platform in a limited fashion, all the while incentivizing them to upgrade. I used Moonclerk'seasy to use APIs and form creators to quickly set up a payment pipeline. Rather than developing a bunch of logic around the Stripe API, Moonclerk abstracts that all away for you. It really sped up the development process. The good thing is it allows me to switch over to using a custom implementation of Stripe later on down the line.

For the next few months, I spent nights, weekends and lunch breaks cranking out a working prototype. If you ran into me during this two-month stretch, I'm sorry. Any developer knows that when you're knee deep in a project, it tends to consume your well-being. My relationship with my family suffered. I would catch myself tuning my boss, wife, or uber driver out while they spoke only to find myself thinking of my next database query, REST endpoint or marketing API call. I started to slip into a small depression only released by late-night code commits to Github.

This whole time developing I was also trying to locate and interact with my target audience. I joined some Etsy groups on Facebook, began chatting with some of the ladies (and a few gentlemen) and started to hear their pain points on getting traffic to their shops. Lot's of folks were mentioning SEO and advertising, so I knew I was on the right track.

Endless cups of coffee, multiple facepalms and a few gray hairs later, I had a working SaaS application hosted on AWS. I threw together a marketing website using Squarespace with a signup form at the bottom. I shopped it around and started to build my list of beta users!

And that's where we are today. We've gotten some traction and a handful of daily users. I've quickly learned that building something that people want is a marathon. It takes a relentless drive to get your product in front of people, hear what they have to say and iterate on the feature requests that make sense. Signing up users is easy, having them whip out their credit card is a whole different beast with different challenges, that frankly, I am terrible at and am still working on perfecting. I've never had to think about things like marketing funnels and payment models. It's been a hell of a learning experience with lots of ups and downs, and it's only been 4 months!

I'm excited to expand the platform to include more social media outlets like Pinterest, Instagram, and Twitter. Also, including support for other online retail platforms like eBay and Amazon.

Please reach out if you have any questions, comments, gripes, etc... Even if you want to tell me this is the worst idea in the history of SaaS I'm open to hearing about it. I'm all for building products people actually use!

Thanks for reading! I'm Alex, a founder/developer writing about my first attempt at building and releasing a SaaS product. Novelty is a Facebook advertising website for Etsy sellers.