A few quick notes about building themes

It took me just a few days to convert the Cypress WordPress theme for use on Since the layout, design, and styling for most elements was already done – the main work was learning’s theming model and moving the code bits around.

I thought it would be a good opportunity to jot down some observations since I was totally new to the theming model that uses. Perhaps this information will be useful to you.

Before I list my observations, let me just put out this call to action. If you’re reading this and have any abilities as a web developer, it is very simple to convert just about any website theme from any other platform into a theme. You should consider doing it to help the ecosystem around M.b grow. The team there is small. So helping them even a little bit will go a long way. If themes aren’t your thing, perhaps a plugin.

Here are my observations in no particular order:

  • M.b’s theming model is based on Hugo, a “static website engine”
  • The files are primarily standard HTML files with some curly brackets {{ }} for including other files, logic, loops, etc.
  • Your theme is not an island. A custom theme’s files supersede and replace the files in the blank theme that M.b uses. If you include a file (E.g. index.html) in your custom theme, it replaces the one in blank, but if you don’t, it will use the blank one instead. (I may be explaining this incorrectly, but at least this is my understanding)
  • Because M.b is very light on features, most themes need only consist of a few files to support most features
  • It pays to study the “lookup order” of Hugo themes. Like WordPress (which is far more complicated), any given URL can result in different files being loaded. By knowing this order it can cut down on frustration a bit.
  • M.b has a bunch of themes open sourced on their Github. Looking through each of those helps a lot.
  • M.b’s theme documentation is lacking. I’m sure this issue will get better over time now that the new Help Center is online. The more questions we ask and answer in this area, the more people will benefit.
  • If any M.b member makes any edits to a theme using the web editor, they will break their ability to get updates of your theme. I don’t see anyway around this, but it should be known.

Here is my workflow for testing and updating Cypress on It is a little cumbersome, but no big deal in the grand scheme of things. I’m sure this workflow will improve with time.

Side note: I was running Hugo locally in a Docker container but I quickly abandoned that. M.b is unique enough in its feature-set that I found Hugo to not be a good environment to test against. Perhaps if I spent more time creating a M.b-like environment it would have cut down the number of builds I’ve had to push to the site.

  1. Commit changes locally using git.
  2. Push changes to the main branch on Github.
  3. Log into M.b, click Design, click “Edit Custom Themes”, click “New Theme” and add a new theme with a version number (E.g. 2021.1.0b) – I would change this version number with every build I pulled from Github to bust M.b’s cache. It didn’t always work, but it worked most of the time.
  4. Go back to Design settings page, set the theme for my blog to “Blank”, select my Custom Theme from the list, click “Update Microblog Settings”.

It would typically take 5-10 minutes for my changes to show up on my test blog.

Obviously, this isn’t ideal. So I recommend batching your updates as much as you can.

Once I had a build of Cypress that seemed to work as I had planned on the test blog, I would then set the version in the head.html file (see Line 4). Update the readme. Commit those changes. Push to Github, and tag the release. By setting the version in the head I’m able to determine what version someone is running when a bug is reported.

Lastly, a few tips:

  • The “photos” page is special for There is a button under your Pages settings that says “Add Photos Page” if you don’t already have one. M.b. will filter out posts that have images in them to populate that page with content. It is a very different approach.
  • As far as I can tell, M.b loads images that are in posts in full resolution. The same goes for most indexes too. This can make page load times very, very long in some cases. One way to mitigate that is to turn on pagination so that there aren’t so many posts loaded per page. This is done in the config file. Another way is to use M.b’s thumbnail creation API. As far I know, this isn’t documented anywhere. If it is, I missed it. But it is in use. You can reverse engineer the URL structure yourself. Here is an example URL:{{URL TO IMAGE GOES HERE}} – This will dynamically create a new image 480 pixels wide. You can see this in use here.
  • There is a page for /archive even if a Microblog doesn’t have that in their navigation. So I’d recommend including a list.archivehtml.html file in every single theme.

