Cut files without Adobe Illustrator · Type the name, check the preview, download · Up to 20 orders in one batch
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. Name pendants, pet collar plates and pet bookmarks are all cut from a DXF file, and every one used to be drawn by hand in Adobe Illustrator. This builds the same file from a typed name: letters shaped in the chosen script font, fused into one cuttable piece, holes or bend tabs added, written in millimetres.
Before Adobe Illustrator, by hand
Type the name, outline it, stroke and expand it so the script fuses, weld the loose pieces, draw the holes, check nothing falls out, export. One file per order.
After DXF Generator
Type the name, pick the font, adjust anything in the live preview if needed, and press Generate. Twenty orders go through as one batch.
Cut from a generated fileA collar plate cut from a file the program wrote: one script name welded into a single piece, with a bend tab at each end.
Security note: order numbers are blacked out, and API keys, Drive links and account details are removed. The names are examples typed in.
Why I Built This
Each cut file took about twenty minutes to draw
A script name is a row of separate letters that overlap, and a cutter needs one closed outline per piece of metal. Drawing that outline took about twenty minutes an order: outline the name, expand the stroke until the overlaps fuse, weld what stays loose, place the chain holes at matching heights, check that no counter has fallen out of an a.
The program now does that drawing. The operator enters the name and picks the font, and the program does the geometry. Each judgment call (how far to expand the stroke, where the rings sit so the pendant hangs level, what still needs joining) is now a rule applied the same way every time, and a live preview lets the operator adjust the result.
3
modes in one program: pet bookmark, name pendant and collar plate, each with its own two step flow
20
orders in a single batch, each with its own name, font and per letter adjustments
Type
Internal tool
Role
Developer, Experience Designer, Implementation
Built with
Python · OpenAI Image API · Claude Code
The problem, and what changed
The same twenty steps, every order, by hand
The shop had Illustrator, the licensed fonts and correct files. The problem was repeating the same careful sequence by hand for every order. Below is the same cut file, before and after.
1 · Making one name pendant
Before · Adobe Illustrator
Draw it again
About twenty minutes, per order
Set the name in the licensed script font
Convert the text to outlines
Stroke and expand it so the overlapping letters fuse
Weld by hand whatever is still separate
Draw the two chain holes and line them up by eye
Check no counter has fallen out of an a
Export the DXF and type a file name
Find the day's folder, then open Drive and upload it
About twenty minutes of careful work per order.
After · DXF Generator
Type it
The operator enters the name and font
Type the order number and the name, and pick the font
Check the live preview, and adjust a letter or a hole if needed
Press Generate. The file is written, named and uploaded
The program applies the same rules every time, and up to twenty orders go through as one batch.
2 · Step by step
What
Before · by hand in Illustrator
After · DXF Generator
Making the letters one piece
BeforeStroke, expand, then weld the leftovers by hand, judged by eye
AfterEach letter is grown by the boldness setting and unioned on true curves, and whatever is still loose is joined with the smallest set of tapered arcs that makes it one piece
Seeing where it welded
BeforeYou know because you did it
AfterEvery added bar is circled in red, and the readout counts the pieces it found
Chain holes
BeforeDrawn and aligned by hand; a pendant that hangs crooked means doing it again
AfterBoth rings at one shared height, as near the ends as the shape allows, and never on a dot or a loose bit
Knowing it will cut
BeforeZoom in and look for slivers, hair thin bridges and loose counters
AfterRemoved before the file is written, and the preview states the verdict: one connected piece, or how many it found
Size
BeforeSet by hand, then measured
AfterComes out of the name, reported in millimetres before anything is written
Changing your mind
BeforeUndo back through the weld and start again
AfterDrag, rotate or resize any letter or hole, and the outline rebuilds as you go
How many at once
BeforeOne file, one order
AfterUp to twenty orders in one list, each with its own name, font and adjustments
The file name
BeforeTyped at export, so it could be wrong or inconsistent
AfterBuilt from the order number and the name. Never typed, so never wrong
Getting it to the cutter
BeforeFind the folder, open Drive in a browser, upload, check it landed in the right place
AfterThe Drive folder is pasted in once. After that one button, into a dated folder, reusing folders that exist so a second run merges instead of duplicating
What you need installed
BeforeIllustrator, the licensed fonts, and somebody who knows the twenty steps
AfterThe program. The licensed fonts stay activated on the work computer and are read through Windows
20 min → a name
what the person supplies per order: the name and the font, instead of twenty drawing operations
20
orders in a single batch, written, named and uploaded in one press
How It Works
From a typed name to a closed cut path
A local web app: a small server on the work computer, with its own window. One geometry engine behind all three modes, in millimetres throughout.
Track A · Name pendants and collar platesText in, one closed cut path out
Input
A name and a font
Four licensed script fonts, read through Windows so no font file is copied
Shape
Letters as curves
The text is laid out with its real kerning at millimetres per em, each letter as a curve
Fuse
One piece, not many
Grown by the chosen boldness and unioned, the same move as stroke and expand, on true curves rather than a flattened polygon
Join and clean
Bars and slivers
Anything still separate, a space, an i dot, letters that never touch, gets a curved connector. Slivers are dropped
Output
AutoCAD 2004 DXF
1 unit = 1 mm, one closed spline per contour plus a hatch, the structure the old hand exports had
Track B · Pet bookmarksA photo becomes a head that sits on the bookmark
Input
The customer's pet photo
The same photo the order already carries
Service
OpenAI Image API
Line art under a locked prompt: face and ears only, cut at the jaw
Trace
Line art to outline
Filled into a silhouette, whiskers too thin to cut removed, then traced into a smooth outline
Fit
Head on the stick
The head sits where it is solid across the stick's full width, and the name is cut through the slot below
Output
One cuttable bookmark
Capitals a little taller than the slot, so every letter joins the frame on both sides
Program I builtOutside serviceWhat comes out
Three item types
Pet bookmarks, name pendants and collar plates
Each product has its own tab, and all three share one geometry engine. The flow is the same each time: enter the order, check the outline, press Generate. Only the shape built around the name changes.
Real output, straight from the programThe three item types, as the outlines the program wrote. Each is a single closed path, and the size in millimetres is calculated from the name.
The screens below are the real program with its live cut preview filled in, and each outline beside one is the DXF that run wrote. Two notes about this machine: the shop's four licensed fonts are activated on the work computer and not installed here, so the lettering is a stand-in face and the list reports 2 of 4 fonts ready; and the bookmark's line art normally comes back from the image model, so its Photo and Sketch panels hold the program's own bundled reference drawing. Everything after that is the real code.
01
Item type 01 · Pet bookmark
The first tab turns the customer's pet photo into a bookmark.
Up to 20 photos in one batch, one per order
Each photo becomes a card, with that order's name typed on it
The whole batch is generated at once
How I built it: Pet bookmark
One reference file the shop had already cut sets every number: a 12 mm stick, a 6.3 mm slot, capitals 6.45 mm tall.
The capitals are deliberately taller than the slot, so no letter can fall out of the cut.
Long names go by rule: lengthen the bar, reduce the spacing, narrow the letters. The window says which one it had to do.
The bookmark tab after the artwork has been generated. The three panels are that order's stages: the photo in, the line drawing made from it, and the silhouette the cut is traced from, with Redo sketch and Redo silhouette for the one that comes back wrong. The green line reads "One piece - ready to cut".What it wrote for that order: 40.0 × 100.0 mm, one closed path.
02
Item type 02 · Name pendant
The script name pendant, with a chain hole at each end.
Four script fonts, each checked as ready before it can be used
Letter spacing, letter boldness, which is how far the letters are grown so they fuse, and the width of the connector bars
Hole diameter from 1.0 to 2.2 mm, set separately for each ring
In the preview any letter can be dragged, rotated or resized, and so can the holes
How I built it: Name pendant
Letters are grown by the boldness setting and unioned, so overlapping script becomes one shape.
What is still separate, a space, the dot of an i, a font whose letters never quite touch, is joined with a shallow tapered arc.
It uses the smallest set of those bars that makes the name one piece, and circles each one in red so the operator can see what was added.
Both rings sit at one height and never on a dot, because rings at different heights hang crooked.
Two orders, both generated. The live cut preview shows the real outline: the handles under it move, rotate and resize each letter, and the line beneath reads "2 separate pieces found - added 1 curved connector (red circles)". Every slider here used to be a manual Illustrator step.The same order as a cut path: 50.0 × 20.7 mm. One connector was added where the script did not touch, and both rings sit at one height.
03
Item type 03 · Collar plate
The metal name plate that bends around a pet collar strap.
Pet name in the collar script, with the plate sized from the name rather than the other way round
End symbol: none, a bone or a chicken leg, resizable and rotatable
Boldness for the letters, the connectors and the bend frames
The frames can be moved and resized in the preview, and a frame that would overlap the lettering is refused
How I built it: Collar plate
Reuses the name builder and adds an open rectangular frame on each side for the strap.
The limits are built into the geometry: a frame moves within 20 mm across and 10 mm up, a letter within 8 mm, walls stay between 0.4 and 1.8 mm.
Anything outside those limits comes back as a plain sentence, for example "Keep each collar box outside the lettering".
The collar tab with the preview filled. The frames and the bone can be dragged and resized in place, and the readout confirms 53.8 × 17.1 mm, one connected piece. A plate cut in two pieces would be scrap.The collar version of the same name: 53.8 × 17.1 mm. The open frames are what the strap threads through, and by the time the file is written frames, symbol and lettering are one path.
04
And then · Generate, download, hand off
One press writes the files, names them and puts them where the cutter can find them. This is the half of the job that used to happen in Finder and a browser tab.
Generate and download writes the files to the computer; Generate and upload sends the same batch straight into the shop's Google Drive, into a folder named for the day
The Drive link is pasted once. After that an upload is one button, with no exporting, signing in or choosing a folder per order
A second upload the same day reuses the folders already there, so the afternoon's batch joins the morning's
The file name is built automatically from the order number and the name, the same way every time
How I built it: Generate and hand off
The DXF is AutoCAD 2004 at 1 unit per millimetre, one closed spline per contour plus a hatch, the same structure the shop's earlier exports had, so nothing downstream changed.
The preview is that written file rendered back to SVG, so the operator approves the exact file that gets cut.
Naming format: the date plus _cutting, then order number - name, then the same again plus the product.
The upload reuses any folder whose name already matches, so a second run merges into the first.
The real tree from the run that produced the screenshots above, with the order numbers zeroed. The same structure is created in Drive, so each file is easy to match to its order at the cutter.A cut piece: frame, connector and welded script are one closed path, and the counters inside the letters survived.
How I built it
How each part works
A Python program packaged as a single Windows app, built with Claude Code. It runs a small server on the work computer and opens its own window onto it, falling back to the browser.
How each part works4 parts
01
Geometry in millimetres
One shared engine behind all three modes, working in real units from the first step.
How I built it
Every shape is a path in millimetres with y pointing up, so sizes on screen match the metal exactly
Boolean operations run on true Bézier curves, like Illustrator's Pathfinder, which keeps the script curves smooth
Paths are flattened to polygons only for measuring, never for the output
02
Licensed fonts without the font files
The shop's four script fonts are activated through Creative Cloud on the work computer, not shipped with the program.
How I built it
A small bridge asks Windows itself for the shaped outlines of a text, so the program never copies the font data
A font appears in the list only once Windows can see it, and a newly activated font shows up on a reload
The screen says how many fonts are ready, instead of failing later with an empty shape
03
Rings that hang level
Both chain holes sit at one height, as close to the ends of the name as the shape allows.
How I built it
It searches for the height where both ends are solid enough to carry a ring, preferring a higher line, around three quarters up, where the reference pieces had them
Small parts such as dots are never used for a ring
If there is nowhere safe it says "Could not find where to attach the rings" and does not write a pendant that would tear
04
Removing details too small to cut
Slivers, hair thin bridges and stray islands are removed before the file is written.
How I built it
Tiny islands and holes below a minimum area are dropped, and the program reports how many
If it still comes out as several pieces, the message names the number and suggests a thicker outline instead of exporting it
On bookmarks, whiskers too thin to survive the cut are taken out of the traced head