Tools for Online Speech logo
by Jacob O'Bryant

A chatroom for Mystery Cows, thou pribbling clack-dish

Hello etc.

Clojure guide

I just finished the code for the next couple of posts in the Clojure guide—the accompanying tutorials will likely come in a day or two. There’s a minimal example for adding ClojureScript + React (via shadow-cljs and Rum), and I’ve added lobby + chat features as well. You can try it out at It’s nothing special; keeping it simple is better for teaching anyway. My favorite part is the auto-generated usernames.

To save myself the trouble of adding an editable text field and other doodads, I simply take a hash of the user’s ID (auto-generated by Firebase) and use it to deterministically pick an adjective and a noun from a list of Shakespearean insult words. So my username will forever be “loggerheaded-pignut.” Feel free to pop in and say hi.

While I do like Firebase, I’m decidedly not in love with it. I’m planning to make Mystery Cows fully functional on just Firebase, but I won’t bother polishing the code too much—I’ll save that for the subsequent migration to Digital Ocean. (I’ve also been having lots of thoughts about what a self-hosted, Clojurey version of Firebase would look like… it’s on my list of future projects).

However, for some apps (including Findka), using Firebase alone is sufficient. I think just about any app would benefit from starting out on Firebase at least for the prototyping phase.


Yesterday I finished some growth features. Each content item now includes a nifty share icon:

That icon opens up a share page:

Which helps you share a link to an item page:

In addition, I made a small but important change that should help to keep fresh data flowing in. I added a popup that triggers when you log in to Findka, once per week max:

If each user adds just one new item per week, that’ll give us plenty of content to recommend to other users. I was thinking about other methods of adding new content (like manually importing content that’s curated by other people), but I decided that focusing solely on content submitted by users will be most likely to keep the quality of recommendations high.

Oh, and another small-but-important change: I added an “other” content type that lets you paste in an arbitrary URL. While the current search integrations are convenient, I don’t want them to be limiting. Now, anything can be shared on Findka.

The exciting thing about having these features done is that now, Findka should be self-perpetuating. That means I can put all my focus into giving it an initial push of new users, and then it should take off on its own.


With the Coronavirus and everything, the little Clojure meetup I’ve been co-organizing has gone online. Feel free to join in the fun; it’s scheduled for 7 PM MDT on Tuesday of next week (the 24th). For the sake of tradition, I think we should all order our own pizzas to eat during the meetup.

Published 17 Mar 2020

I write an occasional newsletter
about my work and ideas.

RSS feed · Archive

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.