That’s about it. Hugo themes are a learning curve and are likely far more powerful and flexible than even M.b currently has use for. Once you wrap your head around how it works, it is pretty simple to convert a theme and I think it’d be great if more people did so.

Lastly, if any of the above is totally incorrect, please let me know and I’ll correct it.

James Gurney on NFTs

James Gurney, in a reasoned post explaining NFTs to his rather large art-focused audience:

Does it make sense for every artist to leap into NFTs right now? I don’t think it make sense for me—not yet anyway, until there’s a better solution to the environmental issues.

I’m beginning to appreciate people who don’t have quick, one-side-or-the-other, opinions on NFTs. Like me, Gurney seems optimistic yet hesitant. I’m with him. I think NFTs will be a thing. But I think they have an awfully long way to go and deserve the level of scrutiny they are currently getting.

As an aside, I interviewed Gurney several years ago. If you’d like to read that.

Thanks again for those that have donated to support my projects, like Cypress for I have say though I’m a little bummed no one sent any crypto.

Seth Godin on NFTs and my background

Seth Godin:

The more time and passion that creators devote to chasing the NFT, the more time they’ll spend trying to create the appearance of scarcity and hustling people to believe that the tokens will go up in value. They’ll become promoters of digital tokens more than they are creators. Because that’s the only reason that someone is likely to buy one–like a stock, they hope it will go up in value. Unlike some stocks, it doesn’t pay dividends or come with any other rights. And unlike actual works of art, NFTs aren’t usually aesthetically beautiful on their own, they simply represent something that is.

I respect Mr. Godin. My previous comments about NFTs were mostly centered around their wasteful use of energy and how I feel that those problems will get solved. Godin’s gripe with NFTs mostly center around them being a downright scam. My research into how NFTs work has led me to believe that the technology has some merit. But I think it has a long way to go. And Godin’s take is correct.

Several years ago I worked at a company that created codes to track Certificates of Authenticity (COA) throughout the life of a piece of memorabilia. A signed piece of memorabilia would show up at our warehouse, it’d be authenticated by an expert (either within our company or outside of it), it would be given a COA and a Number. That Number would go along with the product as it changed ownership. Each time it did, the registration for that Number would be changed for a fee. A portion of that fee could, in most circumstances, lead back to the original signer.

Sound familiar? That’s what NFTs are trying to be but for digital goods.

That company and I ended up parting ways due to human reasons. After my Do Not Compete expired I quickly set about improving upon that system and built a prototype for a product called OwnerSwitch. I still have the Twitter username though sadly not the domain name. OwnerSwitch was going to do very much the same thing except for all sorts of things beyond that which came with a COA from any single company. Things from artists and other types of media. I never ended up shipping the product after having spent a few tens-of-thousands of dollars getting it to the point where I could.

So, you see, I’m bullish on the model of NFTs. Goods, digital or otherwise, that can somehow be proven authentic that are traded and can earn the original creator residual income forever is a pretty awesome idea. But as it stands it is “the Wild West” with NFTs and there is a lot of scammy stuff going on, it is burning up energy, and it hasn’t been tightened down yet. But I do think it will be. Perhaps it won’t be NFTs that solves this problem but something else will come along to solve this issue for digital goods.

Though Godin ends by requesting people walk away from NFTs (which I am unsure will happen) be sure to read his entire post. You are likely already subscribed to his blog, right?

Look at less photos

Look at less photos, but look at each one with more intent.

Given the accessibility of photography I can quickly look at 1,000 images from other photographers in a single sitting and not remember one of them. By slowing down some, with intent, I have found that I enjoy the photos more and I learn more.

Some ways to do this:

  • subscribe to RSS feeds
  • use social apps less
  • cull following count
  • mute Instagram Stories
  • sit down with a book
  • focus on photography made decades ago rather than today
  • subscribe to email newsletters
  • visit museums
  • watch documentaries

