Scan the order paper, the laser is already set up · Artwork, font and size set automatically · About 40% less time at the engraving station
A program I built for Mignon and Mignon, a personalized jewelry brand that engraves names, initials, birthstones and pet portraits onto necklaces, bracelets, rings and charms. Every engraved piece is marked by a laser driven by EZcad, and setting up each piece used to be ten minutes of manual work: find the customer's artwork on Google Drive, download it, import it, choose the right font, resize and position everything, set the speed and power. Laser Station reads the QR code printed on the order paper and does all of that automatically. When the setup is done, it shows READY TO MARK and the operator presses F2 to engrave.
Before By hand, per piece
Read the order paper, search Google Drive for the photo, download it, import it into the laser software, pick the font the paper names, resize and move the text until it fits, set the speed and power, then mark.
After Laser Station
Scan the QR on the paper. The template opens, the artwork is already on this computer, the text, font, size and position are set, the speed and power match the finish, and the screen says READY TO MARK.
The whole run at the real machine, uncut: one scan after another. Each scan replaces what is on the laser's canvas with the next order's artwork and text in a few seconds, and the green bar says READY TO MARK.
Security note: the clip is the capture as it was recorded, uncut and silent. No personal information reaches this program. What a customer gives the shop is the text they want engraved, and on photo items a picture of their pet. The one black box on the order papers covers the printed header block, which the engraving never uses; everything it does use is left as printed: the QR code, the item code, the font and finish, and the personalization.
Why I Built This
Setting up each piece took longer than engraving it
Marking a piece takes seconds. Getting the laser ready took minutes, every time: find the artwork in the day's Drive folder, find the font in a list, then size and place the text so it fits inside an 18 mm coin without touching the ring hole. None of it is difficult, but it has to be done carefully for every piece, all day.
A coin is only one of the items on that bench. The same machine marks name bars, hearts, rings, cuffs, bookmarks, charm necklaces, urns, dog tags and medical bars, each with its own template, default font and rules about where the text may sit. Adding an item family to the program means writing those rules down once. I did it for every family the shop sells.
The printing program already knew everything the laser needed, because it had just printed the order. So I connected the two programs: the printing program adds one QR code per engraved item to the order paper, and Laser Station reads it at the machine. Before, a person re-read the paper and entered it into the laser software. Now the code carries the order number, the item, the finish, the text and the font, with a checksum that catches a partial scan before anything is engraved.
The program does not fire the laser. It drives everything in EZcad except Mark, and it answers No to every save prompt. Someone's hand may be on the jig, so the operator presses F2 to engrave.
40%
less time at the engraving station, measured by the shop after the program went into daily use
1
keystroke left for the operator: F2, which is Mark. The program sets up everything else and stops
Type
Internal tool
Role
Developer, Experience Designer, Implementation
Built with
Python · EZcad · Claude Code
The problem, and what changed
Ten minutes of setup per piece, or one scan
The laser could already do all of this, and the team was already doing it correctly. The problem was the time each step took, on every piece. Below is the same job, before and after.
1 · The setup: from eight manual steps to one scan
Before · By hand
Re-read the paper into the laser
About ten minutes, every piece
Read the order paper and work out what is being engraved
Open Google Drive and find the folder for that day
Find the customer's artwork in it and download it
Import the file into the laser software
Find the font the paper names in a long list
Type the name, then resize and move it until it fits the piece
Set the speed and power for the finish
Check the paper once more, then mark
Each manual step is a chance to engrave the wrong name, font or item.
After · Laser Station
Scan, then press F2
Seconds, while the piece goes on the jig
Point the scanner at the paper and pull the trigger
The green bar says READY TO MARK, and the operator presses F2
What is left is the physical work: picking up the paper and putting the piece on the jig.
2 · Task by task
What
Before · by hand
After · Laser Station
Finding the artwork
BeforeSearch Google Drive for the day's folder, find the customer's file, download it, import it
AfterThe laser computer is signed into the shop's Drive, so the artwork is already there. The program picks the right file out of it, trims the margin and imports it, and the window names the photo and the day's folder it came from
Placing it
BeforeDrag and resize by eye until the head looks centred in the coin
AfterCentred and scaled in millimetres, at the largest size that still clears the edge and the ring hole
The text
BeforeFind the named font in a list, type the name, resize and reposition it, often more than once
AfterSet in the named font, sized and positioned to fit on the first try, with a note such as "Long text: made smaller to fit" when it had to shrink
Speed and power
BeforeSet by hand for a dark or a light engraving
AfterSet from the finish on the paper; the frequency is deliberately left as the template has it
Checking it is right
BeforeRead the paper again and compare it with the screen
AfterOne green bar shows the name, item code, finish and marking settings, so the piece on the jig is quick to check
A bad scan
BeforeA misread was only noticed on the finished piece
AfterA checksum catches a partial scan and asks for another
More than one piece in an order
BeforeThe whole setup again, by hand, for the back face or the next charm
AfterAuto shift: the next piece loads itself once the mark finishes, with no second scan or button press
Who presses Mark
BeforeThe operator
AfterStill the operator. The program drives everything in EZcad except Mark, and never answers Yes to a save prompt
8 → 1
steps the person does per piece: eight manual ones became one scan, with F2 at the end
40%
less time at the engraving station, measured by the shop after the program went into daily use
How It Works
What happens between the scan and READY TO MARK
Laser Station is a small window that sits in the corner of the laser computer's screen. It has no file dialogs and nothing to type into. A code comes in, and either the laser is set up or the screen explains why not.
The path of one scanA Python desktop program for Windows
Printing program
One QR per item
Printed on the order paper. The code carries the order number, item code, finish, what to engrave and in which font, with a checksum
Scanner hook
Catch the keys
The 2D QR scanner types into whatever window is in front, which at the laser is EZcad. A low level keyboard hook recognises the code by its prefix and takes the keystrokes before they land anywhere
Laser Station
Work out the job
Decode and check the code, find the template for that item, find the customer's artwork, work out the text, the font, the size and the position
EZcad 2.14.10
Driven, not clicked
Opens the template, imports the artwork, sets the text, font, size, position, rotation and the pen's speed and power, each command waiting for EZcad to finish before the next one
READY TO MARK
The person presses F2
The program never presses Mark, and never takes the keyboard away from EZcad while it is showing this
Program I builtOutside program or serviceWhat comes out
Step by step
How a person uses it
The operator scans the order paper and presses F2. Everything in between is automatic.
01
The order paper arrives with a code on it
The printing program puts one QR code on the paper for every item that gets engraved.
The code carries the order number, the item code, the finish, and the text and font for each engraved face or piece
Below it, the same information is printed in words, so a person can read what the code says
An order with two engraved pieces gets two codes, in the order they are made
How I built it: The order paper
Both programs read one shared payload file, so the printer and the laser use the same data
The code is versioned, and the reader handles every format the printing side has used
A three byte checksum catches a half read scan before anything is engraved
Order paper · one pieceOne code per engraved piece. The item code, finish, font and selections are printed underneath it, exactly as the laser will use them.Order paper · two namesAn order with two names and two birthstones. Everything the laser needs is in the code, and in print for the person. Only the header block is covered.
02
Scan it, anywhere on the screen
The operator points the scanner at the paper and pulls the trigger. Nothing has to be clicked first.
The scanner works whatever window is in front, including the laser software itself
A scan that is not a Laser Station code is handed straight back to whatever window was active, in order, so the scanner still works normally for everything else
A damaged or partial scan is caught by the checksum and asks to be scanned again
How I built it: Scanning
A 2D QR scanner behaves like a keyboard, so a scan is a burst of keystrokes into whatever window has focus. At a laser that is EZcad, where stray characters land in the artwork
A low level Windows keyboard hook watches for the code's prefix, holds the keys while they could still be a code, and swallows them once it completes
Keys that turn out not to be a code are replayed into the active window in order, so normal typing still works
A few seconds after the scan. The template, the customer's traced portrait and the name are all in place on the laser's canvas.
03
The program sets the laser up
Everything the operator used to do by hand happens while they put the piece on the jig.
Template: the right file for that item code is opened, discarding whatever was on the canvas
The item decides the rest: a photo coin wants a traced portrait with the name curved along the bottom, a cuff wants one line inside the guide box the shop drew, a medical bar wants the symbol out of the template with the text centred beside it, and a birth flower ring wants a picture and no text at all
Artwork: the customer's black and white portrait is found on this computer and imported, on white, with its margin trimmed
Text: set in the font the paper names, sized and positioned so it fits the piece and clears the ring hole
Laser settings: speed and power are set for a dark or a light engraving; the frequency is deliberately left as the template has it
How I built it: Setting EZcad up
EZcad has no scripting, so the program drives it the way Windows does, by sending messages to its own windows and panels
Every command waits for EZcad to finish instead of pausing for a fixed time, so a setup takes seconds
EZcad quirks I found and worked around: Apply stays greyed out unless the change looks like a real keystroke, and size cannot be applied in the same step as text or the letters stretch
Save prompts are always answered No, so a template is never overwritten
Mid setup. The imported artwork is selected, its position and size in millimetres have been applied in one step, and the pen's speed and power are set beside it.
04
READY TO MARK, and the operator presses F2
The green bar is the only thing the operator has to read.
The pet's name, the item code and the finish, so the piece on the jig can be checked against the screen in one glance
The marking settings being used, and which photo was chosen and from which day's folder
Any note worth knowing, for example "Long text: made smaller to fit"
Test runs a frame without firing, Log shows everything the program did, and Settings is where the folders live
How I built it: READY TO MARK
A rule from reviewing the first version: clicking this window must not take keyboard focus from EZcad, because F2 is Mark
The window does not take focus, stays on top, and sits clear of the laser's own controls
A job counts as finished only when EZcad's Part counter rises on two consecutive reads while it is idle, so the next order loads only after the mark is done
A photo coinThe whole interface: name, item, finish, settings and the chosen photo. The operator then presses F2.A birth flower ring drawing, not a screenshotThe same window for a ring where nothing is typed. Twelve month pictures live in the template, and the one for the customer's month is copied into the guide box.
05
An order with more than one piece carries on by itself
Plenty of orders are not one engraving. A charm with a message on the back, a pendant with two faces, three charms on one bracelet: each of those is another setup at the same machine.
A job can hold several steps: one per piece, a front and a back, or one step with two faces
Without Auto shift, the operator moves between them with Back and Next, and a strip of dots shows which piece is on the laser now
With Auto shift ticked, the next step loads itself as soon as the mark finishes, with no second scan or button press
The tick is remembered between sessions, and the job on screen follows it the moment it changes
The steps are not always the same kind of thing: on one bookmark the verse goes on the bar and the reference goes on the heart, each in its own font
When the last step is done the window says Scan the next order paper
How I built it: Auto shift
The next step rewrites the canvas, so it waits for the same Part counter check instead of a fixed delay
It advances only when there is somewhere to advance to, which stops a single piece job looping
Why it exists: pressing Next moved focus to Laser Station, so the operator's F2 went to the wrong window. With Auto shift, the usual case needs no click
A three piece bracelet drawing, not a screenshotTwo name bars and a heart, all from one scan. The bars come first and the heart last, the window names the piece in front of the operator before every Mark, and each name sits inside its own outline: 3 mm in from a bar's end, in the middle of the heart.
How I built it
How each part works
A Python desktop program for Windows, packaged as a single app and built with Claude Code. Most of the features below came from problems on the shop floor.
How each part works5 parts
01
Finding the customer's artwork
Finds the right picture in folders that are named by hand.
How I built it
The laser computer is signed into the shop's Drive, and today's and yesterday's folders are pulled down in the background, so the picture is already local when the code is scanned
Yesterday is searched too, because a photo prepared late in the evening lands in the previous day
File names are matched on the order number first, then narrowed by the pet's name, the finish and the face, so extra endings such as nobg or a copy's "(1)" are ignored
Colour photos are rejected: only black and white artwork is engravable, and the answer is remembered per file so it is ready before the order is scanned
The same path carries more than portraits: on a handwriting item the customer's own handwriting, photographed and reduced to black and white, is the engraving
02
Knowing how wide a text will be
Text sized to fit the piece on the first try.
How I built it
Letter shapes are read straight from the installed font files, and EZcad's "Height" is the font's em size, so font units convert to millimetres by a single scale per text
That lets the program measure the ink box of a name before it is placed, and shrink it to fit before anything is engraved
If a font is missing on this computer, or is a different file under the same name, the program says so and names the fix, because EZcad would silently substitute another font and the letters would come out wrong
03
Placing a portrait inside a coin
The head centred, at the largest size that still clears the edge and the ring hole.
How I built it
The picture is reduced to a grid of where it has ink, and the inked parts are centred on the coin's centre
The largest scale is found for which all the ink stays inside the coin's circle and outside the ring hole
For bookmarks cut around the head, the cut file's own outline is read back out of the DXF and the photo is lined up against it by overlap, so the engraved head matches the cut head
04
Reading the personalization text
Personalization fields are free text, and people put more in them than the engraving.
How I built it
Birthstone names, birth months and charm choices are recognised and taken out of the engraving, because "Mia, sapphire bs" means engrave Mia
Misspellings are matched by edit distance, with checks so a real name is not mistaken for a stone
A birth month arrives as a word, a sentence or a flower: “May”, “birth month is October”, “Rose” meaning June, and the right picture follows from it
On the breed coins a number is a picture: “#19 Max” means breed 19 out of the template's twenty, with Max underneath
Hearts, stars, paws and crowns are taken from the template's own symbol corner instead of a font, so they match the shop's own designs
Rules that only the shop can decide live in one plain text file per item code, in the shop's own words, so a rule can be corrected without changing the program
05
History and updates
A record of what was engraved, and updates that install themselves.
How I built it
Every job is kept and can be searched by order number or by pet name, so a re-print or a complaint can be checked
Only one copy of the program can run at a time, enforced with a named system lock, because two copies would both grab the scanner
New versions are published to a Drive folder and installed in place, and the program restarts itself into the new one