Yesterday marked one month since we started development on the WooCart project. Here’s a recap of how far we’ve got and what’s on the menu for the next couple of weeks.
Disclaimer: Parts of this post get quite technical. While I’ve tried to explain the benefit of a certain technical detail for you, feel free to skip over them. After all, that’s what WooCart is all about: abstracting away technical details of running a WooCommerce store so you can focus on selling.
Some of the demos below might seem very crude and unimpressive at first sight. That is by design. We’ve been in the Web game for over a decade. We’ve learned the hard way that it’s prudent to invest in good foundations, so you are not faced with a potential rewrite due to loads of technical debt just months after you launch. So that’s what this first month was all about. Researching in depth the latest best practices and tools, and verifying they work well together.
Enough talking, let’s go to the first demo:
You see a walkthrough of our Web-based “control panel” type app through which you’ll be able to deploy and manage your store, handle billing, invite collaborators and more.
The bulk of the work went into choosing the right architecture, the right libraries, making sure the versions we chose are not going to be deprecated a week after we launch and so on. In no particular order:
- The app works on mobile from day 1, and responsiveness is not an after-thought.
- Passwords are secured with Argon2, a winning hashing algorithm. All communication between your browser and the app is secured via HTTPS.
- The app is running on auto-scalable Heroku infrastructure, which apart from great performance and availability gives us multiple levels of backups and data protection.
- Every change to our code gets its very own staging copy so we can verify things before they are deployed to production. We love having staging so much that we plan to build a similar feature for WooCart stores — one-click staging for testing new plugins, upgrades, etc.
- Deployment to production is fully automated and takes less than 10 minutes allowing us to bring new features and bugfixes to you faster.
- We have over 80% test coverage already at this point and should reach 100% around the time of launch which again increases stability and speed.
- We’ve done a lot of combing through plugins and are finalizing the initial set of officially supported themes and plugins.
- We started work on a “Simple Dashboard” plugin for WooCommerce, that we’ll open source and give out to the community. Follow the progress on GitHub.
- We made good progress on localization packages for the initial three countries: Slovenia, Romania and the UK. These allow us to automatically pre-configure your store according to your use case, saving you hours of annoying clicking around the WooCommerce control panel. Again, we are making them public so anyone can use them.
OK, moving on, let’s talk about the API:
Instead of just hammering out code, we dug deep into currently available tooling. Finally, we decided to adopt OpenAPI v3, a way of describing an API so that you can automatically generate a connection client for most languages and a great looking documentation that has a “Try it out” feature out-of-the-box. Moreover, we then use this specification to validate all incoming requests, making our code much more robust. The OpenAPI v3 has only been finalized recently, so the tooling is not yet at the point of the older version, called Swagger v2. The framework we use on the backend is Pyramid for which we had to develop our very own Open API v3 integration. By open sourcing it, we get the help of the Pyramid community to find potential bugs, which means a more stable service for you.
Again, instead of adding API access as an after-thought, this API is what our frontend app uses. By “dogfooding” our own API we make sure it really works well and enables us to easily build mobile or even desktop applications in the future should there be demand for them. Obviously, it opens the gate wide open for third-party integrations.
Finally, here’s a demo of how fast we are able to deploy a WooCommerce store to the cloud, from scratch:
Note again that this is not something that runs on just my computer. I connect directly to our production environment on Heroku and run one line of Python code in an interactive shell. This is exactly what the app will do, just call this one line of code. Easy! The deployment is based on Kubernetes and after just two minutes, there is a new WooCommerce store running in Google’s datacenter! If you look closely, you’ll see we’ve already taken care of backups and we provision a free SSL for all WooCart stores.
One more thing: your store, and its database, are running in completely isolated containers. No more shared hosting woes when your neighbors’ broken blog brings down your store.
So, what’s next then?
A *lot* of gluing things together, sanding out the rough edges, more testing, especially at scale (What happens if a store gets a surge of traffic? What happens if we need to deploy 100 stores in an hour?) and working on making the UI functional. Full steam ahead!