Business Central ↔ VisualFactory
Syncs assembly orders and parts data between inventory and shop-floor instructions, with no manual entry.
Built a full automation pipeline using custom AL code and secure API connections to sync assembly orders and parts data between Microsoft Business Central (inventory) and VisualFactory (shop-floor assembly instructions), eliminating manual entry and ensuring accurate, real-time inventory updates across systems.
- Business Central AL
- OAuth 2.0
- REST APIs
VisualFactory → Windchill (FRACAS intake)
Shop-floor defect reports flow into Windchill automatically, validated, transformed and audit-logged.
Delivered an automated path from shop-floor issue reporting in VisualFactory into Windchill by standardizing the handoff into Windchill’s FRACAS-compatible import format. Implemented a reliable “generate → deliver → validate → transform → import” pipeline: VisualFactory produces structured defect reports (CSV/XML), routes them through a dedicated Microsoft 365 mailbox, and an internal scheduled automation retrieves and validates attachments via Microsoft Graph, archives processed inputs, transforms them into Windchill-compliant FRACAS XML, and imports them using Windchill’s standard XML import interface, complete with audit logging and secure credential handling.
- VisualFactory
- Windchill
- Microsoft Graph
- XML
Inventory & payroll system
Shipments, rep checkouts, sales and commissions in one place, with emailed PDF pay stubs.
Created a full inventory and payroll system for a door-to-door sales business that worked with their existing sales app. The new app allowed the company to easily record shipments from the supplier, products checked out to sales representatives, and items sold to customers. Items sold would then be added to the payroll system where base salary, commission and monthly bonuses would be calculated. Once approved the system would email the employee a PDF summarizing their payroll record.
- Backendless
- React
- JavaScript
Shipping tracker integration
Delivery dates from AfterShip land in SKU.io purchase orders, replacing daily tracking-number lookups.
Created middleware to update SKU.io (an inventory/purchase order tracker) with expected delivery date from the AfterShip API (a shipping tracker). Using Retool, I created a webhook from SKU.io to receive new purchase orders, add the associated tracking numbers to the AfterShip tracker. Retool was also used to catch the webhooks from AfterShip indicating a change in order status and update the SKU.io record. Previously this client had been looking up each tracking number daily and updating the SKU.io record manually, so the new system saved a significant amount of time.
Product reviewer management
An Airtable-backed system with a Streamlit front end replaced a spreadsheet for managing reviewers.
I worked with a company that relied on external reviewers to evaluate products and provide feedback and ratings. The process involved manually tracking the list of products and number of reviews requested for each, as well as tracking the list of reviewers and which products they had already evaluated. This manual process became unworkable as the company grew. I created an app using Airtable to track products, reviewers, and reviews. I built a front end using Streamlit that allowed the reviewers to log in, see reviews they had done and request additional products to review.
HubSpot keyword contact finder
Type a keyword, get every contact at matching companies, replacing a manual company-by-company search.
A client was providing direct marketing incentives to certain subgroups of clients. They used Hubspot to track target companies and their associated interests using keywords associated with the companies. However, to send out their marketing email they had to find all companies associated with a given keyword, and then, by hand go through each of the company employees and pull their email addresses. I built a simple app that worked with the Hubspot API to complete this process automatically. Using my app the client now just types in a keyword and is provided a list of all relevant contacts.
- Python
- Streamlit
- HubSpot API
CRM migrations to HubSpot
Meetings, notes and other history moved across, not just contacts and companies.
I've worked with several companies to transfer their data between different CRMs (Customer Relationship Managers). Tools exist that allow contacts and companies to be transferred easily, but this doesn't include meetings, notes, and other data. I have several Python scripts that allow me to pull all this data and import it into Hubspot.
Spotify playlist mixer (personal project)
Combines any set of playlists into one fresh, shuffled mix, minus duplicates and anything from playlists I exclude.
A tool I built for myself and still use. I pick the playlists I want to hear and any playlists whose songs I want to avoid, and it writes a shuffled, de-duplicated mix to a playlist of my choice. For example, I can mix my "love songs" playlist but skip any song that's also on my "sad songs" playlist. It signs in through Spotify (OAuth 2.0) and shows how I handle authenticated third-party APIs: token refresh, paging through large result sets, rate limits, and safely writing changes back to a user's account.
- SvelteKit
- OAuth 2.0 (PKCE)
- Spotify Web API