What was that song, the one with the words?

My wife and I are both big music lovers, and I’m happy to have influenced her listening habits a bit and have loved what she’s introduced me to. Given we both love music, we’ve also been known to sing along at times. (You can take a guess as to how well that goes.) She normally gets the lyrics right. I’m normally a bit more… loose in terms of how well I remember the lyrics. I was thinking about this and was curious how well AI could be used to identity lyrics and match them to a song, especially when the lyrics may not be exactly right. I spent some time hacking on it and here’s what I built. Strike One I meant to type take one, accidentally wrote strike one,... more →
Posted in: JavaScript

My First AI Skill for My Blog

I’ve been a professional writer now for thirty plus years, and honestly, it’s one of the things I’m most proud about. When generative AI first exploded on the scene, a lot of people used it to help them write, and frankly, that wasn’t for me. I’m not the best writer, but I damn well know how to write and damn well know my own voice. That being said, I’ve been really interested in how GenAI can help with the process. I first wrote about this over two years ago: Using Generative AI as Your Content Assistant. In that post I talked about using GenAI for two very specific tasks: Helping with my titles Writing the description (which is part of the metadata for a... more →
Posted in: JavaScript

Dang good Office parsing on the web with officeParser

A few weeks ago I wrote about using Chrome’s built-in AI support to summarize documents – "Summarizing Docs with Built-in AI". This was a followup on an earlier post that was PDF only and made use of an excellent library, officeParser, to work with Microsoft Office files. This library worked well, but had one issue that made it a bit harder to use. Parsing a doc itself was super easy: const getAST = async (file, config) => (await OfficeParser.parseOffice(file, config)); But the issue I ran into was taking that result and turning it into something meaningful for Chrome’s model to analyze. PDFs supported a toText() method but for other formats I had to do a bit of... more →
Posted in: JavaScript

Links For You (5/17/26)

Happy Sunday, and I hope your Sunday is going better than mine. One of my kids just went to use the dryer and sparks flew. I don’t mean metaphorically. Nothing like the thought of replacing another major appliance to brighten up your day, amiright?!?! Find Your (Tech) Community First up is a new endeavour by Brian Rinaldi to help fill the gap left behind by Meetup.com (which is still a thing just not a good thing lately) and the lack of smaller and more affordable community conferences. DevRel(ish) is a community site supporting tech groups of all sizes and nature who need help organizing IRL meetups. According to the launch announcement, this is not meant to be a replacement for larger... more →
Posted in: JavaScript

Is it hotter or colder this year?

Where I live could generously be called "warm", but is usually closer to the surface of the sun, especially in late summer. That’s why when the weather is not oppressively hot, I try my best to enjoy it. We’re mid-May now and honestly, this spring has been… pleasant. Suspiciously pleasant but I’ll take what I can get. The last few weeks I’ve been telling myself that the weather must be a good bit cooler than last year, and I finally decided to do something about it. I worked with Claude and created a little web app that: Lets you enter a free form address and then use Geocoding to convert it to a proper longitude and latitude. This is a super simple geocoding... more →
Posted in: JavaScript

Send me a message in a panel…

On my birthday a few weeks ago, one of things I got was something I’ve wanted to play with for a while, the Divoom Pixoo64 pixel frame. This is pixel art frame you can hang on your wall and with an app, select art, clock faces, and more. It’s fun, although the app itself isn’t my favorite. But – what excites me is that it has an API you can use to change what’s shown on the frame. I actually built a demo of this with Webflow you can see below: Play Video I was thinking about how else I could play with the API and decided to do something a bit risky – build a tool that lets you (yes, you!) send me a message right to my device. How did I do it?... more →
Posted in: JavaScript

Using Val Town and Gemini for Sports Ball Stuff

This is trivial as heck as the kids say, but I really want to explore Val Town more this year and I thought of a great, and simple use for it. Both my wife and I are big Saints fans (this is their year, honest) and attend most of the games. If they’re not playing at home, we’re absolutely watching it on TV. We both really enjoy watching football, but honestly, not enough to watch ESPN and follow the news. I thought – why not simply get a summary of NFL news from the past week and build an automation of it? I had this running in less than ten minutes with Val Town. First, the code makes use of Google’s Node SDK for working with Gemini. I setup my environment variable first... more →
Posted in: JavaScript

Animated video backgrounds via a Web Component and ColorThief

Earlier this year, the epic ColorThief library had a pretty significant update. I blogged about a simple demo I built with it but I was fascinated by one particular demo on their site. The "observe" function in ColorThief lets you monitor a video source and grab the colors at a particular frame. Their demo uses this to create a lovely shadow background of the video. I believe some TVs have this feature as well, and honestly I’d worry that would get annoying, but the ColorThief demo was pretty cool, so I thought I’d try to build it with a web component. The idea would be – take any basic video element and wrap it like so: <video-bgshadow> <video controls width="250">... more →
Posted in: JavaScript
1 2 3 4 112