Joshua Curry

Web developer with a background in React, Python, PHP, web frameworks, and UX

Email Address LinkedIn Profile

Screenshot of website

Machine learning application for natural language processing

This site uses a Flask web application to serve automatically generated art reviews based on natural language prompts. It makes use of 1000s of reviews from 50 years of Artforum Magazine. Art Review Generator also uses a novel queuing system to avoid overloading server resources. The overall project makes use of a wide range of machine learning techniques, including tuning GPT-2 language models and Tensorflow generation.

Man holding cellphone

GPS enabled web app for tracking wolves

To follow a public art performance of animated wolves projected in neighborhoods, viewers used this GPS powered app. It was made with Python, Javascript, PHP, and MySQL. Wolf Tracker also uses OpenLayers to display a custom map with bespoke KML overlays. It was designed to be platform independent and function on a wide variety of mobile devices. The client and server components were built from scratch.

Screenshot of website

Code refactor for Chegg

In the middle of a large code migration from PHP to React, Chegg called me in to help with their Math Solver product. It was a high traffic destination with multiple levels of login states. Each state had different behaviors and constraints beyond presentation changes. Special attention was given to accessibility. In addition to converting Twig templates to React components with JSX, new functionality was added along with Jest unit tests.

Screenshot of website

Accessible navigation and web development for Oath

As part of a major branding effort and integration of company wide accessibility initiatives, Oath (now Verizon Media Group) commissioned me to rebuild the navigation and significant sections of the website. The navigation works with screen readers and assistive controls on both mobile and desktop, using a single codebase. As a global brand, the site required legacy compatibility with older browsers as well as modern mobile and tablet contexts. Localization and marketing tracking were also high priorities.

Small steam engine

IoT steam engine with its own API

I used Runscope and Thingsboard to prototype an IoT API for a working steam engine. With experience in API production and consumption, I wanted it to be a relevant POC for devs trying to integrate the physical world with the virtual. Once of the challenges I wanted to take on is how to differentiate a hardware failure versus an API failure and then pass that response on for debugging by a dev down the line. The base IoT capability of the devices is to send MQTT messages to an external broker. digests MQTT and offers distinct REST API endpoints for each device, as well as an administrative API that offers historical data queries.

People waving paper fans

Embers: a breath powered interactive installation celebrating collaboration

Originally prototyped at the Gray Area Art Foundation Creative Code Immersive, Embers is an interactive installation built from 1250 LEDs that react to collaborative wind movement such as breath. The core of the piece is an Arduino Mega 2560, followed by 25 strands of 50-count WS2811 LEDs, 16 improved Modern Device wind sensors (Rev. P), and 300 ft. of calligraphy grade rice paper. It was debuted at the SubZERO art festival and is currently on display at Kaleid gallery.

Website screenshot

Lead development for redesign of Blackbaud Interactive

The interactive division of Blackbaud, Inc. was looking for a distinctive and modern way to showcase their extensive custom design work. The challenge was to offer unique, yet responsive, layouts for each case study. Also, the information and bio pages had their own designs and interactivity needs. I used Bootstrap to build a custom Wordpress theme and tailored the CMS to offer custom content types and fields for future entry without additional development. The project entailed extensive device testing, javascript, and PHP.

Screenshot of website

UX/UI development and API integration for DreamFactory Software

After an interim redesign, DreamFactory needed a wide variety of site and platform enhancements. From simple network visualization to 42 A/B tested landing pages, I provided a wide spectrum of frontend services, including Javascript refactoring, responsive design elements, form processing, and tasteful CSS and Javascript animation. Using PHP, I modernized a legacy platform authentication flow with their changing API plaftorm needs.

Phone screen with running application

Zyn: custom built, full featured synthesizer controlled by web app

The goal of this box was to have the Linux soft-synth ZynAddSubFX running headless on a battery powered and untethered Raspberry Pi, controllable by a simple MIDI keyboard and an instrument switcher on phone or tablet. It also runs Node.js and serves a networked configuration app. The setup allows for networked playing from a variety of contexts. I wrote up a detailed tutorial with code snippets, video, and a public GitHub repo.

A small computer

Fluido: miniaturized and battery powered synthesizer tutorial

For this particular project, I ended up using a Raspberry Pi Zero W for its size and versatility. Because it shares the codebase used by Zyn, it also serves up a Node.js webapp over wifi for changing instruments. It's controllable by any basic USB MIDI keyboard and runs on a mid-sized USB battery pack for around 6 hours. Pretty good for such a tiny footprint and it costs around $12. A interesting challenge was the need to script Telnet to control Fluidsynth, it's main sound engine.

Hand holding phone with application running

Spoleto Festival mobile app

The Charleston City Paper provides comprehensive coverage of the annual Spoleto Festival USA over the course of three weeks. To better serve the many out of town visitors using mobile devices, I planned, designed, and coded this fully featured HTML5 app. In addition to editorial content and complete event calendar, it offered geolocation based suggestions for dining near events. Built with jQuery Mobile and drawing from the pre-existing CMS, it was compatible with a broad range of devices and automatically updated with fresh content.