My Last Spotify Demo (this time I mean it – honest)

Earlier this month, I blogged about building my own Spotify Unwrapped. I did this by requesting a data export from Spotify and playing around with the data in Python and Astro. I built a simple, and probably bad, Astro site to view my stats. When I built it, I had an idea for a slight tweak to make it a bit better, but one that would require API usage. I stand by what I said about not wanting to use the API anymore (feel free to ask why in the comments), but I couldn’t resist tinkering one more time. Here’s what I did. Using Python to Enhance Artist Info In the output from Spotify’s export, you get a detailed listing of the tracks you’ve listened to. As a reminder, here’s... more →
Posted in: JavaScript

Generating Relevant Random JSON with Chrome AI

A few weeks ago I blogged a demo where I used Chrome’s on-device AI feature to parse a "generic template language" and return random strings. If you’re so inclined (and of course you are), you can read that post here: "Creating a Generic Generative Language with Chrome AI". The idea was to give the AI model a template string that described what was random, and how it was random (this is a name, this is a number, this is a color, etc) and have the model fill in the blanks with appropriate values. At work, I’ve been digging into our platform and trying to learn as much as possible. One of the cooler features of Webflow is the CMS. You define a collection (type... more →
Posted in: JavaScript

Make Your Own Spotify Unwrapped

Tis the season – the Spotify Unwrapped season. If you aren’t aware, Spotify creates a yearly "recap" of your listening habits and packages it up in a nice and fun slide show/animated doodad only available on your device. It’s a cute thing and as someone who both loves music and stats, I look forward to it. If your curious, here’s a part of mine: Earlier this week I knew Spotify Unwrapped was as eminent as Mariah Carey and I pondered building my own report. Of course, a few months ago I swore off building anything Spotify related again. But given that Spotify lets you export your data, in theory, I could build something without using APIs, right? Getting the... more →
Posted in: JavaScript

Links For You (11/30/25)

Once again I’m here, sharing links, and apologizing for the lack of content this month, although I did publish seven times, and I think I had some good demos, so maybe I should just stop worrying about it? 😉 As I’ve hinted recently, I am no longer on the job market! I haven’t said where yet as I wanted to get a few weeks under my belt to ensure things were going to be ok. I’m not going to lie, my last role (and quick lay off) really messed me up a bit. That being said, I feel relatively safe now, and really like what both my role and my coworkers, so I figure it’s time to share! My new role is a Senior Developer Evangelist for Webflow. Webflow has a web-based... more →
Posted in: JavaScript

Links For You (11/16/25)

Good morning, programs. I’m sorry for the light posting the last few weeks, but, it’s all for a good reason. Last week was my first week at my new job, which means all of my anxiety and fear are gone. Ok, maybe not, but, I’m absolutely delighted to be off the market again. I haven’t blogged about the new job yet (or even gotten around to updating LinekdIn), but I’ll do so soon. (My job isn’t top secret or anything, I’m just waiting a bit.) Ok, let’s get to the links! A Conditional Form Field Web Component I love web components, and I especially love really practical examples like this conditional form field component by Aaron Gustafson. As you can... more →
Posted in: JavaScript

Gemini File Search and File Stores for Easy RAG

I am really excited about this post as it’s one of the most powerful changes I’ve seen to Google’s Gemini APIs in quite some time. For a while now it’s been really easy to perform searches against a document, or a group of documents. You would upload the file (or files), ask your questions, and that was all you needed. However, the files you uploaded were only there temporarily. This was fine for processes like summarization or categorization where you could automate the process and be done with it. This was also fine for basic chat uses. I blogged an example of this last month: "Building a Document Q&A System with Google Gemini". The new features I’m... more →
Posted in: JavaScript

Using Google Static Maps in Your Print View

This is just a quick thought experiment really. Yesterday I was working on a demo that made use of Google’s Static Map API. I’ve blogged about this API for probably over a decade now and I rarely see people use it, but it’s a lightweight, image only "API" for when you need simple map images without interactivity. Honestly, I see a lot of sites using the full JavaScript maps library when a simpler image would be fine. It’s also an excellent way to use maps in presentations or emails as well. It occurred to me that the static map image could be a great way use of print media queries in CSS and I thought I’d build a quick demo to show this. Media queries and... more →
Posted in: JavaScript

JavaScript SpeechSynthesis API

As the web continues to be the medium for all users, standards bodies need to continue to provide new APIs to enrich user experience and accessibility. One underused API for unsighted users is speechSynthesis, an API to programmatically direct the browser to audibly speak any arbitrary string. The Code You can direct the browser to utter speech with window.speechSynthesis and SpeechSynthesisUtterance: window.speechSynthesis.speak( new SpeechSynthesisUtterance('Hey Jude!') ) speechSynthesis.speak will robotically tell the user anything you provide as a SpeechSynthesisUtterance string. Support for this API is available in all modern browsers. I wouldn’t consider speechSynthesis as... more →
Posted in: JavaScript
1 2 3 105