How we deploy our applications

As we already wrote a lot about our beautiful frontend and especially about our platform, we felt it was time to also give some insights about what is running behind the scenes at couchcommerce.

A couple of weeks ago we started to rewrite our API, that is used by our webapp to handle the checkout process (more details on this later). So after a few days of coding, we thought about how and where to deploy our application. As we recently discovered Docker and quickly became big fans, we looked for a way to make use of its power on our test system. Furthermore, we were looking for a possiblity to seemlessly integrate the process of deploying an application into our git workflow. That’s how we found Dokku. Dokku is a “Docker-based mini-heroku”. So what this means for a deployment is, that you simply do a “git push” to a previously created git remote. Then, dokku automatically detects which language the application is written in and serves it to the web from a fresh Docker container. This is a really convenient method to quickly make an application accessible to the web without the need of any additional configuration on the server. For example you could deploy a node.js application and a PHP application on a server without having to install node.js or php-fpm because all the requirements are included in the corresponding buildpack. Also, you can easily remove the application from your server via  “dokku delete <appname>” which will delete the application’s files (including configuration) and its docker container. And again, there is no additional cleanup work needed on your server as all the required software was included in the buildpack / docker container.

Getting deploy-ready with dokku is really easy, it’s basically 3 steps:

  1. Install dokku on your server (this will create a dokku user on that machine)
  2. Add your ssh public key from your local machine to the dokku user’s authorized_keys file (be sure to use sshcommand for that)
  3. Add a new git remote to to your project
  4. push your master branch to that remote

Dokku generally only supports pushing to the master branch of your project. However, you can also use it to deploy other branches or tags. For instance if you have created a new git remote called “testing” to deploy your application and would like to deploy a tag “1.0.1”, then you could do this with “git push testing refs/tags/1.0.1:master”.

Dokku comes with a nice plugin system and there is a bunch of useful community plugins. For instance we are using plugins for rabbitmq, forego, postgresql and redis. In many cases the plugin will just start a new docker container that you can link with your application. For example with the redis plugin, it goes like this:

dokku redis:create myredis // create the new container

dokku redis:info myredis // show info about redis

dokku redis:link myapp myredis // link application with the redis container

Check out the dokku github page for more detailed information. There is also a pretty good video tutorial about getting started with dokku on vimeo. Another article worth reading is “How Dokku Works” from Rico Moorman.

It’s called Open Source

Two month ago we were happy to share with you that we not only released our sofa SDK as open source but also our entire web app as well.developer_view

But open source isn’t all equal. Some projects work behind closed doors and only release the source code for each new version as open source. I like to refer to that as readable source rather than open source.

On the contrary there are projects where the entire development process happens in the open. People can follow or even engage in discussions in the issue tracker to understand how the software is evolving. People can read the commits and learn from them rather than just see the final state of the code. And last but not least they can contribute by filing bugs, writing documentations or even code.

We strongly want sofa and our app to be of the latter kind. Until today, we didn’t fully achieve that. While sofa was 100 % open source our app was more like readable source. We released a snapshot of the code but at that time it wasn’t the repository that we internally used to continue with our work. We wanted to push something out to you as soon as possible but we still had lots of things to solve before.

So what was holding us back you ask? Mainly things that still need to be kept private :) While we want to take open source seriously we also want to take the privacy of our customers seriously. Our issue tracker was full of sensible information and so where parts of the repository, too.

As people started to send us pull requests to our public repository and the codebases kept on diverging, we felt more and more pain. As of today we are very happy to say that we sorted out all issues on our end so that the repository that you already know and use is the one and only repository that we use for the main development of our app.

This is an exciting step for us. We entirely open up. We want your contributions and we are excited to work with you.


The CouchCommerce Team

CouchTeam-15. Juli 2014_306

CouchCommerce at the K5 conference in Munich

Once again the K5 conference takes place in Munich on the 18. & 19. of September. We are very excited about this years conference and very happy and proud to be part of the K5 junior league including a startup booth where you can find us!

Last year it looked like this:

CouchCommerce_K5 – 015

This year it will look totally different ;). We launched our Enterprise SaaS platform and will show you the mind blowing fast web app from runtastic and other clients. In addition to that we will show you how you can work with our recently released open source web app SDK sofa.

Alex, Kai and me are happy to meet you and show you what we have achieved in the last 12 months! So please come by and have a chat with us!

For everyone who cannot attend this years K5 conference, we recommend to follow us on twitter to get updates and insides of the conference :).

See you!


Sofa is here!

Lately we announced sofa, our open source SDK for eCommerce web apps. Sofa is a great starting point for developers and agencies to create e-commerce front ends based on superior web app technology.
Not only sofa has been released but we also open sourced our entire AngularJS web app including a great feature set. You can download it right now and get started in three easy steps!

To show you how you can work with sofa and to take a look behind the curtain our geniuses Christoph and Pascal hosted a webinar wich we recorded for you.

