Tag

boxlang

13 articles

Things may look a little different

I rebuilt this blog on boxlang-express, my own Express.js-style BoxLang framework, moving from a CommandBox droplet to a thin DigitalOcean App container, with static assets on Cloudflare R2 and a homegrown MySQL access log replacing GoatCounter. Also: DismalThreads, my BoxLang/CBWire Reddit-style forum, is getting decommissioned end of month, no real users beyond my own test accounts, though the code may go public on GitHub.

RZ Robert Zehnder boxlang bx-express cli

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 and gotchas that reading alone would've missed.

RZ Robert Zehnder boxlang bx-express cli

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.

RZ Robert Zehnder boxlang socketbox

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.

RZ Robert Zehnder boxlang gaming socketbox

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.

RZ Robert Zehnder boxlang cli gaming

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.

RZ Robert Zehnder boxlang coldbox

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 maximize successful extraction.

RZ Robert Zehnder boxlang cfml

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, and supports both text and link posts with automatic metadata retrieval.

RZ Robert Zehnder boxlang

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.

RZ Robert Zehnder boxlang cli

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.

RZ Robert Zehnder blogging boxlang