Gutenberg Warnings, Inline SVG, and Who Let the Dogs Out

Today was one of those days where software development and real life decided to aggressively overlap.

I started the morning deep in WordPress plugin land, polishing up Dreamy Tags for submission to the WordPress.org directory. What began as a “quick update” turned into a full-on compatibility and cleanup sprint: resolving Gutenberg deprecation warnings, fixing asset packaging, consolidating prefixes, swapping the block icon from PNG to SVG, removing confusing widget headers, and working through Plugin Check feedback until the console finally went quiet.

Figure 1. Dreamy Tags
WordPress Plugin

A New Testing Environment

Along the way, I also learned about Local by WP Engine and used it to spin up a clean, vanilla WordPress install on my laptop. That made it much easier to test activation, blocks, widgets, and edge cases without worrying about whatever experimental plugins or themes I already had lying around. Being able to reset and retry in minutes turned out to be a huge help.

Who Let The Dogs Out?

I had let the dogs roam the yard with me while I was shoveling snow. Normally, the invisible fence keeps them from wandering off, but the battery had died, and the base unit was unplugged, so I wouldn’t have to listen to the alarm. With all the snow piled up, they didn’t recognize the usual boundaries.

And that’s when one of them decided to take advantage of the situation and go on a neighborhood adventure.

Figure 2. Dog Whistle

So there I was: bundled up, exhausted, half-frozen, alternating between chipping away at compacted ice and walking the surrounding streets calling out a familiar name, blowing my dog whistle, and shaking a bag of pupperoni sticks while loudly asking the neighborhood, “Who’s hungry?” and “Who wants a Scooby snack?” I didn’t have my glasses with me, so I was analyzing every bright spot of brown, yellow, and red.

At one point, a town council member and his wife spotted me walking around with a leash and a bag of treats and pulled over to check in. I told them I was visiting Teddy’s familiar spots — he still remembers people and dogs that moved away years ago, and sometimes likes to go pay them a visit.

Eventually, I made my way back home, frustrated and tired, standing in my driveway looking at the house and scanning the property, wondering how long this was going to take. Unlike Gwinn, Teddy has a double coat and actually enjoys relaxing in the cold, snowy weather.

That’s when I felt a small bump on the back of my leg.

There he was.

Quietly doing exactly what he’d been trained to do.

Nudge was a hard behavior to teach, but it finally paid off. I gave him some well-earned positive reinforcement and gently lured him back into the house.

Crisis averted.

Fun With SVG

One unexpected detour was the block icon. The original 20Ă—20 PNG wasn’t showing up reliably across all parts of the block editor because it was wired in via a CSS background-image hack. Rather than keep fighting that, I rebuilt the icon properly as an inline SVG.

Original PNG icon
SVG rendered as PNG

Along the way, I even upgraded Inkscape from 1.4 to 1.4.3, hoping to use a shape extension to generate a heart automatically — only to discover it wasn’t included, and I couldn’t find it in the extension directory either. So I went old-school and built it manually.

I also learned how to properly scale an existing SVG down into a 20Ă—20 pixel viewport, updating the user units to match, so the icon would render cleanly at block-editor sizes without relying on CSS tricks.

That led me down a new path (literally): opening Inkscape, rebuilding the icon as vectors, and then exporting the SVG path data. I even spent some time learning what all the commands in the path actually meant — M, L, A, curves, arcs — instead of just pasting it in and hoping for the best. It was one of those satisfying moments where graphics stopped being a black box and started feeling programmable again.

Once I understood the SVG commands, I was even able to manually optimize the path data — converting commas to spaces to increase the likelihood of recurring patterns for gzip compression (repeating numbers, white space, and the limited SVG command letters), and trimming unnecessary decimal precision since this icon targets a tiny viewport. Small changes, but they add up. Before any compression was applied, I reduced the SVG file size from 2,941 to 1,050 bytes — a savings of over 64%! Although it’s still almost 14% larger than the 923-byte PNG icon, it can scale to any size, remain sharp, and benefit greatly from compression, where PNG files are already compressed.

Open-Source Community

There was also a small open-source moment tucked into all of this.

