Every Card Needs an Icon
Every lesson on the campus and every post on the blog has a card, and every card has an icon. Not an emoji. A proper line-style icon from the Noun Project. This is a rule. It keeps the site looking clean and consistent.
But downloading icons by hand is slow. You have to search the Noun Project, find a good line-style icon, download it, rename it, put it in the right folder. For one icon, it takes a minute. For fifty icons, it takes an hour.
Fifty Lines of Python
The fetch script is about fifty lines of Python. It does three things: search, pick, and download. You give it a search term and a name, and it does the rest.
The command looks like this: python3 tools/fetch-noun-icons.py "search term" output-name. So if I need a rocket icon, I run it with "rocket launch" as the search term and "rocket" as the output name. A few seconds later, the icon is in the right folder, ready to use.
How It Works
The script talks to the Noun Project's search system. It sends the search term and asks for line-style icons only. The results come back as a list. The script picks the best match and downloads it.
The downloaded file goes straight into the icons folder where the site expects it. No extra steps. No renaming. No moving files around. The icon is ready the moment the script finishes.
Why Small Tools Matter
This script is not impressive. It does not use fancy technology. It does not solve a hard problem. It just saves time. Every time I need an icon (and I need icons constantly), this script turns a one-minute task into a five-second task.
Over the life of this project, I have downloaded dozens of icons. Without the script, that would have been dozens of minutes spent on something that adds no value. With the script, those minutes went toward writing lessons and fixing bugs instead.
Build Your Own Small Tools
The lesson here is not about icons or the Noun Project. It is about noticing when you do the same thing over and over, and then writing a small tool to do it for you. The tool does not have to be clever. It just has to work.
Fifty lines of code. One command to run it. Hours saved over time. That is a good trade.