Content of the webinar:

  • download the basic app
  • walk through all app features
    • catalog browsing
    • category tree
    • shopping cart
    • search
    • image zoom
  • show how the app uses sofa components
    • usage as npm packages
    • show packages on github
    • talk about sofa-base and the slicing plan
  • look into sofa components
    • couchService
    • searchService
    • basketService
  • talk about future plans
  • QA (if any)

We hope that this first sofa webinar is useful to you and that you are excited to work with us! Feedback and questions are very welcome.

Webinar: Get started with Sofa the e-commerce web app SDK

sofa SDK

Lately we announced sofa, our open source SDK for eCommerce web apps. Sofa is a great starting point to create e-commerce front ends based on superior web app technology for developers and agencies.
Not only sofa has been released but we also open sourced our entire AngularJS web app including a great feature set. You can download it right now and get started in three easy steps!

UPDATE: we recorded the webinar for you, so feel free to watch it as often as you like ;)

To show you how you can work with sofa and to take a look behind the curtain our geniuses Christoph and Pascal will give a webinar.

Subject: Get started with Sofa the e-commerce web app SDK

When: 11. September 2014, 06:00 pm
Where: CouchCommerce GoToWebinar online lecture hall 12
Tutor: Christoph Burgdorf & Pascal Precht


  • download the basic app
  • walk through all app features
    • catalog browsing
    • category tree
    • shopping cart
    • search
    • image zoom
  • show how the app uses sofa components
    • usage as npm packages
    • show packages on github
    • talk about sofa-base and the slicing plan
  • look into sofa components
    • couchService
    • searchService
    • basketService
  • talk about future plans
  • QA (if any)

Register now for free to get one of the few seats left! We want to avoid that you have to sit on the floor ;).

Mobile payment at its best! PAYONE is now integrated with CouchCommerce

We integrated a new payment service into our CouchCommerce platform: PAYONE.
You can now benefit from many more payment methods integrated right within the web apps via the CouchCommerce platform. No need to leave the web app anymore to complete your online payment purchase!

Bildschirmfoto 2014-08-20 um 17.06.32

You benefit from a lot of features if you use PAYONE as your mobile payment partner like an automatically integrated risk management for protection against payment defaults and fraud, automatically forwarded payment status to other systems, e.g. online shop or back-office systems and any mobile device can be served using a single payment provider.

For more information you can read the german press release, have a look at the german PAYONE CouchCommerce page or read our CouchCommerce & PAYONE product folder.

Online shop merchants diverge over responsive web design’s benefits

In a very recent article at Mobile Commerce Daily retailers gave feedback concerning their view on responsive web design pros & cons. I strongly recommend reading the article to catch some views on the topic from a merchant point of view.


“Responsive Web design was a big topic at eTail East 2014, with many retailers planning to launch responsive sites in time for the upcoming holiday shopping season while others insisted the strategy lacks the necessary customer focus to ensure success.

A key takeaway from the conference is that retailers are still struggling to figure out what works on mobile. The understanding is there that the mobile use case is different but how best to meet the needs of mobile users is still elusive.”

Here at CouchCommerce we see the value of a unified front end experience and are working towards extending our web app technology to desktop computers. This way a mobile first front end approach will be possible by utilizing one integration and being able to fully support the special needs of mobile.

First 3 days of Sofa – we are overwhelmed!

sofa SDK

Only three days ago we launched our open source Sofa SDK for e-commerce web apps and now we are really happy to share the first numbers with you:

All this within just 3 days is a great result for us and we are overwhelmed with the feedback and involvement of first contributors. We could even approve first contributions that improve Sofa for everyone!

Many thanks to everybody who got involved at this early stage and we are looking forward to the next weeks of working with you on first projects! And for all of you that like to see Sofa in the wild here you can find live projects based on Sofa.

p.s. find us on twitter, facebook and google+ :).

Launching our Open Source eCommerce Web App SDK Sofa – already chosen by our new Flagship clients Runtastic & Reno

Sofa is here!As you might know here at CouchCommerce we have been working for more than one year now towards releasing our e-commerce web app SDK called sofa. Today we are very happy and proud to announce that not only sofa has been released but we also decided to open source our entire AngularJS web app including a great feature set. You can download it right now and get started in three easy steps!

For developers and agencies this is a great starting point to create e-commerce front ends based on superior web app technology. Sofa cannot only be used to bring great touch driven user experience to smartphones and tablets but also covers in-store and even desktop use cases thanks to the almost complete coverage of modern browsers today. So we are moving towards a unified front end experience delivered by CouchCommerce!

developer_viewFrom today on merchants can start to work with one of our partners or in-house developers towards a customized web app experience based on sofa. We have published a API reference that should get you started in minutes. And in case you need help or training we are happy to assist.

