Available for hire | hello@jamiehamilton.ca

I'm Jamie

A Full Stack Developer in Vancouver. I have over 10 years experience specializing in business systems and B2B integrations.

Case Studies

Targeted Modernization of a Legacy ERP

A ground-up rewrite was off the table, but targeted fixes kept the system running.

A B2B hardware reseller in Vancouver ran their daily operations on a custom ERP platform. It was reliable, but starting to show its age. Integrations with major distributors like Synnex and Ingram Micro were built on much older APIs (SOAP/XML) that were facing a planned shutdown. Without action, this would introduce a serious supply chain disruption.

In addition, the application was originally built to only work with Internet Explorer. Microsoft’s current browser still maintains a compatibility mode than can be enabled, but it’s a source of friction, and locks out non-Windows devices entirely.

Tasked with keeping the existing system viable, I had full discretion over the technical approach. The application (mid-2000s Java with J2EE and Struts) had no documentation or test coverage, but the codebase was reasonably organized. The newer distributor APIs (REST/JSON) were well documented, making the transition a smooth process. The part that required the most planning was integrating OAuth client credentials for suppliers that used it, as the existing framework had assumed API keys would always be static.

The browser incompatibility came down to an old version of a commercial JavaScript data grid library (ActiveWidgets). Pagination and sorting were handled server-side, the library was only used as a simple table, so I couldn’t justify upgrading the commercial license. I wrote a lightweight replacement from scratch, closely matching the existing look and feel so the change would be transparent to employees.

As part of my review, I audited the codebase for common security issues. Authorization for privileged actions was correctly enforced in JSP:

<% if ( user.canDoPrivilegedThing() ) { %>
	<a href="privileged.do" class="button">Privileged</a>
<% } %>

But in some cases, the Java action itself never verified the authorization. This meant any authenticated employee could bypass the check by navigating directly to the right URL. I added proper server-side enforcement to close this gap.

The end result was an ERP free of looming deprecation risks and browser constraints, with a stronger security baseline than it started with. Targeted modernization extended the system’s useful life while keeping the scope and cost well below a ground-up rewrite.

Let's Connect I'm available for contract or full time opportunities in Vancouver or remotely. Get in touch

Automating 10 Hours of Weekly Scheduling

I built a scheduling engine for complex post-production workflows.

A TV studio in Los Angeles uses Google Sheets to build their episode schedules. Each sheet follows a standard template, but can involve 20+ episodes cycling through the many production phases - all with overlapping timelines, shared staff, and strict sequencing rules. Building these by hand was a significant time sink at around 10 hours per week, and prone to the kind of errors that cascade when one phase slips.

I was contracted to design and build a web application that would generate these sheets for them. I was provided detailed requirements covering the scheduling rules and rough UI direction, while taking ownership of technical direction and higher level UX.

Production phases follow a fixed order, but resource constraints (e.g. staff availability, concurrent task limits, minimum spacing between milestones) create ripple effects across the entire schedule. The UI walks users through each layer, with each step dynamically shaped by earlier inputs. When a conflict arises, the system either resolves it automatically or flags it for human review. The generated sheets match the exact format the team was used to, so adoption was seamless. Same layout, same visual language, just without the manual effort.

Architecturally, a Node.js backend with TypeScript was the clear choice for this project. While the scheduling logic is complex, it’s not computationally heavy. Being able to share type definitions and scheduling formulas with the UI significantly reduces the surface area for potential issues. The scheduling engine itself is its own layer, decoupled from the Google Sheets implementation. This ensures the scheduling logic can be validated against known-correct input/output pairs without involving the specifics of the Sheets API.

The platform is already reducing what was previously a significant weekly time investment, freeing the team to focus on creative work instead of logistics. What used to slip through as human error now gets caught before it ever reaches a production calendar.

Let's Connect I'm available for contract or full time opportunities in Vancouver or remotely. Get in touch