I’ve soaked up every single bit of photography-related information I could possibly find over the last few years. I devour it. Hoping that somehow the more I jam into my head the more that will be in there to recall. This strategy may have served me well up to a point. But now I need to go deep instead of wide. I’d rather stare at one photograph for an hour than 3,600 for a second each.

Do you have any tips to help slow me down and be more intentional in my seeing?

At work we managed to procure a three-letter domain name for less than $10,000. I’m pretty happy about that accomplishment (and the all-new website and video). If you work somewhere that needs marketing material logistics/warehousing/delivery hit us up.

Iris Photos for macOS


Iris is pragmatic and does not impose a certain workflow on you. Just point the app at your photo library on disk, and Iris will take it from there. We also don’t limit you to a single “system” library that can easily fill up your laptop and force you to decide which photos to leave behind or trust to the cloud.

I urge you to read the entire Iris page. I was nodding my head the entire read. I’ve signed up. I want in. Given how I manage my photo library currently I can try Iris without skipping a beat.

/via Christian McGregor.

Christian McGregor on blogging our choices

Christian McGregor, in response to my photo library management workflow post:

I appreciate the effort people take to post things like this. Every post adds to the pool of knowledge to help avoid easily made but difficult to change mistakes, like Colin’s own findings when depending on Apple Photos as the main tool.

I appreciate that Christian appreciates the effort. Posts like that one take me far longer than most posts and are read by far less people than the posts I spend the least amount of time on. (We’ve discussed this, fam.)

I liked this bit from Christian also:

Dr Drang is one of the best examples of this kind of writing, using his posts to show the inner workings of his processes and why he chose certain paths over others – and as a reference site for his own memory.

“A reference site for his own memory” is about as good a description of my personal blog as I could ever come up with.

As an aside: Christian’s webmention led me to look through his archives and find out about Iris being built by Tyler Hall. I love webmentions.



Stop wasting time finding your work – eesel brings together all your work in one place. It’s free, works with pretty much any tool you use, and doesn’t compromise on privacy.

This looks interesting. Browser extension (Chrome, Edge) that adds search across all of your cloud-based documents. Hopefully they bring it to Safari. I’d like to add Unmark support.

If anyone knows CSS better than me (which is literally anyone)… Cypress on’s viewport is wider than on WordPress and I cannot figure out why. Look here on an iOS device (980wide vs. 414wide). So, media queries aren’t kicking in. Ideas?

My current photo library management solution

In this post I’m going to detail out how I manage my photo library. I have changed my workflow countless times over the years and I have the deep battle scars to prove it. I’ve switched services, storage providers, apps, folder structures, metadata schemes, you-name-it.

In 2018 I decided to set out on a sort of mission; I wanted to create a photo library that would be relatively future proof. Should I decide to use a different app or storage platform, I’d want to be able to do so easily rather than painfully.

Note: This solution is likely not for everyone. The number of hours I’ve spent to come to this solution cannot be overstated. But, I’m very happy with how it is working. Maybe if you’re reading this it can work for you too. Or, perhaps you can pull just one idea from it that will help you.

Here is what I had to accomplish:

  • Create a folder structure that I can control and maintain regardless of the photo application I choose to use to view my library or edit my photos
  • Store as much metadata about the photos within the files themselves – rather than an external database – so that the metadata would travel with the image across all platforms
  • Be highly searchable, glanceable, sharable
  • Store my personal photos, my wife’s personal photos, my photography “work” and projects, and my digital film scans.
  • Bonus: Be accessible from any of my devices


  • Bulldozer – A simple PHP script that copies all of my images into their proper folders based on date created
  • SetEXIFData – an app to set the date taken, GPS coordinates, keywords, and other EXIF information for my digital film scans
  • Adobe Photoshop – For editing photos
  • Adobe Bridge (Camera Raw) – For Super Resolution (on 35mm film scans)
  • OneDrive – For cloud storage of my library
  • Photos for Mac – To search, view my library locally, as well as create smart albums.
  • Epson V600 – To scan my film negatives, slides from family members, or old photo prints.
  • Silverfast – The scanning software that I use. It is a little clunky but by far the best software I’ve used to scan.
  • A few external hard drives

