Projects

Two kinds of work. First, case studies from my job at Bigtent Outdoor Equipment Ltd. — proprietary systems, so they are described rather than shown. Second, personal projects you can open and read; each one lives on its own subdomain.

Work case studies

Bigtent Outdoor Equipment Ltd., Vancouver, BC · Sep 2023 – present. Problem → solution → result. No client data, no screenshots.

Cloudflare Workers
Cloudflare KV
Zero Trust Access
Shopify GraphQL

Multi-store fulfillment dashboard

Problem

Three interconnected storefronts — retail and wholesale, linked through Shopify Collective — were overselling because the daily fulfillment checks were manual and error-prone.

Solution

A zero-database, read-only internal dashboard on Cloudflare Workers and KV, placed behind Cloudflare Zero Trust Access. It aggregates live Shopify GraphQL data across the three stores, works around the 1,000-point API rate limit with paginated batching, and applies chronological allocation rules so the same unit is never promised twice.

Result

Daily fulfillment reports and morning fulfillment routing are fully automated, with box-packing volumetric estimates and no double-counting across channels — live data for all three stores in seconds.

Shopify Functions
Delivery Customization
WebAssembly

Margin-protection checkout function

Problem

Native shipping logic applied free shipping to heavily discounted clearance carts, leaking margin on every such order.

Solution

A serverless Delivery Customization built with Shopify Functions and WebAssembly. It intercepts checkout data and recalculates shipping in real time, evaluating discounts at the line-item level.

Result

Free-shipping leaks on discounted carts are blocked at checkout, saving thousands of dollars a year, with no infrastructure to operate.

Cloudflare Workers
Cloudflare KV
HMAC-SHA256

Serverless order tracking portal

Problem

Standard tracking apps could not follow 4–10 week ocean-freight pre-orders, so every shipment cycle produced a spike in support requests.

Solution

A globally distributed, edge-serverless tracking portal on Cloudflare Workers and KV. HMAC-SHA256 tokens expose batch transit schedules without revealing any personally identifiable information.

Result

The portal absorbs high-traffic spikes at the edge while protecting PII, and customers can check their batch's transit schedule themselves.

Shopify Liquid
Metaobjects
Cart Transform API

Pre-order storefront overhaul

Problem

Pre-order products ship cross-border and their inventory changes constantly; customers needed that explained clearly at the point of purchase.

Solution

I rebuilt the pre-order frontend with native Liquid, using Metaobjects for the structured content and the Cart Transform API for the cart behaviour.

Result

Cross-border shipping terms and dynamic inventory are communicated clearly to customers on the storefront, in native theme code the team can maintain.

GitHub Actions
CI/CD
Shopify themes

Theme CI/CD pipeline

Problem

Theme changes went live without automated checks, with a real risk of accidentally overwriting the live theme.

Solution

I designed a GitHub-based CI/CD pipeline with automated testing and moved the team onto it.

Result

Deployments are safe and zero-downtime, and the pipeline itself prevents accidental overwrites of the live theme.

How I approach this work

Before writing custom code I check what Shopify already does; custom work is reserved for what the platform and generic apps cannot handle.

When custom code is justified it runs on Cloudflare Workers and KV, so there is no server to operate.

Earlier work, including a PDF boundary-extraction API built with Python, ONNX and OpenCV during an internship at CEC Mining Systems, is on the résumé.

Personal projects

Open source where the repository is public. Every project has a page here and its own subdomain: the running app where there is one, otherwise the README.

Annotations over a slide in drawing mode

Draw on Screen

Live app

A lightweight screen annotation tool for macOS and Windows: draw on top of anything on your screen, then switch back to clicking through to the apps underneath without losing what you drew. The drawing engine is TypeScript on an HTML canvas; the native shell is Rust using the operating system's own web view. On iPad and Android tablets it installs as a web app for drawing on a board or on a photo.

Tauri 2
Rust
TypeScript
HTML Canvas
PWA
Home screen: cards for the five rendering strategies

SSR Visualizer

Live app

A learning tool that shows the difference between CSR, SSR, SSG, ISR and Streaming SSR + RSC as motion on a timeline instead of prose. Requests, responses, paints and hydration flow across browser, network and server lanes, and TTFB, FCP, LCP and TTI land as flags on the same time axis. Change a parameter and the flags move immediately.

Next.js 16
React 19
TypeScript
Static export

Private repository; the app itself runs on ssr-visualizer.haveagoodday.dev.

Full screen: system tree, X-ray 3D view and bottom toolbar

Rocky 3D Catalog

Live app

An interactive 3D parts map of a Tesla Model S (2012–2016 North American catalog) for DIY maintenance: 23 systems, 213 groups, 4,770 part rows and 370 3D locations, each linked to where the part sits on the car. A personal tool; the interface and translated group names are in Korean.

three.js
JavaScript
Static site
PDF data extraction

WIFI-3D-SCANNER

Planning

A privacy-awareness research project: how much of a room — and the people in it — can be reconstructed from Wi-Fi signals alone (CSI, RSSI, multipath delay) with cheap, off-the-shelf hardware. Planning stage: goals, approach, performance environment, open decisions and hardware options in Canada, written in Korean.

Wi-Fi CSI
Python
NumPy
three.js

No screenshots yet — documents only. Private repository.