Building a Bluesky Sentiment Dashboard with Alpine and Chrome AI

Good morning, programs! Today I’m sharing yet another example of Chrome’s on-device AI features, this time to demonstrate a "Bluesky Sentiment Dashboard". In other words, a tool that lets you enter terms and then get a report on the average sentiment for posts using that word. I actually did this before (and yes, I forgot until about a minute ago) last year using Transformers.js: Building a Bluesky AI Sentiment Analysis Dashboard. I also built this for Twitter, before it went down the toilet, killed off API access, etc. etc., but I can’t seem to find it in my archives so maybe I’m hallucinating. That being said, earlier this week I thought I’d try building... more →
Posted in: JavaScript

Building an RSS Aggregator with Astro

This weekend I had some fun building a little Astro site for RSS aggregation. It works by the individual user defining a set of feeds they care about and works with a server-side Astro route to handle getting and parsing the feeds. Here’s a quick example. On hitting the site, it notices you haven’t defined any feeds and prompts you to do so: Clicking "Manage Feeds" opens up a dialog (my first time using one with native web platform tech!) where you can add and delete RSS feeds: After you have some specified, the app then calls server-side to fetch and parse the feeds. Items are mixed together and returned sorted by date: Not too shabby looking, either. That’s... more →
Posted in: JavaScript

Building a UI for Gemini File Stores

Back in November of last year I wrote up a blog post talking about a new (at the time) Google Gemini feature, File Stores: "Gemini File Search and File Stores for Easy RAG". In that post I discussed what it was, how it worked, and built up a simple example. You should definitely read that post first, but if you want the TLDR, here ya go: File Stores (referred to as "File Search") expands on Gemini’s previous ability to work on files in a temporary fashion by allowing you to create a permanent "store" of folders. You can use this for RAG systems and use flexible metadata filter for complex queries. This feature has been out for a few months now and I’ve... more →
Posted in: JavaScript

Building a Document Q&A System with Google Gemini

Document summarization is a powerful and pretty darn useful feature of generative AI, but a proper "question and answer" system can really enable users to interact with a document. This is why you see various document viewing apps, like Acrobat, adding these features to their programs. I thought I’d take a look at building such a system via a simple web app to see how difficult it would be, and honestly, it wasn’t that bad. Having this in your own web app, versus an external vendor, gives you more control over the experience as well. Here’s what I built. The Stack The web app lets you drag and drop a PDF into the page, it then renders a preview of the PDF on the left... more →
Posted in: JavaScript

Building a Web Based Comic Book Reader

Ok, so I know I’ve been spending way too much time lately talking about comic books, but I’ve been reading them for roughly 80% of my life now so they’re just a natural part of my life. Now, my best friend Todd Sharp told me this crazy lie that he’s never read a comic book before, but surely that’s a lie. Surely. Earlier this week, I took a look at parsing electronic comic books and sending them to GenAI as a way to get summaries of stories. That was a fun experiment and it actually worked quite well. I thought I’d take a stab at trying a similar approach with Chrome’s Built-in AI support as well when I discovered that… wait… I don’t... more →
Posted in: JavaScript

Building a File-Based Router in BoxLang

Earlier this week I took a look at BoxLang’s new rewriting feature (("URL Rewriting with BoxLang MiniServer")[https://www.raymondcamden.com/2025/08/11/url-rewriting-with-boxlang-miniserver]). It basically boils down to telling the miniserver app, "here is a file I want you to run on a 404", and given that you can write code for anything you would like, it’s really flexible. I like this approach, but it got me thinking, what if BoxLang also supported a non-code based rewriting system, something where you can define paths, and rewrites, in a file? I took a stab at architecting such a feature and thought I’d share. My Inspiration My inspiration for this idea... more →
Posted in: JavaScript

Building a Comic Book Reader in BoxLang

I’ve been a comic book reader for just about the same amount of time as I’ve been writing code. Any computer using comic book reader (and there’s probably quite a few) will know that electronic versions of comics let you read comics on your devices. These comics typically come in one of two formats, CBR and CBZ, which are literally just RAR and ZIP files, nothing more. Over the years, I’ve had fun building my own web-based readers for this format, with my last one from a bit over three years ago, "Reading Comic Books in the Jamstack". I thought it would be fun to tackle this in BoxLang and see what worked well and what proved difficult. I’ve got a complete... more →
Posted in: JavaScript

Building a CSV Report CLI Tool in BoxLang

Remember some time ago (yesterday) when I wrote about CSV parsing in BoxLang using the opencsv Java library and Maven? As I said then, my initial impetus for that post was to recreate my ColdFusion Hackathon project, but once I got it working, it turned out to be really useful for something completely different. The Data If you’re on a desktop machine and look down to your right, you’ll notice I’ve got an ad from from EthicalAds. I’ve been using them as an ad network for a bit over a year now. I’m not going to get rich anytime soon with the money I’ve earned, but it’s the first ad network in a while that felt low key and less "in your face".... more →
Posted in: JavaScript
1 2 3 4