RSSAmplifier

Blog

KISDigital

Deep dives into ColdFusion, Lucee, and BoxLang — modern CFML development, runtime internals, and the future of the JVM web stack.

kisdigital.comRSS feed ↗20 posts

Latest posts

BoxLang Express Enhancements

BoxLang Express went from basic routing to a full-featured framework across 10 releases (0.1.1→0.1.14): sessions, CSRF, CORS, rate limiting, security headers, uploads, and a SQL-backed session store. Every fix got verified live before being called done, then locked in as one of 149 passing tests. Along the way, express-test grew from a chat demo into a live documentation site, catching stale docs…

Introducing BoxExpress: Express.js ergonomics for BoxLang

BoxExpress brings Express.js-style HTTP endpoints to BoxLang using the JDK's built-in HTTP server. It supports routing, middleware, sub-routers, static files, and view rendering—without requiring a servlet container.

I built a Slack clone in BoxLang

Robert built a Slack clone on BoxLang with no bundler, no database, no auth. Channels are free because addresses are free. Presence isn't stored, it's derived. DMs are channels with computed names. Two bugs taught me more than the features: frames aren't ordered, and `content-length` counts bytes.

Do you want to play a game (again)?

Robert rebuilt his 8-year-old Vue D&D combat app in BoxLang, using SocketBox/WebSockets for real-time state. Features SRD 5.2 character creation, turn-based combat with fog-of-war, and a chunked map system with dual-layer tiles and POI markers. Encounter state lives server-side; ~300 TestBox tests cover it.

I asked Claude to describe my personality...

Robert asked Claude to describe their personality without flattery. Claude analyzed author's configuration files, code projects, and documented preferences to generate detailed personality assessment. Key finding: Claude effectively reverse-engineered personality traits from technical documentation and system design patterns, demonstrating how structured configuration files inadvertently reveal…

Do you want to play a game?

Robert ported 1983's Zork to BoxLang to demonstrate natural language parsing without AI models. Transcribed original ZIL (Zork Implementation Language) source from GitHub into BoxLang structs—rooms, objects, exits, synonyms, flags—using Claude for verbatim translation only. Parser handles tokenization and verb resolution like Infocom's original, proving vintage solutions remain viable.

Adding Gamification to DismalThreads

DismalThreads forum implements a gamified achievement system inspired by Dungeon Crawler Carl's snarky tone. Achievements have five tiers (Common to Legendary) plus secret achievements for specific behaviors.

Writing Effective Claude Skills

Claude skills are reusable, prompt-based automation shortcuts stored as `SKILL.md` files with YAML frontmatter and Markdown instructions. Best practices: narrow scope (one job per skill), specific instructions with examples, separate process (SKILL.md) from knowledge (REFERENCE.md), use XML tags for structure, control invocation via `disable-model-invocation` and `user-invocable` flags, and…

Stump the Programmer: The Recursive Shelf

Robert presents a ColdFusion/BoxLang coding challenge to build a recursive function that converts a flat array of hierarchical category data (using `id` and `parent_id` relationships) into a nested tree structure without using loops. The solution uses `arrayFilter()` to find children of each parent and `arrayMap()` to recursively build the `children` array for each node, with an optional bonus…

Stop Memorizing rsync Flags: Use a Wrapper Instead

`rsync-profiles` is a simple bash wrapper that replaces long, error-prone `rsync` commands with named profiles. Define your source, target, and exclusions in an INI-style config file, then sync with a single command like `rsync-profiles myprofile`. It supports remote servers via SSH, dry-run previews, custom rsync flags, and profile listing. Great for anyone tired of fat-fingering remote paths or…

Building a better spider

Robert evolved a web scraping service over several years to extract link metadata (Open Graph, Twitter Cards, oEmbed, JSON-LD) for social sharing features, progressively hardening it against bot detection, timeouts, and SSL errors. The latest version uses a multi-layered extraction strategy—rotating user-agents, disabling certificate validation, adding browser headers only for non-bot UAs to…

CBWire: Computed vs Data Properties

CBWire uses data properties for reactive state that persists between requests and supports two-way binding, making them ideal for form inputs and user interactions. Computed properties are read-only, derived values that are automatically cached per request, perfect for expensive operations like database queries or calculations that depend on data properties.

So I wrote a forum application in BoxLang

Robert shares his experience building DismalThreads, a modern forum application that evolved from his 2022 project renegade-forums. He rewrote it using BoxLang 1.0 and CBWire, a ColdBox module that enables reactive interfaces without JavaScript. He prefers CBWire over frameworks like Vue or React since it uses plain CFML. The site features nested comments, infinite scrolling feeds, notifications,…

Using BoxLang to process CSV files and push data to an API endpoint

A vendor sent bulk data as Excel instead of JSON, conflicting with an API endpoint's small-payload limit. A quick BoxLang CLI script parsed the CSV, handled Excel currency formatting, and chunked the output into 100-row JSON files. A second script POSTed each file to the endpoint with SHA-1 auth headers. Total time: ~15 minutes. BoxLang's command-line scripting made it a natural fit for the job.

It has been quiet around here lately

A development folder wipe led to rebuilding this site as Chronicler, a BoxLang/ColdBox 8/CBWire 5 app named after the scribe in Rothfuss's Kingkiller Trilogy. It replaces a static site with a lightweight CMS featuring a CBWire-powered post editor, enabling writing from anywhere. Source release planned once polished.

A few updates for September

Introducing bx-setup and boxlang-ssg updates

Boxlang SSG

A static site generator written in Boxlang

Running API-to-CSV Scripts with BoxLang

Quick and easy CSV generation with Boxlang CLI

Chunking an Array with ColdFusion Redux

Revisiting chunking ColdFusion arrays in 2025

Shopify GraphQL query example

Robert shows how to query Shopify GraphQL Admin API