Once a customized web app has been developed there are 3 ways to integrate, deploy and run it:


  1. You integrate 3rd party components yourself based on the GPL version of sofa & the web app
  2. You choose CouchCommerce Enterprise self-hosted and get our support, SLA and a MIT license of sofa & the web app
  3. You choose CouchCommerce Enterprise SaaS and utilize our platform integrations, scalability, SLA, updates, support and a MIT license of sofa & the web app

The beauty about sofa is that you can work with your highly customized web app in all 3 cases. Please have a look at our solution page for more information.

runtasticTo demonstrate the power of sofa in combination with the CouchCommerce Enterprise SaaS platform we are proud to announce that Runtastic launched with us to deliver the best smartphone shopping experience available to their 35 Million + users. You can read about it here. Runtastic is a great example for the impressive performance and scalability of single page web apps as we offer them with sofa.

logo_RenoAnd as if this would not be enough great news we are also very excited to be working on a unified front end experience based on sofa and the CouchCommerce Enterprise SaaS platform for Reno. This will cover smartphone, tablet, desktop and in-store through one unified front end experience. CouchCommerce will be directly integrated with IBM Websphere and deliver the front end experience. Our solution partner Projekteins is responsible for the customizations to sofa and working closely with the CouchCommerce team.

So please browse our brand new CouchCommerce and sofa websites to learn more about our exciting future and feel free to reach out to us with any question you might have.

Greetings from the whole CouchCommerce team!

CouchTeam-15. Juli 2014_306

New URLs for the CouchCommerce single page Web Apps

New CouchCommerce URLsLet’s talk about URLs today and how they affect CouchCommerce shops.

It’s been not too long ago that the URLs in our web app looked like this. (For category listings) (For product listings) (For product pages)

There are a couple of problems related to such URLs and there has been a steady demand from customers to improve on them. Let’s first outline what the problems are.

Search Crawler Visibility

WebApps work differently from Websites. A traditional website fetches HTML, Images[1], CSS[1] and JavaScript[1] every time that you click on a link to navigate through the pages. More precisely, the browser hits the server at the given URL to fetch such assets every time that the URL changes. In a WebApp there are no different server side pages but still we want link-ability. Therefore engineers recycled an old technique that has been around since the early days of web browsers.


This is an anchor:

Notice the hash before foo? This has been used for ages to direct the browser to jump to an element on the current page with the id foo. It is not part of the server side resource and therefore if you go from to the browser won’t hit the server because the actual resource did not change. Everything on the right hand side of the # character is only relevant for the local web page and changes do not trigger a HTTP request.

WebApps “abused” (and continue to “abuse”[2]) this fact and used such anchors for client side routing. A WebApp can react to changes to the right hand side of the hash to perform client side actions such as navigating to a different view. This is why a product page in the CouchCommerce WebApp was[2] accessed as until recently. It’s really nothing more than a good old local anchor though.

What’s not to like?

The problem with such URLs is that they lie to you. The content is just not there. The content is entirely constructed on the client side. In the browser. Search engine crawlers, however, don’t see the web as a browser sees it[3]. They only see resources on a server. Unfortunately we don’t have them. Just like a native web written in Java or Objective-C views are entirely created on the client[4].

Pushstate API to the rescue

The outlined problems lead browser vendors to agree on an API to address the issue. A new API called `pushState` lets us change the URL of the browser without causing the browser to hit the server. Remember that any change to the URL previously caused the browser to hit the server to fetch a new HTML document.

We changed our app to make use of the `pushState` if available[2] so that the URLs from above transformed into:

Are we crawlable yet?

Unfortunately, that alone does not address the search crawler concerns. It may assist on the bigger mission depending on which way to address the problem one decides to go. In our case though, we address the problem differently. We give hints to search crawlers where to find snapshots of the html. Each time a search engine wants to crawl a page of a CouchCommerce shop, we point it to another direction where it can request a previously created and cached snapshot. That’s a recommended technique by Google and deserves a blog post on it’s own.

URLs for human beings

Notice the bold parts of the URLs? Computers love such parts. They are great to deconstruct a URL and map it to an actual view. It’s easy for a machine to understand that the first URL is a category view, the second one is a product listing and the last one is a product page. Unfortunately humans unlike machines don’t care about such special identifiers. What people care most about is that URLs don’t change between desktop and mobile view.

A product page in the desktop shop accessed at should just transform into for the mobile shop. Just an extra `m.`[5] to get from the desktop to the mobile view.

We implemented exactly that so that any[6] valid desktop shop URL is automatically a valid CouchCommerce shop URL just served from a different subdomain.

You can see the URLs in action on our demo shop but we will soon roll that out to all our shops.

[1] Let’s not nitpick on caching here
[2] For older browser that don’t support the pushState API the URLs continue to use the hash based routing.
[3] That’s actually changing rapidly
[4] Albeit in a completely different fashion. Typically without HTML
[5] Or any other subdomain for mobile use. That’s up to the merchant.
[6] Well, not any. So far, it only works for category/product listings and product pages