Lazer.Grub: Tailored ERP Service


As of May, 2022 this project has been suspended and superceded by a new platform developed also by myself called Vector on Rails. A full write up will be coming out soon.


Enterprise resource planning (ERP) is the integrated management of main business processes, often in real time and mediated by software and technology. ERP is usually referred to as a category of business management software—typically a suite of integrated applications—that an organization can use to collect, store, manage, and interpret data from many business activities. - Wikipedia Foundation 1

Lazer.Grub is the result of an ongoing human-centered design (HCD) response to the daily frustrations found at Vector Etch. With the ultimate goal to reduce the friction found between daily activites from creating a quote for a customer to the quality-control process before shipping a package.

Starting at Vector Etch in September of 2020, my role began with processing quote requests from clients. Through months of using established procedures I began to think “there has to be a better way”. At the start of 2021 I presented my Idea for Lazer.Grub. Envisioned as a platform to first improve the quoting process. As the existing solution involved little visibility and involved many destruvtive actions. Hard-reseting forms, tedidious data-entry and repeating ourselves - the existing process burnt time, money and motivation.

There are four types of orders that Vector Etch handles.

  1. Quote: an order created from custom vector files sent by a customer.
  2. Template: created from a list of pre-made designs, a template, with options such as sizes, hole; no hole, quantity, patten engraving, etc.
  3. Shop: an order containting just retail items such as glue, findings, mixed packs, etc.
  4. MLAS: orders from Vector Etch’s sister store where sheets of acrlyic can be purchased at wholesale prices.

Before LazerGrub

As mentioned above, the existing process was sluggish and sometimes even soul sucking after entering in your 100th quote for the day in to WooCommerce. Key points of frustration I had experienced, that instigated this project, was the process of updating a quote and the repetivie data-entry nature of creating an invoice. Because we used Google Sheets to generate our quote forms, which in itself was an efficent and elegant solution, Sheets were only seperated by the staff memeber who was making that quote at that time, not per quote. As a result, this forced us to throw away quote forms when we were finished with them, hard reseting and losing potentailly hours of work. Now this wasn’t normally a problem, but say, if a customer wanted to add to an existing quote or change a file to be quoted from, we as staff would have to recreate the entire quote, even if only 1 out of 25 files files were changed. Thus wasting an enormous amount of time. Another point of frustration was after the quote was approved by a customer, we would have to, by hand, enter each line as a fee_line in to a new WooCommerce order. This would vary from a 2 minute job to a 20 depending on how large a given quote was. Human error was a factor here, as we had be to extra attentive about the prices entered per line to ensure we were charging correctly.

From an operational level, this exiting processes were extremely predicable and bullet-proof, thanks to the use of industry software (WooCommerce, Google Sheets/Docs). A process commonly described as “It just works”. However, one leering issue I saw in the procedures was the lack of historical data collection and thus the lack of actionable reports informing business decisons. A process that is important in any successful business, a concept I learnt in previous roles at other companies. A simple report like how much material was used this month, wasn’t possible without a manual and frequent warehouse stocktakes.


After discussions with coworkers who are much more familiar with the existing practises than I was at the time, ideas around a web platform began to form. Accessible by all the desktops within the company, seamlessly interfaced by people working with the platform for hours completing quotes or passing by checking an order for a few seconds.

After Lazer.Grub

After Lazer.Grub’s initial deployment, with a quoting module to begin with, the use of a kanban board was performed as a quick visual way to understand the current status of a given order. With a single card representing a single quote the utility provided by this interface and the api connection the platform had with google sheets enabled staff to manipulate quotes like before but with features not previously possible. New features offered by the Lazer.Grub platform included:

  • A whole Google Sheet instance dedicated to one quote, whereas before a single Google Sheet was used for all quotes.
  • Error checking.
  • Shipping and payment preferences from customer.
  • Automatic payment capturing.
  • Historical data collection.
  • Reduction in many repetitive actions.
  • Quick invoicing.
  • Quote References.


Second phase of the project included the template module. Traditionally, template jobs were completed via the WooCommerce website and hand writing the job to paper. This was prone to mistakes and miscommunication as the website is ordered by shape name and not material used, which is how we order our jobs. Additionally poor handwriting and general human error can occur when many jobs have to be filled out in a single session.

Lazer.Grub’s implementation of templates not only removed the need to fill out pieces of paper but also used the user-interface in key ways to present the data in an extremely readable way that followed the conventions that our jobs are represented on the laser and when talked about with each other. This afforded a process that many within the business have expressed positively about. With people quoted as saying “this has made templates so easy now” and “I’m able to do twice as many templates in the same amount of time as before”.

By simply looking up the file name of the template locally with Everything Search and generating the laser ready file in a logical order with the filenames already displayed within Lazer.Grub. The friction found before has been stripped away where now the UI helps the user make the template.


Thanks to the data now collected, Redash has been used to generate reports that has proven to be useful when purchasing more materials, offering new materials and removing old materials.


Real value at this stage was becoming more apparent to my bosses, as actual quantifiable time was being freed up by many people in the organisation by these two modules. Allowing us work on bigger and more interesting things, typically hard to get done during our busier periods. The template module alone reduced time taken per job by an average of 35% when compared to the previous methods of handwriting.

What’s Next?

As discussed, Lazer.Grub’s core function was to handle quotes and templates at Vector Etch, improving speed and reducing errors. With these modules now humming along with many feature requests and bugs reported to myself by a Notion form, the question of ‘what next?' was asked.

The obvious value that the project afforded, told us that it shouldn’t be limited in scope and should try to encompass many of our daily activities.

Check-Off (Quality Control)

Shipping was at the top of our list to solve. With actual shipping handled by ShipStation through the website, the process to quality control (QC) test the order before it leaves our warehouse was still manual, tedious and incomplete. Where key pieces of information were missing, especially when attempting to QC test quoted orders where the files cut couldn’t be previewed by the tester.

Lazer.Grub solved this with a keyboard controlled UI that displayed not only a picture of what the material should look like but also, a preview of the file queued. Something not possible until now 2.


Recuts also became a part of the Lazer.Grub ecosystem after a while of just handwriting or verbally asking for pieces to be recut if there was a material defect or customer had set up a file incorrectly that caused an issue. This enabled actionable statistics that could tell us where we were continually recurring jobs for the same reason, or the customer repeatedly did something like that. All of which could be actionable and help promote new processes that would reduce time loss and wastage.

Behind the Scenes

This project was led and developed by myself entirely with knowledge I have learnt over the years from an IT position at a previous job where I learnt a lot at and a single year at University where I studied a Computer Science degree. While my knowledge was quite informal and took on a naive approach. Where I knew what I wanted and possessed the required knowledge on how to find the solution online or piece together several concepts to achieve my desired result. The fruits of which afford this project and many technologies that support it.

Service Map

Lazer.Grub is comprised of many services that work together to achieve the goal set out. With NodeJS + Vue as the frontend and a combination of HasuraDB (GraphQL) and FastAPI (Python) as the backend, this project affords a stack that utilises many open source projects and services I have developments. All of which is wrapped by a docker compose instance that orchestrates each service. Docker also provides an effective development platform that allows for rapid development and quick testing.

Below is an interactive map of each service and how they connect and interact with each other.

  1. Wikipedia Foundation. Enterprise resource planning. ↩︎

  2. A future writeup will need to be finished explaining how I reverse-engineered the proprietary TSF file format generated by Trotec’s JobControl that is used as the laser cutting source file. To read meta data and generate previews all inside a Python library. ↩︎