You are browsing as a guest. Sign up (or log in) to start making projects!

Fossim

  • 28 Devlogs
  • 52 Total hours

A streamlined and indexable future of collaboration for open-source projects

Ship #1 Changes requested

Hello! Fossim and Stardance were really fun for me as I finally got around to building something new, instead of spending a lot of time maintaining old projects for their users. If you read through the devlogs or code, you’ll see that building a whole new interface on GitHub’s APIs isn’t easy, because they don’t expose a fraction of the features they use on their own site.

For example, instead of being able to receive events (e.g. someone else sent a message) in the client directly, I had to architect an entire multiplexed event forwarding/broadcast mechanism in a backend server. Or, since there’s no way to check how many messages the user hasn’t read when the app starts, I had to implement a database in the backend with counters that increment on new messages so that clients can compare their local values when they start.

So, to answer ‘what I’m proud of’, it’s going to be working around the architectural API challenges rather than building a desktop app with a sweet UI, since I already knew I could do the latter.


Fossim is a collaboration platform for open-source projects, but what makes it different from a platform like Discord, Matrix, Slack or Zulip is that it’s built on the software forge that projects are already using for source control.

By using GitHub Discussions as the content index for your project’s community (note: Fossim is designed with support for different forges in mind, and the project would be very happy to accept contributions to add support for other platforms) with the Fossim application as an interface familiar to users of the platforms listed above,

  • the discussions taking place in your community become indexable by search engines,
  • you avoid splitting your community across multiple platforms and avoid requiring users to create new accounts,
  • content like issues and pull requests can be referenced using convenient shorthand syntax,
  • and you use a platform designed for the needs of open source, for example automatically displaying a project’s funding links on its Fossim community overview.

Additionally, you avoid the common hassle of migrating users to a new platform, since Fossim is built fully on top of GitHub Discussions, which can be accessed directly from GitHub’s interface. Using Fossim, however, grants you access to

  • all the communities you’re a member of in one place, easy to navigate between with a unified interface,
  • system-level notifications for new messages including granular, per-community controls,
  • and an interface more tailored to a chat platform than a curated discussion forum.

Want to set up a Fossim community? Head over to the backend documentation at https://github.com/nekename/fossim-backend to learn how to set up an event source for your community.

Try project → See source code →
Open comments for this post

1h 27m 35s logged

got back home, wrote a README with overview, installation, support and contributing info, created a metainfo file in case I ever bother to publish this to Flathub and so it looks nice in Linux software stores, fixed a bug with missed event deliveries when reconnecting to the backend, wrote a github actions workflow for publishing on release and added a banner sending you to the FAQ after onboarding

0
0
6
Open comments for this post

1h 44m 31s logged

I’m away right now so not making lightning speed progress like before, but I made the application integrate much better when installed, such as enforcing a maximum of one running instance, fixing the app’s display name, and improving the icon shown on macOS.

then, I wrote an FAQ (https://github.com/nekename/fossim-application/wiki/FAQ) for the application to clarify missing features, answer hosting questions and address privacy concerns

0
0
4
Open comments for this post

1h 6m 4s logged

it’s all finishing touches in the client now!

added support for minimising the app to the system tray when closed as well as a settings menu to control the behaviour

pretty much just need to add some networked services like an update checker and statistics collection, write a readme and faq, and add a docker build for the backend

0
0
6
Open comments for this post

39m 44s logged

alright, as hinted before, Fossim now sends system notifications! (and of course i made sure it doesn’t send notifs when the channel is focussed and you’re actively chatting)

(weird icon and name will be fixed when the app is properly installed (i hope))

0
0
3
Open comments for this post

1h 52m 37s logged

comments referencing github items are now real links to make coordinating PRs and issues way easier (as well as linking to other discussions, although they don’t open in fossim)

I also added a notif level setting which will be useful now as I’m about to implement system notifications, and you might not want a system notification for every thread in every community

this is amidst some other UI/UX improvements like better error messages, automatic reconnection etc

0
0
3
Open comments for this post

2h 24m 4s logged

with all the architectural stuff done, I’m working on all the cosmetic finishing touches

community list now also shows the total unread notifs of all the community’s channels

community config allows specifying name, icon and banner so that you can customise your community

I even added a button to sponsor the community’s owner if the repository has funding links attached!

0
0
2
Open comments for this post

3h 13m 49s logged

so, I’m back a little while later, and the app now shows unread message counters, not only incrementing while the app is open but also synchronising with the backend so that you can see how many messages have come in even when the app was closed.

this required me to set up a database in the backend for tracking sequential message counters for each channel that the client can then subtract from its own records, I learnt some database stuff and also some stuff about making bulk HTTP requests, since I didn’t want to make a request per channel

0
0
2
Open comments for this post

3h 45m 14s logged

alright, here we go!

it was a lot of work (nearly 4h as you can see), but the Fossim client can now receive and handle every type of live update that the backend can receive from the GitHub webhook.

this means that when others send, edit or delete messages, or a new channel or thread is created or an existing one edited, deleted, locked or unlocked, the client receives the update in real time.

now it feels more like an instant messenger :)

what’s left: showing notifications for unread messages, including finding some way to remember last read message and fetch how many new messages once the client restarts

0
0
3
Open comments for this post