Here is what my current storage situation looks like.

My photo library weighs in at over 450GB and growing rapidly. I have no less than 4 complete copies of that library. I have the “working library”, “backup library”, “off-site backup library”, and “cloud backup library”.

Why 4 copies? Restoring from a cloud-based backup when you live in a rural area is… less than fun. I remember when Everpix was shutting down and they sent a notice to all users to download their entire libraries in a very short period of time. I’ll never make the mistake again of relying on a cloud-based storage solution for my photos.

Of course, hard drives go bad. So I have a local backup in my home office at all times should anything go wrong with the working library. The off-site backup goes with me in my bag. Sometimes I’ll leave it at work in case my house burns down. I know, this isn’t easy to think about but alas, I do. Lastly, the cloud-based backup is a failsafe. Cloud-based storage is incredibly inexpensive. In fact, my storage comes with my Microsoft 365 subscription. It also affords me the ability to search my library from any of my devices from anywhere in the world. Something I don’t do very often anymore but it is nice to have when I need it.


My workflow for storing photos varies only slightly based on the source of my images. I have a few iPhones, my wife’s iPhone, some DSLRs, a drone, a wildlife camera, and multiple film cameras. I could be importing photos from any one of these devices (or all of them) at the same time. So I have a slightly different way of handling each of them.

Let’s start out with a simple example; imagine that all of the images I’m importing came from a digital camera like the iPhone, DSLR, or drone.

First, I throw all of the images from the devices into a single folder at ~/Pictures/import/digital

Next, I’ll take a few moments to go through those photos and delete anything I’d rather not import into my library. I’m not very strict at this stage. I am of the opinion that photos become more important with age – and again since storage is so inexpensive – so I keep the vast majority of the photos we create.

One quick note here: Since Eliza and I have the same iPhone models, I will quickly rename the photos that we took to be prepended with takenby_colin_FILENAME and takenby_eliza_FILENAME. This makes it dead easy to know who took the photo later even though the device models will be the same.

Once I’m finished culling and renaming the photos in the folder I move them into a waiting room of sorts at ~/Pictures/import/ready_to_be_copied. Let’s pretend I have 500 files in that directory now.

Next, I have a simple PHP script that I’ve called Dozer that will look at the file’s creation date and automatically sort them into their appropriate folders. So, an image taken on March 17, 2021 will be copied into a folder 2021/03/17 that exists on my main working library drive.

Dozer gives a little report in the terminal about how many files were moved, how many folders were created, and even warns me if any of the files were duplicates (it happens sometimes). This way I can be sure that all of the photos that I wanted to be copied were copied.

Once I’m satisfied that the process was done successfully, I’ll run Dozer a second time to throw the same files onto OneDrive in the same folder structure. I’d like to improve this part of my workflow wherein some sort of comparison is run against my entire OneDrive library.

Next, I open the Photos for Mac app and import the new files. When I do so, I make certain to check the “Keep Folder Organization” checkbox on the Import screen. By doing this Photos for Mac will keep the files where they are and will not move them into the main library file. Photos for Mac will, however, make a few different sized thumbnails to keep the app snappy. So your Photos for Mac library file will increase in size.

Using Photos for Mac gives me a quick glance at my entire library quickly, it also allows me to do some other organization like Albums, etc. on top of my date structure. I have Smart Albums for the cameras I own, for different areas of interest (such as Architecture), for people, etc. Though I still feel that Photos for Mac is not a good longterm storage solution I do believe it is an excellent viewing app. In addition, it is getting better and better at facial and object detection which is a nice bonus for searching my library. I can search for “cat” or “sunset” or for a specific person. Also, Photos for Mac respects the EXIF data that is on the file allowing me to sort photos based on the device that created them, any keywords I may have added, etc.

