Announcing SNAPfinder
Back in May I blogged about brainstorming with Gwynne Kostin, Director of Digital Services Innovation Center at the GSA about kicking off an open source project to support the Digital Government Strategy.
Gwynne introduced me to Gray Brooks, Sr. API Strategist at the GSA Digital Services Innovation Center, and together the three of us got together on a number of weekly Google Hangouts to bounce our ideas off each other until we had a strategy in place for what we wanted to accomplish around Gwynne’s idea to help out low income citizens. These were our goals:
- To make a positive contribution to society by leveraging the Government’s commitment to Open Data
- To demonstrate a successful model of Open Source collaboration between a Federal Agency and the private sector development community
- To provide a well-documented example of leveraging a technology stack based on Node and MongoDB as a particularly effective way of building high-performance, scalable, cloud-hosted REST APIs for broad consumption.
Currently, the USDA Food and Nutrition Service administers SNAP. If a person wants to find retail stores participating in SNAP, the USDA hosts a flash-based webpage at www.snapretailerlocator.com. We wanted to leverage the same USDA data, and architecturally, we wanted to provide a reference implementation that demonstrated a clear separation of responsibilities between:
- an open source framework for dealing with SNAP data
- a REST API that exposes SNAP functionality to be consumed by app developers
- a mobile-first web app that uses the API to provide a snappy (pun intended) UI
Today I’m pleased to announce SNAPfinder, available on the web and on your mobile phone at the following link:
In terms of actual development time, it took just under two weeks for two contributors (myself and Tenny Susanto, Sr. Software Engineer at Coupons.com) to get this out the door with three separate open source projects hosted on GitHub:
- snapfinder - a mobile-first web app that uses the API (Node, Express, EJS, Bootstrap 3)
- snapfinder-api - REST API for querying SNAP data (Node, Express)
- snapfinder-lib - provides underlying framework for importing and querying SNAP data (Node, MongoDB)
The project includes an import job that harvests USDA data daily and imports retail stores in the Mongo database. Mongo provides special support for geo queries, which along with its support for JavaScript makes it very well-suited for pairing with Node for an extremely responsive and scalable API. The web app itself leverages also leverages Node and Express along with EJS templates, as well as Bootstrap 3 for the mobile-first UI support.
Over the next week, I plan to take a deeper dive into the technology and how we built the solution. In the meantime, I welcome you to check out the site and the various GitHub projects. I’m certain the USDA would welcome more contributors as we flesh out the analytics, enhance the UI and add a few more features. And, of course, all involved are certainly delighted to see Open Data project participation.