Card Series:

Initial thoughts

Last year, The Partner (TP) and I tried to lift our quarantined spirits with an AxiDraw that we used to make a bunch of holiday cards for friends and family. This year, I wanted to build on those and make something that…

  • had some kind of puzzle or provided a “figuring out” experience
  • made use of the fact that a plotter can use more interesting and specialized inks than a typical printer
  • was more automated than last year
  • was, of course, personalized to each recipient

I toyed around with a number of ideas and landed on everyone getting the same card front which allowed me to include some interesting linguistic and numeric curiosities I found this past year, and a personalized inside that would draw a line from our house to the recipient. Here are some ideas we came up with:

I was especially interested in getting a chisel tip pen to make things more interesting and doing something layered. These were the earliest versions of what became the final design:

When it came time to print them, I was a little worried about the cost and availability of the metallic chisel pens as a result of COVID influenced supply chain issues, so I decided to stick with Signo pens that have worked well in the past.


  • 100lb 11x17 Black paper from ThunderBolt Paper on Amazon (the nicer paper I ordered hadn’t arrived in time)
  • Many gold and silver 1mm Signo pens

Card Outside

The outside has a dense front of the card and a blank back. The front has two layers. One layer is the phrase “Happy New Year” written in one color. The other layer is a series of messages in a different color. The messages were a combination of vector images and paths created from fonts and modified for better plotting. Understanding the content of the messages is left as an exercise for the reader.

Card Inside

For the insides, the top half would be a map with a line drawn from our location to the recipient and some text saying how far the card had travelled. Starting with a spreadsheet of recipients, I manually looked up GPS coordinates and performed a rudimentary point to point arc-distance calculation in kilometers (but converted to miles for US-based recipients). Each person was assigned one of several maps. Some of the maps (Seattle and Washington) were found online and drastically simplified. THe rest were globe maps created with amcharts4.

There were three main layout complexities:

  1. Each map needed a different line connecting my location to the destination
  2. Seattle maps were vertical and needed different text placement than the globe maps
  3. Some cards needed distance in miles and others kilometers

Each map needed a different line connecting my location to the destination

To give everyone the right map, the spreadsheet for keeping track of names, addresses and distances included a column for which map the person should get. After making/modifying each of the map files and assigning each person a map, I made a copy of the correct map for each person. Then I manually added an arc (often needing to look up where people lived). While this step could possibly be automated especially if all of the maps were the same (for example if they were all generated with amcharts), it felt like finding and setting up a tool to do that for me would have taken longer than the hour or two I spent moving lines for each of the maps.

Seattle maps were vertical and needed different text placement than the globe maps

Most of the maps (which were generated with amcharts4) were horizontally centered and the distance text was placed underneath it. Seattle’s map was much taller than the others, so instead of having a centered image with text underneath it, I put the Seattle map on the left half of the card and generated left-aligned text to be place beside it. This required a second code path to generate slightly different lines of text at different positions.

Some cards needed distance in miles and others kilometers

In an attempt to reduce code paths (having already duplicated code for handling the Seattle map), I decided to have my spreadsheet generate the text for the distance. After calculating the distance from me to the recipient in km, a distance column noted whether the distance should stay in “km” or be converted to “mi”. The code for generating text concatenates the numeric distance column and the units column.


Last year, I had the AxiDraw hooked up to an old laptop that could run InkScape and used AxiDraw’s excellent Hershey merge tool. This year, the AxiDraw is connected to a RaspberryPi running Saxi which is a little more streamlined and convenient than AxiDraw tools for InkScape. As for the card insides, I used vpype to generate and layout the text for the envelopes, saving each one as a separate svg that I’d manually drop into Saxi to plot.


Last year, I printed each card individually. I learned that one aspect of plotting I like to avoid is the setup and restarting of the plotter. This year, I bought large format paper so I could print multiple cards at a time and reduce the number of times I need to set up new plots.

First I printed all of the letters that would be inserted into the cards (two letters to a page that I later cut to size). Once those were complete, I started printing all of the card fronts (including a good number of which were printed upside down) four to a page that I later cut. Finally, after I completed the maps and messages for the personalized insides, I printed those onto the cards.

Finally, I printed all of the cards. Because I used Saxi as the plotter driver this year, I couldn’t make use of the AxiDraw’s excellent Hershey merge tool. Instead, as described above, I used vpype to generate each file and plotted them separately.

Lessons Learned for Next Year

Do tedious plotting first

While I did optimize card printing to reduce the number of times I needed to start a print, I still needed to print each envelope separately. I found myself avoiding this task as it took place toward the end of the project after all the fun stuff was done. Next year, I will likely try to address all of the envelopes early on in the process while my project energy is still high.

Automate more of the process

This project is always going to take a lot of time and effort, and I kind of like it that way. That said, automating where possible is a good idea. It would be great if next year’s idea didn’t require any manual handling for each card and could just be generated given a list of folks.

Batch manual work together

I would prefer to bunch all of my manual handling steps into one such that after cutting all of the cards out, I could have one night of printing envelopes with TP, signing, stuffing, and stamping.