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.
- responsive UI
- featherweight
- system agnostic
- instant updates
- resilient and comprehensible
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
- We create the tools we need if nothing adequate exists; this has been confirmed by countless dev ancestors.
- The best design is from 0; Fresh, formless, limitless.
- Less code speaks more. Go's powerful modules and standard library as well as the effortless DOM manipulation and styling granted by modern web foundations let you do more with almost nothing. Less dependencies, less problems, less code.
- Web technologies are the right call sometimes.
- A hammer is a hammer; a map is a map. Seeing a tool clearly may require a double-take. Using it properly takes practice.