Experience

ROYCE AYR Cutting Tools

Software Developer / DevOps

July 2023 - Present

Responsibilities included developing and deploying various applications, as well as managing IT systems such as physical servers and computers.

My boss and I were the only developers at the company, and I was the only one who was a full-stack dev, so projects below I wrote all of the code for, minus a few complex SQL queries.

Projects:

Product Website
products.royceayr.com

Developed and deployed a website with dynamic user content for Royce's product line.

  • Uses a unique data structure with categories, subcategories, series categories, and products, with the series having multiple parent subcategories.
  • Customers have the ability to sort by product properties, machine type, machine manufacturer, or industry / application.
  • Dealers have the ability to log in to see their pricing and stock quantities. This data is pulled from Royce's ERP system.
  • Admin Portal is hosted internally, and allows for modifcation of all data on the site. The data can be published to the live site with the click of a button.
  • SEO with dynamic sitemap generation.
  • CI / CD pipeline setup with GitHub Actions, using Playwright for e2e testing and Jest for unit testing. Deployed on a Ubuntu VPS with OpenTelemetry for monitoring, Prometheus for metrics, Loki for logs, Tempo for tracing, and Grafana for visualization.
TypeScriptNode.jsNext.jsReactBootstrapDrizzlePostgreSQLGitHub ActionsPlaywrightJestOpenTelemetryPrometheusGrafana
Scanning 007

Developed and deployed reporting / management software for production.

  • Allows the managers to schedule jobs, set priorities, view job durations, and report pieces completed.
  • Allows employees on the shop floor to see priorities and easily log setup / run times for single / group jobs and report pieces (scan)
  • Also has a timecard portion for employees to log their hours, and a reporting section for managers to see the data.
  • Uses a complicated formula to calculate the projected inventory (as some parts are component parts of other parts)
  • The 7th iteration of the application, hence the name.
TypeScriptNode.jsNext.jsReactBootstrapDrizzleMySQLPlaywrightJest
Outlook Addin / PDF Generator

Developed and deployed a Microsoft Outlook add-in that uses a node.js / express server to generate and attach PDF documents of customer documents.

  • Solves a problem with the difficulty of obtaining PDF copies of orders / quotes / invoices for customers.
  • This former process for obtaining these documents would be one of 2 ways, depending on the document: 1) navigate to the correct page in the ERP, and email it to the employee who would then forward it to the customer. Or 2) going into the filing cabinet, scan it to the employee's email, and then forward it to the customer.
  • Because of the nature of Royce's business, ~100 documents were being requested per day.
  • The new system that I developed is an Outlook add-in that allows the user to select the document type (order, quote, etc), enter in the UID for the document, and the application will pull the data off the system, create the PDF and attach it to the email.
  • Any employee can now access any document in seconds in their outlook client because of this application.
TypeScriptJavaScriptNode.jsExpress.jsOffice.jsReact
US Shipment Master

Developed and deployed a web app that automates the process of generating US customs documents for shipments to the US.

  • Replaces a manual process that took ~7 hours a week which now takes ~40 min a week with more accurate data
  • Works by taking BOL data from Royce's ERP system and finding the appropriate tariffs / country of origins for the items on the BOL
  • Generates correct upload files / pdfs for the US customs
JavaScriptNode.jsExpress.jsReact
Invoicing Program

Developed and deployed a web app that automatically creates and sends invoices / statements.

  • Integrates with existing ERP system to pull data from invoices to be able to automatically send and print (for the customers without emails) invoices and statements.
  • For COD customers, waits until payment is received in full before sending/printing the invoice with a paid watermark.
  • Emailed invoices are automatically sent every morning and statements at the beginning of the month.
  • Logs full history of changes to customer profiles, including when invoices were sent / printed.
  • Over 18000 invoices have been sent or printed since the application was deployed.
TypeScriptNode.jsNext.jsReactMySQLBootstrapPlaywright
Drawing Finder App

Developed a desktop app that connects to my API to find drawings.

  • Royce has over 50,000 drawings on their drawing server organized by customer, so finding specific drawings can be difficult.
  • The solution: a Node.js application connects to the file server and indexes the files once a day. (using cron)
  • A rust desktop app connects to the Node.js server and searches the index for the part number.
  • If the part number file path is found, the rust desktop app opens the file in the default file viewer.
RustJavaScriptNode.jsExpress.js

Other

Projects:

Car Web Scraping System

For my family's car dealership. Scrapes the web for the best deals texts them to a user's phone.

  • Scrapes Kijiji and facebook marketplace for the best deals on cars.
  • Uses a cron job to run the application every 15 minutes.
  • Will search for cars that have a certain price, mileage, and year range.
  • If a car is found that meets the criteria, it will text the user with the details.
Node.jsPuppeteer
This website
johncampbell.dev

Developed + deployed this website, used CI/CD and self-host it.

  • CI / CD was difficult to setup, but the process works like this:
  • 1. a github actions runner runs the building and testing process.
  • 2. if the building and testing succeeds, the runner will authenticate to my pfsense firewall using a client cert, username and password.
  • note the user is only allowed to access the VM the website is hosted.
  • 3. the runner will then use a ssh key to login to the deployment VM, pull the latest changes, run the build process and restart the web server.
NuxtVueTailwindCSSGitHub Actions
Small Server Farm

Servers, switches, and other hardware for different hosting and service applications.

  • Where I live, I have multiple servers, layer 3 switches, UPSes, a firewall / router, and a NAS.
  • My firewall / router is pfsense.
  • I have 2 Cisco Catalyst switches, which I have configured along with my router to have multiple VLANs.
  • I have a TrueNAS, which contains all important data as well as automatically backing up all VMs and containers.
  • UPS for power outages, so no downtime is experieced in the case of a power failure.
  • I have 2 servers with hypervisors, 1 is a Quadnode, so in total I have 4 proxmox instances, and 1 XCP-np instance.
  • A High-Availability Proxmox cluster is configured, so even if multiple proxmox nodes fail, all VMs and containers migrate over.
  • I host many web applications, (including this one), load balancers, password managers, notification servers and monitoring services.
  • How the hosting of websites work is a multi step process:
  • 1) Cloudflare is configured to proxy traffic to my public IP for the given domain.
  • 2) A script is run to update the DNS records on Cloudflare to the current public IP (as I don't pay for static IP).
  • 3) Certificates encrypt the traffic between Cloudflare and my load balancer.
  • 4) My pfsense firewall has firewall + NAT rules allowing the traffic to the load balancer.
  • 5) The traffic is sent to a Kemp load balancer (which is a HA VM) which will distribute the traffic based on the domain/subdomain.
Crypto mining shed

4 Antminer ASIC miners mine crypto while pumping the exhaust (over 10,000 BTUs of heat) into a chicken barn.

  • With my 4 younger brothers help, bought and re-purposed an old shed.
  • Main things were to clean it out, install the inlet, fan and the exhaust pipe
  • The exhaust pipe into the barn is used whenever the barn need heat (which is most of the year)
  • The fan is for when the barn doesn't need heat.
Contributing to Open Source

Contributed to multiple open source projects.

  • most notable open source projects I contributed to are:
  • Uptime Kuma - fancy self-hosting monitoring tool
  • Croner - 0 dependences, npm package.