Projects/ DCM Internal Food Pantry Mangement Application

Problem & Scope

Food pantries and charities around the country are required to keep records on the people they serve and the frequency that they receive benefits. I was tasked with rebuilding their existing solution built on top of Microsoft Access as an internal web application.

Core Features:
  • Multiple user accounts with concurrent access.
  • Record new food bank clients and their personal information.
  • Document client visits and enforce limits on their frequency and identification methods.
  • Track new inventory being received by the food bank.
  • Generate and export reports for variety of metrics regarding clients, visits, and inventory.

Front End

I opted for a single page application built in React as it is especially suited for complex, multi-layer applications like this. Once the JavaScript bundle is loaded, it feels like a desktop application.

Application styling and layout is handled by Bootstrap 5 with a custom sidebar ribbon component for navigation. I wanted the application to be easy to navigate and not overwhelming so I implemented the ribbon with only a handful of broader categories/sections. More specific functions can be accessed from their respective category's main screen.

Intake Screen
Intake Screen

This is the top level screen for the intake category. From this view the user can move to create a new client record, view upcoming scheduled visits today, or find existing client records to take action on.

Receive Inventory Screen
Inventory Screen

This is the applet responsible for recording new shipments of inventory to the food bank. The UPC input can be selected and a USB barcode scanner can be used to scan in products individually. Product definitions can be redefined on the fly and a database of products is dynamically built as they are defined because using a third party UPC API is cost prohibitive.

Additional screenshots are available upon request. I can only share small snippets of the code. This is a real application that I built for an organization and is running in a production environment.

Back End

I chose to implement the backend in Node.js using the ExpressJS framework. Data is stored in a MongoDB database for its parity with the rest of the JavaScript stack.

An NGINX instance acts as a reverse proxy for the Node.js service. The DCM service runs as a dedicated non-privileged user so that any code execution exploits do not affect the broader system.

Data Migration

To migrate data from the existing Microsoft Access application to the new MongoDB database, the data was manually exported from the Access tables into a standard XML file using the export data menu in Access. I assembled a set of one-off python scripts that would read in these XML files, remap their fields to the new fields present in the MongoDB database, and then push those entries document by document to the new database.

Future

Although I now have a lesser involvement with the ministry directly, I periodically continue to provide support and small updates. I designed a modular database architecture that can accomodate additional applications for the ministry beyond the food bank management program.

As I built the platform I documented both my technical decisions as well as instructions for future developers and end users to reference.

Copyright © 2020-2025 Konstantin Zaremski — All rights reserved. Styles by Neumorphism UI Bootstrap.