Introducing: Bubble and Geminispace.org
🏷 Bubble, Gemini
I have begun a new Gemini project:
It is a Gemini-based bulletin board system that can be summarized as a union of Station, Reddit, WordPress, and issue trackers like GitHub Issues. It is implemented as an extension module to GmCapsule, my Gemini server.
Although I have written Bubble primarily for my own needs, it is also purposefully designed to be generally useful for other individuals and communities. Therefore, it has multiple objectives and target audiences:
- Someone could run Bubble in a manner similar to WordPress, as a Gemini-based CMS for their capsule. Every user on a Bubble server gets their own personal "u/" feed that is available both for Gemini subscriptions and Tinylog followers.
- A group of people can run Bubble as their own version of Station. Users' posts appear in the shared All Posts feed on the front page.
- Groups of people can set up their own moderated "s/" subspaces on a larger Bubble instance for topic-specific discussions, much like subreddits on Reddit. Users can freely create new Bubble subspaces. Subspaces have their own home pages and Gemini feeds.
- A developer of Gemini software can switch a subspace to issue tracking mode and link it with a Git repository. Issue tracking subspaces behave like GitHub Issues (and other Git forges on the web) in that posts have an open/closed status and they can cross-reference other issues in the tracker and commits in the Git repository.
That may seem like a lot of ground to cover, but in practice these use cases have much in common. The same post & comment thread structure is used everywhere, and features like post tagging and user @-mentions are available throughout the capsule.
A few features worth highlighting:
- Rich notifications: in addition to the usual @-mentions, comments and likes, you can be notified about new posts in a thread you were part of, and you can follow users, subspaces, and individual posts to be notified of new comments and/or posts in/by them. There are also notifications for new polls and issues that have been closed. Each of these notification types can be individually enabled or disabled.
- In contrast to existing social capsules on Gemini, Bubble supports _email notifications_ to inform you about activity on the site, in a timely fashion. Of course, this is optional but I believe a critical part of a social utility is to proactively keep people in the loop about noteworthy events occurring on the site.
- Personal feeds can be treated like a gemlog, with posts available as a Gemini feed for others to subscribe to. Antenna submissions are naturally integrated into Bubble: the author of a post can submit the post or their entire "u/" feed with one click to Antenna. However, a personal feed can also be treated like a micro/tinylog, with posts omitted from feeds and only appearing in the on-site All Posts page.
- There is a post composer that allows drafting longer posts before publishing them. (As eveyone knows, the Gemini protocol prevents one from submitting too much content in a single network request.) In practice, posts are composed of smaller "segments", and the composer can modify and reorder these segments. The composer also supports Titan uploads for unlimited text and small image/file attachments that are saved directly onto the Bubble server along with the rest of the post contents.
- Posts can contain a poll. Setting up the poll is quite straightforward in the post composer, and one can even change the order of the created poll options just like any other segment of a post.
- You can export all of your posts and uploaded files as a Gempub archive, aka a ZIP archive with a browsable structure of Gemtext files. The moderator of a subspace can do the same for an entire subspace.
- Other nice-to-haves: search across the entire site or in a subspace; the aforementioned personal Tinylog feeds; followed users/subspaces mode for the front page; personal customizations like choosing your avatar Emoji and a sorting order for comments; and ability to register multiple client certificates to an account using a temporary password.
Bubble v1.0 is about 4000 lines of Python, written enthusiastically over a two-week period. (For comparison, GmCapsule itself is 1900 lines.) Everything is very nascent and there are some sharp corners, but generally things should be functional.
The Bubble instance you are on now is called Geminispace.org. It is a sister site to skyjake.fi: you may note that these are on the same IP address and now share the same server certificate. I am running Bubble here primarily for dogfooding purposes, but with the ambitious goal of sunsetting the Lagrange GitHub issue tracker and moving the issues here instead:
There is a lot to say about large corporations trying to control the Git hosting ecosystem, and while better alternatives like Codeberg exist, it has always struck me as a fundamental conflict to have to depend on the Web for a core part of Gemini software development. The combination of Gemini + Email + Git seems a much better fit for Gemini projects. The more I can stay away from the web browser, the better. Bubble is still somewhat rudimentary in its current state but with some further work, I believe it has a chance to be quite a nice tool for issue tracking, fully in Geminispace.
Bubble can be configured for open registration of new users, and Geminispace.org currently allows that. You are welcome to come kick the tires with me and see how the platform evolves! Personally, I'll probably try posting more via u/skyjake and see how that feels.