This article is written for interview / documentation purposes. If you have any questions about the content please contact me.

This project is one of the many failed ventures I've had the pleasure of working on (between Oct 2013 - May 2016). It's a B2B software for restaurants, offering a novel way of ordering food for the customers. The waiter, instead of pen & paper, uses an iOS App that immediately prints the order in the kitchen and bar.

github.com/orderchef

Team

  • Matej Kramny
  • Joseph Tsang

Some challenges we faced during the project

  • the waiters holding phones look unprofessional. We solved it by putting a cover on the phone to make it look like a notebook
  • having enough good wifi coverage
  • making sure things were running 100% of the time
  • getting the printers to work right. This was incredibly difficult because the printers mostly come with the old serial port.

Hardware wise, we used

  • the smallest capable Linux device
  • network-enabled thermal paper printers
  • provisioned iPhone devices
  • charging hub
  • routers and repeaters

For the server, we experimented with a Raspberry Pi, which had just enough memory to keep an old database running. This was actually stable and small enough to run 24/7. Looking back, we should have picked a more "enterprise-ready" solution.

On the software level, we had two versions. The first was a node.js-based server and a native application. This worked well, but node.js proved to be unsuitable and v2 switched to Golang and the app written with Ionic. Much like node.js, Ionic was also a terrible decision. The app needs to be fast and reliable, somehow this slipped when we iterated. Ionic (v1 at the time) was terrible for performance even though the development of it was quick. To this day, Ionic is still not that great.

Conclusion

The best thing to come out of this project is a templating library we wrote for golang. It lets the customer define a template for their receipts, and the server prints it based on a template. It solves a big issue because we had to write the receipts manually

Getting the printers to work properly was a big headache since most of them come with the old serial port and 0 documentation. Fortunately the Pi helped us here since we could do some experiments. At one time we used the Pi to make the dumb serial printer network enabled. This setup is using a simple redis publish/subscribe paradigm where the Pi subscribes to it's ID and anything pushed to it would get printed. You may imagine some drawbacks, which were later solved by upgrading to true network-enabled printers.