jpod.dev

{}

full-stack development

Down Arrow

Selected Projects

About Me

Hi! I'm James, a web developer based in Vancouver, Canada.

I've worked with clients including The Directors Guild of Canada, Frank Giustra, The Fiore Group, BC Parks Foundation, Catalytico, Think Tank Training Centre, Grosvenor Berkeley, Giustra Foundation, DeepGreen Metals, and more.

My work has been featured in Variety, on the CBC website, and in various other publications.

To speak with me about working on a project together, please contact me using the form below.

Technologies

  • Node.js (8 years)
  • Vue.js (6 years)
  • Electron (6 years)
  • AWS (6 years)
  • PostgreSQL (7 years)
  • API Development (6 years)
  • MongoDB (6 years)
  • ElasticSearch (2 years)
  • Python (5 years)
  • ProcessWire (8 years)
  • PHP (9 years)
  • Laravel (3 years)
  • Shopify (2 years)
  • RavenDB (1 year)
  • NetSuite (1 year)

Case Studies

  • Think Tank Training Centre

    Introduction

    Think Tank Training Centre, a top-ranked visual effects and CGI school based in North Vancouver, had hit a ceiling -- with their campus at full capacity, the only options for continued growth were to build a second campus, or to start an online division. After researching the competition, we developed a blueprint for a unique custom learning system that translates the in-person Think Tank experience into an online setting. The four major areas to address were pre-recorded lectures, live sessions, ancillary course material, and external integrations.

    Solution

    • To deliver their large library of pre-recorded material to students across the world, we implemented a system in which uploaded videos were automatically transcoded using AWS Lambda functions, stored in S3 buckets, and streamed to users in MPEG-DASH format using Cloudfront. On the client side, I forked the Video.js player to add multiple custom features, including hotkey annotations, auto-generated transcripts, and an 'immersive mode'. Using websockets and a MongoDB instance, I was able to add granular tracking of video watches, allowing school staff to monitor students' video consumption on an ongoing basis.
    • For live sessions, I set up a system to automatically create weekly Zoom meetings for each student group in the term. Using the Zoom API, we were able to track attendance and participation in live sessions automatically, and could maintain an archive of meetings that students can review as needed. In their final term, students work one-on-one with mentors instead of attending group classes, so I implemented a calendar system which allows mentors to schedule meetings with students as needed, and also tracks attendance and feedback for these meetings.
    • To manage ancillary course materials (assignments, exercises, final projects, and so on), I created a course administration dashboard that allows staff to create and edit all of these entities. Because a large portion of course material is identical from one term to another, year-over-year, I added a cloning system that automatically duplicates material from the source term to the target (which can then be edited manually as needed).
    • The Think Tank system includes a large number of external integrations; for example, students are automatically placed into ActiveCampaign audiences, which allows staff to precisely target various student groups for email blasts. Invoices are created automatically in Xero Accounting, and tuition payments via FlyWire are automatically synced into the system, and contracts for incoming students are automatically generated and sent to new students via HelloSign.
    • In addition to the main system, I also developed and/or integrated several side applications for Think Tank -- a fork of Rocket.Chat, for example, that integrates with the main API, and a desktop-recording app for instructors that allows them to grade and give feedback for submitted student assignments.

    Results

    Think Tank Online has been growing steadily year-over-year, with over ten times the inital enrollment projected for 2021. The system's heavy focus on automatation has allowed them to achieve this growth without an excessive increase in staffing, and the online experience has received uniformly positive reviews from students.

  • B.C. Parks Foundation

    Introduction

    The Foundation, which has the mission of promoting and raising funds for provincial parks in British Columbia, had no good way to raise funds online. Their usual procedure was to ask people to send donations via PayPal, e-transfer them to the director's email address, or mail in a cheque to their office in Vancouver.

    Solution

    • After designing and building the standard sections of the site, we found a payment processor that specialized in working with non-profits. I integrated their payment system into the site's donation form, tracking donations on a per-project basis so they could be displayed on the relevant project's progress meter.

    Results

    Since launching the new website, the Foundation has been able to raise several million dollars in online donations, allowing them to purchase large sections of wilderness, which they then donated to the public. These fundraisers have been featured in the New York Times and on CBC as "the first crowd-funded parks".

  • Nested Naturals

    Introduction

    Nested Naturals, a mid-size vitamin and supplement company, wanted to move away from selling on Amazon and towards selling products via their own site. The existing e-commerce system was an ancient WooCommerce site, incorporating dozens of buggy, out-of-date plugins. Accurate sales reporting was especially problematic; the reporting plugins on the site often provided incorrect or incomplete data. Scaling the site to meet the anticipated increase in traffic was another major concern.

    Solution

    • The first step in modernizing their e-commerce system was to build a new Shopify-based site. I developed the site based on the designers' mockups, using custom metafields heavily to support their products' unique requirements. A migration script automatically populated the Shopify site with product data from the old WooCommerce website.
    • Next, existing customer data needed to be moved onto Shopify. I created a local RavenDB instance, and piped customer data from the old WooCommerce into it. Then, the data was then run through a validation function to put it into the correct Shopify schema (and remove a massive number of spam comments and accounts), and finally piped up into Shopify.
    • Finally, I built a custom reporting/analytics app using the Shopify Admin API, which allowed the company to see the impact of specific discounts/promotions and so on.

    Results

    Funneling customers to their own e-commerce system rather than to Amazon has allowed Nested Naturals to increase revenue by reducing their Amazon seller fees. They also now save a significant amount of time dealing with maintenance and reporting, allowing for much greater efficiency compared to their former system.

Contact