blackhole://nilFM

the stackless stack

It's not that there is no stack, simply that it is empty.

In this way, 'empty' means the components of the stack are not considered in a vacuum but the stack is holistically designed to organically enable the application to evolve.

dependent origination

chaos awakening is the first long-term tabletop campaign I've run, and for combat maps we were using, for lack of something more general-purpose and accessible, Google Drawings. Seeing how clumsy it was to use a very general-purpose piece of software in such a way so far removed from its designers' intentions (in addition to the obvious red flag of it being a Google service), I was determined to create an alternative.

aggregates, formless

quartzgun again: diamond thunderbolt

quartzgun is obviously my web backend of choice. This application was a proof of concept for quartzgun's bearer-token style authentication as well as the first JSON-based quartzgun web API.

The backend of this application also includes a websocket server and uses mongodb to store data.

Go's language design and the websocket example code made most of the backend design very straightforward and minimal. Mongodb in general is so different from the SQL I'm used to wrangling on a daily basis, but after trial and error and a lot of research I got the hang of the queries.

The API functions, like in nirvash, are largely about filesystem operations. quartzgun made it easy to focus on the business logic.

vanilla js: original face

The frontend is a direct offering — take this blossom and go forth. Simple markup with no-nonsense javascript attached: a data-oriented design crafted with the bare minimum infrastructure to present that data. CSS does the rest.

A single page app, but organically. There is just enough functionality; you don't need to context switch to a different page within the app — there is just the UI.

Authentication is token-based, websocket handling is event and message based, and the UI is represented as a series of collapsible windows overlayed on a slippy map, The decision to use leaflet for the map came rather late in the design, but was natural considering the ease and success of onyx, and simplified the UX and overall UI design signifiantly. leaflet is approximatley 3/4 of the weight of the frontend. In all it's only ~210KB. DOM interaction is by IDs with mostly just $ = document.getElementById and the properties style.display, value and innerHTML.

Theme my apps - sun-faced app, moon-faced app. The theme is 5 colors and saves to localStorage.

reflections