Selling Art on My Indie Web Site Without Using Any Platforms
Alright, so first off, let me start out by saying that what I'm about to do I would NOT recommend. It's pretty complicated and time-consuming and there are just so many other ways to sell stuff online that this just isn't worth it... for most people. But you may have already learned by now that I'm not most people. And if you've read this far, you probably aren't either. But before I even get into the details of what I'm about to describe, let's walk through some options already out there and I'm gonna tell you why I don't wanna use em.
Ok first, Shopify
Shopfiy works for a lot of people, and it's good. But all their stores look kinda generic and have this 'look' to them. Don't get me wrong, it's not a bad look. They look very polished... but that's the thing... kinda suspiciously polished to the point where I just don't want it. On top of that, it costs money every month. They charge from $29 per month to $2,300 per month. Now to be fair, it's worth it if you're selling stuff and making profit. But if you're just a little small artist like me who has almost no traffic... that really sucks cause I'd be immediately at -$29 per month on my store. Nah.
Bandcamp
So this is honestly a pretty good option. And even though I'm building my own store. I'll probably put some of my merch up on Bandcamp too. They don't charge any monthly fee, but they take 10% + the payment processing fee (usually another 3%) when you make a sale. Honestly, I'm not mad at this. Plus you can't get around that 3% payment processing fee, unless you're gonna be having people mail you cash or checks or something. It just costs to take card payments, no way around it. (And you better not say crypto, don't piss me off) But yeah, all in all this seems like a good option for music artists selling merch but it does seem a little bit limited even for that use case and is definitely not really designed for visual artists.
Wordpress Site With WooCommerce
Now, we're getting closer. I actually haven't done this in a while but from what I remember, it's a really low cost option that gives you a lot of flexibility. The only real catch is that you've gotta be on Wordpress, which isn't a bad thing but I'm not. The only cost is your web hosting but if you've got your own site, you're already paying for that anyway and you can probably get away with the lowest tier of shared hosting, which is like $6 per month. Oh and of course, the ~3% payment processing fee whenever you sell something, but again that's with anything.
The DIY Way
Ok so since I'm not using any of these, lemme describe in a really broad way what I'm gonna need to do:
1. Have a way to add products to show up on my site
If I were keeping things as simple as possible, I could really just do this in static HTML. No back end needed. I'm honestly not gonna have that many products at first, so it wouldn't really be that hard to just make static html pages of what I've got and just manage what's in stock in a text document, or even my phone notes or something. Then, if I run out of stock, I could just go update the html. And payment processors like Stripe and Paypal can create checkout pages for you so all you need is a button for the product that links to that. Boom, done. Also a cool side effect of doing it this way is that my product changes would all be in version control (Git). But... I think I wanna do it the hard way.
Instead of that, I'm gonna create a product management system that will just let me manage everything from a dashabord. I'll need to update my database schema to add in a products table with fields like name, description, created_at timestamp, etc. And a few other tables to manage stuff like size and color variation. So I'll be able to just add in the product info in that dashboard and they'll just show up on the site. And when they're out of stock, it'll automatically show that to prevent me from selling anything that I don't currently have. As a side note, I'm gonna be doing limited runs of T-shirts and physical media instead of printing on demand so this is gonna be kinda crucial.
Then along with that, I'm gonna have to have all the display logic necessary for handling url routes like 'get all products' and 'get a single product' and make the pages for these. For the design phase, I actually am gonna start this off as static HTML just because I think it'll be best to focus on what I want to user experience to be like before I start coding up the display logic or the database schema.
2. Have a way to manage products
So if I'm gonna have a database with products in it, I also have to have a way of adding, editing, and removing, said products. For the most part, this will be pretty straightforward like it is for adding blog posts, but the main difference is I'm gonna need a way of adding in product variations. So for example with T-shirts. I might have different sizes and different colors. The idea is to make it easy for the customer to select what they want from available options. I've seen people do this thing where they have a 'comment box' or something that instructs the customer to put in their size or what color they want, etc. This 'works' but can cause a lot of confusion, so let's do it the 'right' way. On the 'create product' form, I'm gonna have a way to add different variations like size and color. Then, when I save the product, it'll come up with all the permutations of those combinations on the back end so they can be mapped to individual skus. for example: small-red, medium-red, large-red, small-blue, medium-blue, large-blue, etc. Then, I can track the inventory of all those skus individually. Every time someone buys one, I'll subtract one from the available stock. Then when they're out, the front end will just show that particular item as Out of stock, and not allow anyone to buy it. Doing it like this will also allow me to map certain variations to certain photos. So for example, if someone selects a size: medium, and color: blue, I can change the product photo to a blue one. Again, probably overly complicated... but satisfying. I know I could also just allow one variation, like size and just create entirely different product listings for different colors and that would be a lot simpler. But yeah, doing it like this will be so, so much more satisfying.
3. Have a way for people to select what they wanna buy and purchase
I kinda described some of the variation selection stuff in the section above, but I'll also need a way to keep track of the products and options the customer selects so I know what to send to the back end and charge them for. I'll probably just make this a JSON object array and store it in localStorage in the browser. That way, if the customer refreshes the page, the stuff they selected will still be in their cart. When they make a purchase, the product info will be sent to the back end by UUID reference, not the actual name, description, price, etc. That will prevent somebody from trying to do something malicious like edit the price to whatever they want. Also, and this is super important!!! Customer payment info will never even touch my site's back end. It'll go directly from the customer's browser to the payment processor (probably gonna be Stripe), and the payment processor will just send an update directly to my back end when the payment goes through. THEN, finally, I can send the customer and email with their receipt and a summary of the items they just ordered. Then of course, I'll have to physically ship out the items and after I've done that, I'll be able to go into my dashboard where I manage orders and mark that item as 'shipped' and give it a tracking number. When I do that, the customer will immediately get an email with the shipping info and tracking number. Kind of a lot, I know. But this is why Shopfiy charges so much I guess.
4. Have a way to process the payment instantly when somebody buys
There are a handful of payment processors (at least in the US, where I'm at). But like I said, I'll probably end up using Stripe. I've used them before so I kinda know how to integrate it. But I'll be honest, doing it with a fully branded flow (not using theire pre-made 'Checkout' feature) is kinda painful to do. I won't go into details, but just know they handle the actual 'taking of the payment', not me. So if I ever did get hacked (which I doubt I will), all the customer data will still be safe and sound with Stripe. Of course there's Paypal. I might put that in too, especially since it has that 'Old Internet' feel to it. At some point, I might also add in Apple Pay, Cash App, Venmo, all that good stuff. But yeah, we'll see about that. This is already gonna be sorta complex, so I'll need to simplify where I can.
5. Automatically send emails with receipts and shipping info when somebody buys
I can't have people waiting til I wake up and check my sales to actually get some feedback that their order is being processed or is on the way, so I gotta have emails that fire off automatically when stuff happens. Those are called 'transactional emails'. One thing that does kinda suck about this though is that it always costs extra money to send emails. You technically can set up your own mail server but it's kinda pointless because you WILL get sent to spam, since you won't have any 'reputation' built up with being a benevolent email sender. So you have to use something like AWS SES (Simple Email System) or Sendgrid to send em'. Sendgrid is a bit pricey... It's like $20 per month. Again, not bad if you're making bank but sheesh, this stuff starts to add up if you're just trying to get off the ground. Also that's for like 50k emails per month. I won't need anywhere near that, so thankfully there's AWS SES to save the day (which Sendgrid is probably built on top of anyway). It's just bare bones email sending (which is all I need), and it's like 10 CENTS per thousand emails so that's not bad at all.
6. DON'T GET HACKED!!!
My site is already pretty secure because I'm following Cyber Security protocols with everything I do! But like I said, I'm not actually storing any customer payment info or processing anything on my server that has to do with payments so even if I did get hacked, customer data would remain untouched. Also, I have automated backups of everything so even if I got ransom-wared or DDOSed, I could just set up shop under a different IP address and be back online in no time.
So yeah, like I said, this is gonna be kind of a lot of work but I'm not in a hurry so I'm just gonna bang it out as I get time to work on it. One other downside to doing it the DIY way I have to mention is the fact that I won't really have any 'brand trust' or whatever. People probably see the Shopify, Bandcamp, Etsy, or whatever logo and feel safe. A lot of people probably won't feel comfortable entering their credit card info on a site called pyramidskeme.com that has NONE of that, but hey. Honestly, I don't care. I'm not capitalism-maxxing. This is just something I wanna do. Anyway, more importantly, I'm also working on making the actual art and music I'm gonna sell so I of course MUST make time to actually do that or this is all for nothing.
