October 30, 2013 — By Duane Storey
I was going through our own administration panel here at BraveNewCode today and thought it would be interesting to share our set-up with other people. Our WordPress website isn’t just a blog, it’s also a full-featured eCommerce store, support centre and product licensing/upgrade server. To turn a normal WordPress website into one that can handle all of that takes quite a few tweaks, external services, and WordPress plugins.
Here is a list of all the tools we use here at BraveNewCode.com – from hosting, to sales, to support.
Right now BraveNewCode.com is running on a large VPS at WiredTree. Someone recommended them to us years ago on Twitter, and we’ve been extremely happy with them ever since. For a while we had everything hosted on a large $350/mo dedicated server, but thanks to caching and optimization improvements in various places we’re now able to survive on a $60/mo VPS with room to spare.
In terms of backups, we back up our databases every few hours to Amazon S3, and the whole kit and caboodle nightly to the same location.
We also have a cheap Bluehost plan active as well with a splash screen for BraveNewCode saying that we’re experiencing difficulties. In the odd event that our website crashes completely (which has thankfully never happened), we can point BraveNewCode.com to Bluehost temporarily while we get our WiredTree server up and running again.
We used to host our own DNS in years past, but given our experience in the area (approximately zero) we decided to offload that responsibility to another provider. Recently that provider went down for about 12 hours, which caused our site to go offline. During that process we upgraded to DNSimple, and changed from Unicast DNS resolution to Anycast. Anycast nameservers can answer replies based on geographical location, which should hopefully help minimize the chances of our DNS provider going down during a DDOS attack in the future.
We don’t really have a newsletter per-se, but we do try to send out important product information to our customers from time to time. To accomplish that we’ve mostly been using iContact. Given our large customer base though, it’s a bit of pain transferring an updated contact list to iContact and then modifying a template for each email blast we send out. Ultimately that’s limited our ability to reach out to customers whenever we would like.
As such, we’re in the process of pulling that ability back to our own website – when we’re done we’ll be able to email all of our customers with a single click from our admin panel whenever we want. That has lots of benefits, such as being able to have 100% control over the look and feel of those emails (often mail services tack their own branding onto emails or mess up the included styles), and will always have an accurate list of people to send to whenever we want. Email management will be done from each user’s profile in the back-end.
We’ve tried various tools over the years to keep track of what we are working on, and which tasks are assigned to which people. Ultimately we still use BaseCamp for this, since we can access it from our phones and it mostly just works. My only issue with these types of applications is that once you start using them for a few months. navigating through all the data can be a real chore that sometimes can slow you down instead of help you.
Our free plugins are hosted in the WordPress.org repository, and use Subversion for revision control. For our commercial projects we use Git, and pay to have them hosted at Beanstalk. To push out a new WPtouch Pro release, for example, all we have to do is merge our code into our ‘release’ branch and then queue a Beanstalk deployment. That in turn triggers a script on our website which generates a new .POT file, bundles up the product, pushes it to Amazon S3, and notifies our customers that there is a new version to download via their administration panels.
We use WordPress Multisite to handle our blog, main WPtouch Pro, as well are the support centre for our customers. Right now we have two sub-sites, one for bravenewcode.com, and another for bravenewcode.com/support. Our main site is using a customized theme, while the support site is based on SupportPress by the fine folks over at Woo.
The front slider on our website is powered by the Layerslider WP plugin.
We’ve used pretty much every WordPress commerce plugin over the years, but eventually found WooCommerce and never looked back. Our main issues with the previous commerce plugins we tried were that many of them would periodically drop purchases, especially in the case of PayPal which sends IPN notifications to your server after a successful purchase.
Losing knowledge of a payment by itself is obviously a bummer, but it also meant that the customer who purchased the product didn’t receive their download link. If that happened late at night while we were all sleeping here at BraveNewCode, chances are they would have to wait 8-12 hours to get the product, which is a poor customer experience.
Thankfully we don’t have those issues with WooCommerce, and it mostly runs without any issues on our website.
In terms of product fulfillment, we have a custom plugin on our website that hooks into the WooCommerce payment notification system and sends out the appropriate emails to our customers with their purchase information.
WordPress SEO Plugin
We probably could spend more time focusing on SEO, but we’re generally quite busy and are still a relatively small company without a lot of extra hands. So while we generally add WordPress SEO content when we write posts and pages, it’s mostly around to generate the XML sitemap which we feed to Google and Bing webmaster tools to better understand our website.
W3 Total Cache Plugin
Our most popular page on this website is for our WPtouch Pro mobile plugin for WordPress. To help minimize server load, we use W3 Total Cache for all users who are logged out. We purposefully set it to ignore all our eCommerce pages, and to bypass all the user agents that WPtouch Pro uses. In this configuration W3 Total Cache only handles desktop caching, not mobile.
Our 3.1 update for WPtouch Pro (coming shortly) includes a new add-on for mobile called Infinity Cache which will handle caching for mobile visitors. The two together work in tandem to make sure pages are served quickly and efficiently to users, and help minimize the load on our servers.
One of the first things people do nowadays when they write a new post is publish a link to that post on Twitter. We wrote WordTwit Pro to basically automate that process for us. When you are drafting a post, you can edit and schedule the tweets that will go out as soon as it is published. It also interfaces with several URL shorteners, so you can make sure your tweets are nice and compact.
WordTwit Pro is now a free plugin, so feel free to grab a copy of WordTwit from the wordpress.org repository.
Piggy eCommerce Plugin
A few years ago Dale and I were sipping a few beers near Cancun in Mexico and playing with some code to try and get notifications of our sales on our phones. We thought it would be cool at the time if our iPhones made a cash register sound (cha-ching) whenever a new sale occurred.
We had our first “cha-ching” notification a few hours and a few beers later.
We now use that plugin on our own website to view, in real time, how many sales we’ve made for the week, the month, the year, and all time. It also includes a projected sales pane, so you can see how many sales you are likely to make going forward based on current sales. It’s a great little tool that always allows a commerce store owner to know exactly where they sit with sales.
Piggy is also a free plugin, so head on over to the wordpress.org repository to grab a copy of the Piggy eCommerce Statistics plugin.
Mail is one of those things most WordPress site owners probably don’t spend too much time thinking about. For the most part if you install WordPress on a Linux webhost, mail will basically just work out of the box.
The problem is that sending mail will use the mail() system function, which bypasses some of the great anti-SPAM technology such as DKIM signing. In order to have your emails DKIM signed (which basically show that the emails came from your website), you really need to send mail via authenticated SMTP.
Since our product fulfillment is made via email, not using SMTP would mean that many of the emails we sent out to customers would likely be marked as SPAM. Not all of them, but enough that it would be a pain to those customers and for our team, who would manually have to send information to individuals periodically.
Setting up SPF and DKIM, in conjunction with a SMTP mail plugin such as this one is a great way to make sure your customers and users will actually receive the mails you send to them.
WPtouch Pro Plugin
And of course, we utilize WPtouch Pro here for our own mobile website. It’s running a slightly modified version of the included ‘Simple’ theme. We recently added the ability to make purchases via WooCommerce into our mobile theme, so people now visiting our website on support devices can purchase the plugin without having to ever visit the desktop site.
All of these tools together help us manage BraveNewCode, continue to work on WPtouch Pro for our customers, and provide timely support via our one-on-one support centre whenever they have any issues.