frontend fun

i haven't had the greatest past 2 weeks but today i got back into xcvr development and took care of a bunch of things!

--------

the main feature of xcvr is the hyper-real-time messaging, but sometimes it's nice to just have normal real-time messaging. i added this 2 weeks ago, but it was a bit broken. the way how hyper-real-time messaging is communicated is by sending an edit event through an off-(at)protocol websocket every time your message changes (lrc protocol). the lrc server (lrcd) listens for these events, and puts them into a queue to relay them accordingly. if it recieves an event from a user while their queue is full, it will close that connection (you cannot produce messages fast enough to cause this unless you're intentionally spamming the connection)

my naive implementation of non hyper-real-time messaging was that whenever you paused hyper-real-time messaging, to store each edit event and then send them all when you unpause it. of course, if your message is longer than something like "a" or "hi" or "beep" - my normal test messages while prototyping - this is interpreted by lrcd as spam and the connection is closed

one way of fixing this would be to save the state of the message after the last broadcast, and then whenever you unpause hyper real time, diff it with the current state. that would probably be fine, and technically decrease the overhead over the wire, but i kind of want to make it easy to store all edits, so they can be replayed after the fact, similar to keik.org

what i went with instead was to batch the edits, which went fairly smoothly. the one point of friction was just in the protobuf definitions. i initially wanted the batch event to be a batch of events, but that would cause too much headache if the user is able to include message inits and pubs in their batch. so i went with it only being able to include deletes and inserts

this is all to say that now if you disable hyper-real-time messaging, you no longer get automatically kicked

--------

i added a light theme. the perks of a monochrome or duotone or whatever you call it theme is that it's really easy to change the color scheme. in the future i might allow user to pick the foreground and background color and hopefully it works more or less

----------

i made it so the server doesn't require a signet to post! before it you couldn't submit your message until it had a signet, which isn't ideal because sometimes there is bug on the atproto side of things and things go wrong and no signet is produced / transmitted / recieved, but the lrc chat works otherwise, and it feels bad to not be able to finish your message. also you can't spam as well, if that's a thing you want to do. this is all no longer the case, and while sometimes i still see that the message fails to go through fully, most of the time it sorts itself out within 3 seconds

-----------------

finally, the fun things! i finally added a sound effect for while you're in the thread and you witness a post creation, it feels a bit lonely without something like that. i haven't added the ability to mute or change the volume settings haha but that will probably be fixed before people who want the volume changed encounter the website. i also made the font size really big! bigger font size of course = more visually appealing, but of course it's painful to scroll up very far if you weren't there when it happened, so after the first however many posts, it transitions back to a small font size. well, if you're not on mobile at least, please forgive me....

and i started on the emoji stuff, but i certainly got nowhere, but at some point in the near future it will be done

--------------

no progress lately on images, blobs, of course those are always on my mind and will come once i start having a lot of trouble thinking of small diversions

also i've been messing around with stream.place lately, so another little diversion has been livestreaming my development process there. wasn't talking, though i might on my radio show there tomorrow, but if you ever see me there we can have a chat on stream.place or on xcvr.org (if it isn't broken, though i think it's relatively stable at this point)

----

take care

-rachel