I'm a full-stack Web Developer in Chicago, IL.

I spent the first professional decade of my life running video cameras, switchers, audio mixers, and editing; development is my second career. I came to it after moving to Chicago in pursuit of a master's in computer graphics from DePaul University (my bachelor's is from Carolina). To my surprise, the curriculum focused more on programming than 3D modeling and animation. I took the skills I learned and started freelancing. That was about 10 years ago. I’ve been developing ever since.

For the last four years I’ve held a full-time position as Software Developer with the Radiological Society of North America. I spend most of my days working in JavaScript and PHP. Web development continues to evolve at an amazing pace, and I’ve found blogging to be the best way to express myself. I like to learn, and that’s all you do in this industry, so it works for me.

In general, I prefer full-stack development. I find the breadth of knowledge and experience required opens the door to more projects. I can develop API’s, build front-end features, and/or integrate third party platforms into existing apps. I find that rewarding.


I’ve decided to limit my portfolio to current projects, which are interactive applications. My other sites are either brochure (client work), or lack responsive design. If you’re interested in static sites, what you see here on is an example of what I do. My future is in applications, though. I want to create software that helps people and does stuff.



I’ve worked on this project for roughly three years. I inherited both the front and back-end codebases. It’s a single page app that has had a lot of re-writes. I converted the back-end from Coldfusion to PHP, and changed the front-end DICOM library from LeadTools to Cornerstone. If you look beneath the hood, you’ll see a lot of asynchronous requests. This is the most complex app I’ve ever built.

The front-end doesn’t employ a framework, and is written in Modular ES5. When I took over the project, all of the logic was in a single script, and there were only a few features. Since then, I’ve worked hard to add a build process, modularize the code, and create unit tests. There’s still a lot I’d like to do; re-writing the front-end in TypeScript and Vue would be the first.

The back-end is PHP, using the Slim micro-framework. There’s one third-party integration, and a number of different services (AWS and private). Unit tests cover most of the code. I’m certain the API could be faster, and would like to re-write everything in Node and microservices. I’d also go strictly cloud infrastructure.



My development time is split between this project and Image Viewer. This is a very old application; the first release was over a decade ago. It consists of five pages that “communicate” with each other: a player, response evaluator, player config, terminal screen, and orchestrator. Case of the Day isn’t open year-round, so contact me for more information. Image Viewer is the most complex app I’ve built; this is the biggest.

None of the front-ends use a framework, and some pages still use single, non-compiled JS scripts. In other words, all of the logic has been manually added to one JS doc. We don’t have plans to update that, but newer pages are in better shape. The evaluation page, for example, has a modular JS architecture, and complete suite of unit tests. You may be wondering why the HTML is minified, but not the JS and CSS; it is intentional. Though this app still needs quite a few updates, it’s stable, and gets a decent hammering when active (10,000+ “plays” per day).

The back-ends were all ColdFusion, but I’ve updated them to PHP (Slim framework). You may have wondered why I put quotes around “communicate” earlier. That’s because I’m not using sockets or cloud events - just data sharing, which is fine. I’m just being clear about the architecture. There is one third-party integration, and a number of services (AWS and private). The biggest update I’d like to make is automating the remaining manual processes.


This feature is temporarily disabled. Please copy your message and send it to