I have done something similar with the Airtable-esque Grist (biggest one being a survey output-explorer) but that’s just for browsing output, and it’s not very responsive to mobile.
Above all though, it made me think of TiddlyWiki, which is responsive to mobile devices and can also have buttons and the like. Perhaps unsurprisingly, there are mentions of TiddlyWiki in the comments (1, 2, 3), as well as HyperCard which partly inspired it.
Are there any small “webapps” you have created using TW? They may not all be appropriate for sharing more widely as a showcase or plugin, but it would be interesting to hear how people are using TW.
It tells me jokes I found funny enough at some point to write down. It is also easy to add new jokes.
I’ve been a subscriber to a daily joke newsletter since at least 2009: it was Al Lowe’s CyberJoke3000, which ended its run in late 2024.
I saved the best ones to a folder all these years, but I rarely went back and read them. They also had a lot of boilerplate around the jokes that gets in the way.
When it ended its run, in honour of the laughs and to preserve them better, I:
Exported all the emails into a folder using Thunderbird
Got AI to write me a script to extract between the two <hr>'s plus some special cases (thankfully Al kept to the same format for decades), into a CSV
I initially tried generating the title with AI but it spoiled the punchline too often. So instead, I gave it a randomly-generated series of characters.
Named some columns things after fields title, text, tags
Changed the CSV to JSON
Imported the JSON of jokes as separate tiddlers into TiddlyWiki
I now have a tell me a joke button that gives me a random tiddler tagged $:/jokes. I also have a separate button to add a joke under the new newsletter that Al recommended, Daily HaHa’s, which carries on the same spirit. The add joke button creates tiddlers that start with $:/Jokes/ in the title, with some randomly generated text afterwards (so they don’t appear in search), plus the tag $:/jokes.
<$button tooltip="Get a random joke tiddler" class=<<tv-config-toolbar-class>> >
😄
<$action-navigate $to={{{[tag[$:/jokes]_shuffle[]last[]]}}} />
<$list filter="[<tv-config-toolbar-text>match[yes]]">
<span class="tc-btn-text">
<$text text="tell me a joke" />
</span>
</$list>
</$button>
Add a joke
First, import my alphaNumericGenerator.js as a separate tiddler:
/*\
title: alphaNumericGenerator
type: application/javascript
module-type: macro
Generate an alphanumeric string of 10 to 12 characters
\*/
(function(){
"use strict";
exports.name = "alphaNumericGenerator";
exports.params = {};
exports.run = function alphaNumericGenerator() {
return Math.random().toString(36).slice(2).toUpperCase() // uppercase so there are no distracting humps in the title
};
})();
By the way, the buttons have these two tags $:/tags/Actions and $:/tags/PageControls.
I might change to a proper icon once TW switches to Lucide icons, but the emoji will do for now! It would bother me more if they didn’t happen to be on a new line. These buttons are smaller than normal buttons by the fact they have an emoji instead of a TW-format icon.