Case Study: A Cashless Payments System for Camps
We built a microservices-powered mobile PoS system for summer camps.
AWS
Serverless

Summary

JPGreze’s “FunFangle” is a spending account management and point of sale system designed for summer camps. Parents are able to deposit funds into their kids’ camper accounts through an online web portal which they can spend while at camp at various points of sale. The system made its debut at camps in New Hampshire and Colorado in the 2017 summer season and is scheduled to launch at more camps in summer 2018.

Problem

We needed to develop a point of sale system and integrated web portal hosted on AWS while minimizing hosting costs. Additionally, the POS would need to be able to integrate with various third party hardware components, including barcode scanners, receipt printers, Square for processing credit transactions, and bluetooth NFC readers for reading from/writing to wristbands for camper identification.

Furthermore, the point of sale would need to be developed initially for the iPad but with the ability to easily add Android Tablet support.

Solution

We developed a sleek web portal built in Angular that would easily allow parents to access and deposit money into their campers’ accounts and view their transaction history, along with many other features. The FunFangle portal also allows camp managers to control their camp’s settings and export reports on a variety of data (i.e. how much revenue they made per session). To lower hosting costs, we decided to go a serverless approach - the system does not rely on any virtual machines or servers. The web portal is hosted on S3, with CloudFront managing distribution.

The backend consists of a variety of microservices written in Node and running as AWS Lambda functions. Instead of being charged for virtual machines running all the time, Lambda only charges for execution time. For the point of sale, our main considerations in selecting a development framework were in being able to develop for iOS and Android simultaneously and being able to most simply develop or utilize existing plugins for various IoT integrations. Ultimately, we selected Nativescript for its simplicity in allowing developers to access native components and functions in JavaScript/TypeScript for writing custom plugins, its existing library of plugins we would need (i.e. support for various receipt printers, cash drawers, etc), and for its cross-platform support.