1h 56m 56s logged

worked my way through GitHub docs and figured out how to implement a webhook delivery handler, including verifying the secret, then implemented connecting to websocket channels for each community which get forwarded all the relevant webhook messages

all that’ll be left now is to incorporate these updates into the frontend which shouldn’t be too hard

0
0
3
Open comments for this post

47m 43s logged

I added replying to messages that don’t already have a reply thread last night and I’ve just added reacting and unreacting, which completes all the basic message functions 🎉

0
0
2
Open comments for this post

34m 31s logged

you can now edit messages
basically i’m speedrunning all the basic actions so that i can work on notifications which will be a huge task

0
0
5
Open comments for this post

1h 25m 6s logged

you can now delete comments and replies, including proper handling of GitHub’s very weird logic flow for deleting comments that have replies - they get replaced with ghost comments until all of their replies are deleted - just an empty body without so much as an explanation
(two windows here to demonstrate the modal and also the fact that the button appears on comment hover)

0
0
4
Open comments for this post

1h 29m 16s logged

wow! you can now send messages from a delightfully previewable text box

in other news, I improved the experience switching between communities, added highlighting for the active channel, fixed a performance problem and fixed a hang when loading an empty channel

0
0
5
Open comments for this post

1h 22m 49s logged

you can now view full reply threads to every top-level message, including pagination (it loads 100 messages at a time)

0
0
4
Open comments for this post

5h 12m 41s logged

5 hours later, and basically all of the requirements of the main-continuity message view have been implemented, including images, lists, links, alerts, reactions and placeholder buttons for opening reply threads!

it even automatically loads more messages as you scroll upwards, but i dont have any long enough channels to demonstrate that (loads 100 messages at a time since that costs the minimum per request in terms of github rate limits)

all that’s left now is taking actions (sending messages, reacting etc), and then getting realtime notifications from the backend

0
0
3
Open comments for this post

3h 12m 19s logged

I’m having so much fun :)
I’ve implemented the entire channel and thread list complete with thread pagination, dynamic icons based on locked/answered/answerable status, and a button to leave the community
I also implemented a really satisfying shift, blur and shadow effect when switching between communities
(edit: the issue in the video where the ‘select a community to start collaborating’ message wasn’t shown after leaving the community got fixed immediately after recording)

0
0
5
Open comments for this post

2h 18m 28s logged

auto-expanding sidebar drawer for communities you’re in, including a button and popup flow for joining new communities :)
caching from previous step was useful here
next step is listing channels and threads

0
0
3
Open comments for this post

1h 56m 56s logged

  1. added double-click to copy and added a loading ring animation to the device flow auth view
  2. added a note to the host confirmation view saying that the app only has limited access to act on your behalf and that in the local app, the access token never needs to be sent to the server
  3. cleaned up the database schema and implemented persisting added communities and obtained access tokens
  4. implemented caching host and client ID requests since those will be frequent in upcoming stuff
0
0
4
Open comments for this post

1h 29m 51s logged

github device flow auth 👀
why oh why does device flow auth not work in browsers? I had to do either figure out how to make octokit.js use tauri-plugin-http, do the entire processs from the Rust side, or use the normal oauth web flow
went with do it all from Rust because option 1 and 3 needed rust deps anyway (http plugin for 1, deep link/web server for 3), and option 1 needed figuring out and option 3 leaks the access token to the server unnecessarily

0
0
3
Open comments for this post

3h 10m 58s logged

I implemented the necessary utils for making requests to the backend, and used fetching the client ID to test that (screenshot). I backtracked on the implementation and removed tauri-plugin-http as well as removing tauri-plugin-svelte from earlier so that the frontend is entirely self-contained and can be ported to just be a website for those who want that.
on the backend, removing tauri-plugin-http required me to mess around with CORS settings for a while until the browser accepted its responses

0
0
4
Open comments for this post

1h 15m 23s logged

I implemented fetching a community’s configured backend host from its repository when you click ‘Join’, then I created a skeleton OAuth explanation and confirmation modal view!

0
0
3
Open comments for this post

1h 36m 1s logged

I set up tauri-plugin-svelte for data persistence, then I repurposed the i18n.ts localisation code from one of my other projects so that Fossim has translation support from the very beginning

lastly, I created a skeleton onboarding view where you can input the first community you want to join or join Fossim’s own community as an example

0
0
4
Open comments for this post

1h 13m 15s logged

spent forever trying to debug prettier-plugin-tailwindcss which is not how i wanted to spend my evening

turns out it was just a bug and not a misconfiguration (https://github.com/tailwindlabs/prettier-plugin-tailwindcss/issues/464)

this started while i was getting the onboarding working in the application and noticed my classes weren’t being sorted

edit: looks like i uncovered a bug in Deno as well!! installing the insiders channel of prettier-plugin-tailwindcss using Deno resulted in the latest commit being added to package.json but a commit from 2023 actually being installed. had to remove the ^ from the version specifier

0
0
4
Open comments for this post

2h 32m 13s logged

  • architecture has been planned out
  • backend and client projects have been fully scaffolded
  • necessary setup steps and permissions for the GitHub App have been determined and documented
  • relevant GitHub APIs and processes have been researched

most of my time was spent planning and researching today, that’s why only 2.5 hours coding

0
0
26

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…