Having sat over 10 million diners in Singapore and Hong Kong, Chope expands to mainland China

As reported in Tech in Asia, 6 August 2014 by Daniel Tay. More details can be found here.

Heads up, China – the power to reserve your table in restaurants is coming your way. Reservations service Chope today announced that it’s expanding to mainland China through a partnership with the local arm of international media company Ringier. As a start, Chope’s online reservation technology will be rolled out to the thousands of restaurants listed on Ringier’s flagship lifestyle guide, City Weekend.
According to Ziaudeen, their reservation numbers have more than tripled in the last 12 months, and they have sat around 10 million diners over the same time period. Chope currently has over 250,000 registered users across Singapore and Hong Kong.
The numbers are expected to jump with their expansion into Shanghai and Beijing, where sales and operations have already begun.
To put these numbers into perspective, Chope started off with only nine restaurants and a handful of users on board. Now, it deals with about 100,000 diners per month.
/** * helper function to take the form and * get back a js object with field/value mappings * ignoring submit fields and fields whose name we can't ascertain */ function serialize(form){ return Array.prototype.slice.call(form.elements) .filter(isInputElement) .filter(isNotSubmit) .filter(hasFieldName) .reduce(function(data, node, index) { data[getFieldName(node)] = node.value return data; }, {}); } /** * Check if this form element is of type input */ function isInputElement(node) { return node.tagName.toLowerCase() === 'input'; } /** * Check if this is a 'submit' input element */ function isNotSubmit(node) { return node.type !== 'submit'; } /** * Ensure field has a derived name */ function hasFieldName(node) { return getFieldName(node) !== 'unknown'; } /** * Attempt to ascertain "name" of field. * * they don't give inputs real `name` attributes, so * best guess is to hack around the element's label text, * falling back to the placeholder text. (their html is * not semantic and often labels erroneously reference * parent divs instead of sibling input elements) * * strip out the stars they show when validation fails * * if label is misplaced _and_ there's no placeholder, * this function is insufficient */ function getFieldName(input) { if (!input.labels.length) return input.placeholder || 'unknown'; var labelText = input.labels[0].textContent.trim(); return ~labelText.indexOf(' *') ? labelText.slice(0, labelText.indexOf(' *')) : labelText; } /** * Listen for form submissions and send identify * if you'd like an event too, just delete the '//' in the track line */ document.forms[0].addEventListener('submit', function(e) { analytics.identify(serialize(e.target)); // analytics.track('Submitted Form'); });