Toronto, Ontario, Canada

Update on the new checkout

2022-03-18

Moving the North Coast Synthesis Web storefront to the new checkout system has been a lot slower and more difficult than I planned or expected. There are still some major issues to resolve. But I have some significant progress, and especially with the Gracious Host release held up waiting for a usable checkout, I can't afford to delay rolling out the parts that do work, even though there's still a critical part missing.

Classic Triumph bass fly tied by
Jeremy Acre

As described in my last update, BigCommerce (which was handling most of my storefront) and Stripe (which was handling payment processing) both flaked out on me last Fall, leaving me suddenly unable to process customer orders. Being unable to process orders is a catastrophe for a business that depends on selling things, and I don't have another job. So the top priority was to get things set up so I could take orders again; but another high priority was to make sure this could not happen again. I note that Shopify did the same thing to me a few years earlier.

I decided to move to a self-hosted storefront using a fully custom implementation. That is the most technically intensive way of solving the problem and I knew it would require a lot of programming from me. But the decisive argument for it was that with a full-custom implementation on servers I control, there is the minimum possible dependency on third-party systems. The custom storefront depends on me to build and maintain it but to the maximum possible extent it depends on nobody else. I don't ever again want to suddenly be unable to run my business just because a code monkey somewhere decided to type "npm udpate" and break browser compatibility, with no accountability from them except to tell me to change my local software. And after Shopify, BigCommerce, and Stripe had all done that to me in the space of a few years, it was clear that every such service is at risk of doing it.

Note that the fact npm has implemented an "udpate" [sic] command is probably all we need to say about npm and the advisability of using it in a mission-critical system.

I moved ahead with coding the North Coast storefront. It took me a long time to work out the design for what I wanted, but the coding itself went pretty well. During the last few months I've also spent a lot of time on getting the Gracious Host, my next module release, ready to go. The module release ran slow, especially writing the documentation for it. This module will have not one but two of the usual North Coast detailed manuals, one for the hardware and one for firmware programming. They total 188 pages, and took much longer to write than I expected. But I did eventually finish the job and I was planning to release the new module as soon as the new storefront was ready to accept orders. I was aiming first for mid-January, then (because the documentation writing was taking such a long time) mid-February.

Starting in February I had some personal health problems, which are still ongoing. These forced me to take time off of work, both for medical appointments and to rest. I haven't been able to work at my usual intensity for the last six weeks or so, and that further delayed the Web site rollout and the Gracious Host release.

As of Wednesday, March 16, I thought I had the Web site ready to go. There was just a little bit of final testing to do in the development sandbox environment and then I could move it to production.

And then I found out - by way of an obscure API error message - that despite what I thought I had read in their documentation, on which I had based my decision to use their service, Square can't do multi-currency.

Square is somewhere between BigCommerce and Stripe: they offer hosted Web storefronts, but they also offer APIs for just backend payment processing, which was what I intended to use as a replacement for Stripe. Unfortunately, I have to use some kind of third-party service for payment processing; Visa and Mastercard will not deal directly with anybody my size. Square seemed like a good choice for the backend service because they had the two critical features I needed: browser compatibility and multi-currency support.

Well, it turns out they don't actually have multi-currency support. All the documentation I had seen said they did, and I was confident enough to implement my system on the basis of that documentation, but when push came to shove and I was sending near-live transactions to their APIs for testing, it turned out that their systems would reject all transactions except those in Canadian dollars.

A subsequent conversation with their technical support confirmed that they really don't have multi-currency support in the form I had been led to believe. It might not be a total loss: there might be some possible workaround or compromise on US dollars in particular. It might be possible (I was never able to get a straight answer on this because support didn't comprehend the question) to use a US dollar bank account for processing US dollar transactions in particular. I can easily get a US dollar bank account from a Canadian bank; other foreign currencies are not so easy. The support people I talked to at Square were unable to comprehend even my most basic questions and they kept giving irrelevant answers that showed a profound misunderstanding of my priorities and my reasons for asking. It seemed clear that I couldn't trust them to competently run a service on which my business would depend.

So I have to return to zero regarding payment processing and find some other service, with decent browser support, multi-currency charges that really work, and (new requirement!) support people who can give relevant answers to simple questions. I have to throw out the code I wrote for interfacing to Square's APIs, including sending the multi-currency data structures which they documented in detail, dammit because that feature just doesn't exist in my reality.

Fortunately, most of the code I wrote for the new storefront, shopping cart, and checkout system, does not depend on Square and does not need to be thrown out. So I am rolling out the parts that work. I can't afford to delay the Gracious Host any longer. I need to start selling those, and try to make back the high development cost on them. By the time you are reading this, the new shopping cart and invoice-generating system will be operational and you will no longer need to write me an email to place an order.

For the time being, I am still handling orders manually using Stripe invoices - difficult because of the broken browser compatibility. I am not happy to continue using Stripe in any capacity after they did that to me, and it's a painful process that I can't sustain indefinitely; but the show must go on. Until I can find a backend payment processor that really has my must-have features, I'm continuing the payment-processing compromise that has held up surprisingly well for the last few months, and I'll just have to process a bunch of Gracious Host orders that way which I had hoped to reserve for a newer and more automated system.

The order process is now:

For Canadian orders only, there will also be a radio button on the checkout form, which you can use to opt for payment by Interac e-Transfer instead of by credit card. In that case, the invoice/status page and the confirmation email will both give you the instructions for making the e-Transfer, and you won't get the email from Stripe. "Canadian orders" for this purpose are defined as those paid in Canadian money, but be aware that you probably won't be able to send such a transfer unless you also have a Canadian bank account.

The new shopping cart system supports discount codes even in the multi-currency case (which had been a problem for BigCommerce) and the BC Environmental Handling Fee (which I've never seen properly supported by any other online shopping cart). It doesn't demand that you create an "account" and it doesn't use Javascript. Although I may end up forced to compromise on this point depending on the payment processor, as of this writing there is no Javascript on my site at all except for the analytics (and, I guess, whatever nonsense comes in with YouTube frame embedding). Browser compatibility should not be an issue at all. So in many ways I'm pleased with what I've built, even if there's still an important piece missing.

In my March newsletter I gave out the discount code DKRZCHXP , which is good for 10% off the assembled Middle Path VCO until the end of the month. As an extra bonus to celebrate the new shopping cart and encourage testing, I'm giving out the code here and I've also made it, for the next five days only (through March 24) it will also give 10% off on the entire order, if you order at least two items. Follow this link to the cart page to automatically apply the code (it will be recorded, but will not be visible until you put items in the cart); or just enter the code during the checkout process.

Look for a Gracious Host announcement within the next few days.

Leaving BigCommerce || MSK 014 release

Comments

The leapfrog filter is the most interesting DIY I have found anywhere on the internet.
Cam - 2022-03-25
Anti-spam, fill in the blank: North Synthesis

Subscribe to our newsletter