ION Water QR was my University of Louisville capstone: a web app that replaced a local water company's paper intake forms with QR codes that open the right digital form, feeding straight into their backend. Real client, real deadline, real users who did not care that we were students.
Overview
Louisville ION Water ran client intake on paper: forms got lost, handwriting got misread, and someone had to retype everything. We built a Next.js app where each service scenario gets a QR code that opens the matching form, validates it, and submits it to a SQL backend.
I led the front end: dynamic routing per form type, QR code generation, reusable form components, and mobile-responsive layouts, since nearly everyone scanned from a phone.
The problem
Paper intake was slow to process and error-prone, and the errors landed in customer records. The fix had to be something a non-technical customer could use in a parking lot on a phone with one bar of signal, with no app install and no account.
QR codes fit perfectly: print one sticker per scenario, and the right form is one scan away.
The build
React and Next.js with Tailwind on the front, a SQL backend behind an API layer, deployed on Vercel. Environment variables kept credentials out of the client, and we spent honest time on CORS and API security, the classic first-deployment rites of passage.
Working as a four-person team for an external client meant requirements meetings, scope negotiation, and shipping something the client could run without us. That part taught as much as the code did.
Outcomes
Shipped on Vercel and handed off to the client. Paper forms out, scannable intake in.
It was the first project where I owned a production front end end to end, and the one that made the 'build the whole thing and ship it' habit stick.