Film scans

I scan my film negatives using an Epson V600 and the Silverfast app. I generally scan at fairly high resolution and rather flatly contrasted – preferring to do my crops, edits, digital dodging and burning in Photoshop. Once I have a satisfactory file I’ll use SetEXIFdata, a rather crude Mac app, to reset the EXIF data of the file to the film camera’s details, GPS coordinates, etc. This is the controversial bit, many people would take offense to this. But I prefer to have this metadata go with the file, rather than using Photos for Mac to tag the photo or something. Because then all of the data is stored in the Photos for Mac database. And believe me, I’ve seen it, and it isn’t pretty.

My film photos come in two general categories; personal and projects. My personal film photos are usually from a vacation or day trip or something. And so I store these in very much the same way as I do photos that came from my iPhone. My projects files, though, are stored in a Photo Projects folder by some sort of name. For instance, I’ve got a multi-year photo project going where I take portraits of my friends in or near their backyard garden. Those go into a Garden Friends folder. I back up these files the same way I do all the others.

I am currently very satisfied with this workflow. There are a few sticking points that I’d like to improve, and I wish I had a UI for searching all of my files on my phone (that wasn’t OneDrive) but at least I have a system that works for me, is future proof to a degree, that I can control, and that is fast.

Cypress for has been updated to fix the biggest issues that were reported overnight. Thanks to all that sent emails and submitted issues on Github. Your blog should automatically be updated if you’re using Cypress.

I appreciate the response to Cypress being available on! Your sites looks great! Thanks to everyone that sent in a donation and also that reported bugs. There seems to be just a few issues. I’m working on an update that will address them all at once.

Cypress is now available for free on

If you’re a member of you can now choose to use Cypress as your theme for free. Log in and click on your Design settings page, and choose the theme. That’s it.

I’m happy that this came together. I thought it might be fun to make a theme and when I tossed the idea to Manton he was very welcoming to the idea. And then when Manton and I saw interest from a few members for this theme to be made available I knew I wanted to make it available for free. has given me a lot of value over the last few years. A huge portion of the comments on my blog originate through The platform has made it so easy to engage in conversation and the added benefit of those webmentions coming back to my blog as replies is just fantastic. So many of the things I write about are improved from the discourse that happens through I also find a lot of great people and information there.

If you end up using Cypress as your theme on please report any bugs via Github issues. If you do not have Github and would rather not, please report bugs to me directly via email. I’m sure there will be some issues that weren’t caught in my testing. I will be adding features and making bug fixes as fast as I can. You can see a test blog here.

Some have already offered to pay for the theme. I appreciate your support. If you’d like to support its continued development you can donate any amount you’d like. In addition, please continue to be a member of, browse Discover, say hi to new members, elevate voices by sharing other people’s work, and help more people figure out how to have their own blog.

I finally took the time to backup my blog locally today. My little blog weighs in at 4.5GB.

I have but a single 8×10 print available currently; the Studebaker – which is a print I have hanging in my house. Starting April 5 I’m going to limit each print I offer to a run of 5 or 10 prints. Then I plan on never offering them again.

I’m going to raise prices for all software, images, and prints that I offer via my website on April 5. I also have plans for more offerings of all of these over the next several months.

Intel cannot compete with Apple. No matter how hard they go at them in their marketing, they do not stand a chance.

If anyone knows someone at one of the WordPress theme review sites please let me know. I’d like to get Cypress reviewed to give it a little attention.



When we kept everything on paper, organised people had these things called filing cabinets. They stored all of their documents in them in a structured way so that they could find them again.

Now those same people store all of their files in arbitrarily named folders on their company’s shared drive and wonder why they can’t find anything.

It is hard to disagree with this opening. Jack Baty linked to this and it immediately caught my eye. At first I thought it looked far too unwieldy for me. I have a messy system that works for me.

I’m going to give this a shot and report back.