While working through the fixes, I noticed someone had commented on my GitHub issue tracking the WordPress submission. They asked for more details about the problem I was facing and suggested checking plugin activation and WordPress settings. I replied that this was my first plugin, that the initial review had flagged an ownership issue I’d already resolved, and that I’d just received another email with a few more items I was actively working through. I pasted in the full list of reviewer notes.

They replied simply: “Ok perfect!”

After that, I pushed about 23 commits throughout the day, all referencing the same issue, so they could follow along as I worked through each fix. They didn’t respond again — but that’s kind of how open source goes. Sometimes the conversation is quiet, but you know someone is watching the diff scroll by.

There’s something oddly comforting about that.

Almost Done

There’s a special kind of relief that comes from seeing zero errors after hours of chasing down small, stubborn issues.

This release turned out to be a resubmission of my first WordPress.org plugin, shaped directly by reviewer feedback and extensive testing. The plugin now cleanly supports both a server-rendered Gutenberg block and a classic widget, sharing the same rendering logic with no external services or tracking. It feels stable in a way that only comes from patiently addressing dozens of tiny details.

I had already tagged a pre-release and was in the middle of uploading my submission when I remembered to run Plugin Check one more time. Of course, that surfaced a few new issues — mostly small things introduced while fixing earlier problems. Easy fixes, but enough to justify yet another mini pre-release. It was one of those moments where progress feels like a spiral: every cleanup reveals another tiny corner worth polishing.

The Final Push

I finished preparing the release notes and reviewer submission, reflecting on how oddly balanced the day had been: debugging JavaScript and PHP one minute, tracking paw prints in the snow the next.

By the end of it all, Dreamy Tags was finally ready for review, the dogs were accounted for, and the driveway was… marginally improved.

Not glamorous. Not quiet. But deeply satisfying.

Sometimes progress looks like clean console logs.

Sometimes it looks like walking your icy neighborhood, hoping your dog didn’t decide to become a folk hero.

Today, it was both.

Video 1. Nub Wag In The Snow
Song 1. Nub Wag In The Snow (Extended Patrol Mix)
Expand to see lyrics

[Intro]
(Who’s hungry?)
(Who wants a Scooby snack?)
That’s Lewie calling through frozen air —
I hear him… but I’m already over there.

[Verse 1]
Battery dead on the fence today,
Snow erased where the boundaries lay.
Lewie’s chipping ice in tactical boots,
I’ve got side quests and mailbox routes.

Tiny legs, stealth core ghe glide,
Duck behind bins — surprise patrol time.
Kids throw snow, cats run fast,
Mayor of Driveways doing fly-by scans.

[Pre-Chorus]
I check old yards, familiar gates,
Friends who moved — I still know their plates.
Every porch is a memory lane,
Every snowbank calls my name.

[Chorus]
I’m watching the neighborhood like a scout,
Purposefully hiding when Lewie shouts
(because it’s definitely part of the game).
Nub wag blur, low-rider frame.
Gwinn guards home, I roam the land,
Lewie’s my handler — that’s my command.
Big warm house, familiar smells,
I always come back. That’s how this ends.

[Verse 2]
Council car rolls slow beside me,
Humans talk while I remain stealthy.
Treat bag rustle, whistle cry,
I reroute through hedge-row skyways.

Snow on whiskers, ice on toes,
Inspecting tracks only core ghees know.
I watch kids laugh, cats do parkour,
Then I vanish behind a recycling bin door.

[Bridge]
(Tiny paws, big map)
(No tail, just nub)
I hide real quiet near the drive,
Let Lewie wonder if I’m alive.

But I love my human, love my sis,
Gwinn holds home while I do this.
Every adventure loops back tight —
Big house glowing like runway lights.

[Final Chorus]
Lewie’s tired, pacing the drive,
I sneak behind — gentle nudge, arrived.
Training complete, praise deployed,
Scooby snacks officially enjoyed.
Neighborhood legend, frozen terrain,
Pembroke commander in powdered rain —
But Lewie’s my world, Gwinn’s my sis,
Big house waiting. Mission dismissed.

[Outro]
Sometimes progress looks like debug logs.
Sometimes it’s just loving your people and dogs.
Nub wag slowing, patrol complete —
Snow day over. Warm floor. Treats.

Discover more from Lewis Moten

Subscribe now to keep reading and get access to the full archive.

Continue reading