Building Custom Form Selection Blocks – no JS, all CSS / / No Comments I apologize for what may be a slightly misleading title. The topic for this post is something I’ve had on my list of things to explore for some time now, and while I wait for the new job to start, I’ve found myself with time to kill. Let me explain what I’m talking about and hopefully it will make a bit more sense. You are, dear reader, familiar with form controls and how to build forms both big and small. One type of user interface I’ve seen from time to time is the ability to select an item where the "item" is an arbitrary block of code. What do I mean by that? Typically a choice element in a form is either a select, checkbox, or radio set. But I’ve seen... more → Posted in: JavaScript Tagged with: Blocks, building, custom, form, Selection
Use AI to not use AI (as much) / / No Comments This squarely falls into the "everyone probably knows this but it didn’t click with me right away" category so please feel free to laugh at my ignorance, but it’s something I realized over the past few months, and as I just used this technique this morning, I figured I’d share it on the blog. The idea is simple – it’s trivial to ask a Gen AI tool to do something for you – and depending on the ask, may work great. But what I realized a few months back, especially in regards to having AI parse data, is that you can also use the opportunity to generate a tool (like a Python or Node script) so you don’t need to return to the AI tool again. This... more → Posted in: JavaScript Tagged with: Much
Decoding VINs with an API / / No Comments Today’s post took a bit of a pivot. I decided to work on a demo idea I had created way back in March. As I worked on it, I ran into multiple roadblocks, and while that original idea for a demo may still see the light of the day, I figured I’d at least share something that did work. What’s a VIN? A VIN is a vehicle identification number. It’s a standard that dates back to 1954 and identifies a particular car by manufacturer, make, model, year, and a heck of a lot more. A VIN is 17 characters avoiding the letters O, I, U, and Q to avoid confusion with some numbers. You can break down a VIN into various components if you want – but would still need to know various lookup... more → Posted in: JavaScript Tagged with: Decoding, VINs
Parsing Arbitrary Dates in Strings with Chrono and a Web Component / / No Comments Yesterday I had an idea for a possible experiment using Chrome’s built-in AI support – looking for "date" references in strings. So for example: "I will have my new job in 12 days". Could the AI model recognize "12 days" as a date and determine what the actual date is, assuming a reference date of now? I was about to start working on a simple POC when I thought… wait… is there already a JavaScript library for this? Of course there is. The aptly named Chrono library does just that. It can parse a string with one assumed date and return the date, so for example: import * as chrono from 'chrono-node'; chrono.parseDate('An appointment on Sep... more → Posted in: JavaScript Tagged with: Arbitrary, Chrono, Component, Dates, Parsing, Strings
Links For You (6/21/26) / / No Comments Greetings and salutations, readers. It’s been a few weeks since I shared one of these, mostly due to the job search being somewhat exhausting, but I’ve got a backup of links so it’s time to get back in the habit. And of course, it’s Father’s Day and I want to wish all the dads out there (myself included) a very happy father’s day. This weekend I got to officiate my first wedding (for my brother-in-law and his fiance) so my plan today is to do… nothing. Enjoy your links! Mastodon and Translation with Chrome AI First up is a presentation by Thomas Steiner demonstrating Chrome built-in AI APIs doing language detection and translation for Mastodon. I’m... more → Posted in: JavaScript Tagged with: 6/21/26, links
Building a Form Handling Service in Val Town / / No Comments Many years ago, I made the switch from building primarily app-server backed sites (using Node, ColdFusion, PHP, etc) to fully static sites using tools like Jekyll, Hugo, and Eleventy. For the most part, it was a great shift in how I build, but there were a few things I had to figure out in that new world – one of them was simple form handling. While I could have used serverless just fine, it felt like overkill. Luckily, there were a few services out there that catered to this need. You would simply use a unique action for your form and that service would handle collecting the form data, emailing it to you, and redirecting the user back to the site. A great example of this, and one I used... more → Posted in: JavaScript Tagged with: building, form, handling, service, Town
Creating a Dynamic Favicon with Cloudinary / / No Comments Ok, chalk this up to something I may never actually use in production, but I was curious how well the browser would handle changing the favicon of a tab on the fly, and combining that with Cloudinary to dynamically modify the source. The inspiration for this was something simple – Google Calendar’s favicon is unique per day, so for example, right now I see this: As there is – at most – 31 days in a month – my assumption is that they simply generated all 31 at some point and in their code serving up the web page, they select the right one. To be honest, it’s subtle and I don’t always notice it, but it’s a nice effect. I decided to take a look... more → Posted in: JavaScript Tagged with: Cloudinary, creating, dynamic, Favicon
Testing Diffbot’s Web Search API / / No Comments It’s hard to believe I first experimented with Diffbot nearly five years ago. You can see that first post up on the Adobe Medium account – Natural Language Processing, Adobe PDF Extract, and Deep PDF Intelligence. Since then I’ve tested out various APIs and features from them and was lucky enough to connect with them recently about a new initiative, a web search API. There’s multiple examples of this out in the wild already, but most just scrape/hack against Google. Google had an API, the Custom Search JSON API (I even covered it back when folks still talked about the JAMStack) but the API is now deprecated and officially turning off January 1, 2027. Diffbot’s API... more → Posted in: JavaScript Tagged with: Diffbot's, search, Testing