125 Commits
Author SHA1 Message Date
SalastilandClaude Sonnet 5.5 d1e39f18b0 Windows can be resized by their edges: channel list, member list, stream above the chat, and the corner panel from every edge
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 21:14:42 -04:00
SalastilandClaude Sonnet 5.5 dd4bd2e257 Twitch: the stage reports watching once a minute while playing; Settings switch
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 21:04:29 -04:00
SalastilandClaude Sonnet 5.5 a6fd981b6f Twitch: no third-party emote services; channel emotes greyed in the picker
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 19:52:54 -04:00
SalastilandClaude Sonnet 5.5 ae98f70d95 Twitch emotes: refresh in the picker, own line draws emotes; check against the real services
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 19:42:45 -04:00
SalastilandClaude Sonnet 5.5 38794e7cc5 Rewards: the emotes a reward offers are pictures to press, with a search and a second step for changes; integrity as the account
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 18:58:27 -04:00
SalastilandClaude Sonnet 5.5 aacbde768f Rewards panel: choose-an-emote and typed rewards; recent emoji only where they can be sent
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 18:47:33 -04:00
SalastilandClaude Sonnet 5.5 5518f1c534 Rewards panel: cheapest first, available above unavailable
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 18:29:06 -04:00
SalastilandClaude Sonnet 5.5 399f521f55 One rewards panel over the chat for Kick and Twitch channel points, opened from the plaque
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 18:23:01 -04:00
SalastilandClaude Sonnet 5.5 3d77002de3 Twitch: whisper badge shows (no presence dot), a script that checks the Twitch parts of the window
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 17:17:55 -04:00
SalastilandClaude Sonnet 5.5 bb2edf573d Sneedchat: greentext in 4chan's green, and a sent greentext line is matched with the site's coloured echo
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 16:36:59 -04:00
SalastilandClaude Sonnet 5.5 9ef8a67ac4 Every service notification is drawn as a card; the rule is in ARCHITECTURE.md
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 15:11:23 -04:00
SalastilandClaude Sonnet 5.5 c346b20e3d Twitch: whisper badge, moderation cards with their own glyphs
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 15:03:51 -04:00
SalastilandClaude Sonnet 5.5 b2c793477b Twitch sign-in: type the code into Twitch's Activate page and press Activate; show the code in the form
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 11:53:14 -04:00
SalastilandClaude Sonnet 5.5 be013ea47c Twitch sign-in: wait out the site's own redirect after login and bring the window back to the approval page; find the session by a second cookie too
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 11:39:08 -04:00
SalastilandClaude Sonnet 5.5 5b2438bba5 Twitch: one sign-in window gives the account chat and video together
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 10:56:30 -04:00
SalastilandClaude Sonnet 5.5 5356ddba55 Twitch: emotes and badges drawn, moderation and whispers in the window, README
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 09:18:31 -04:00
SalastilandClaude Sonnet 5.5 ac60123e7d Twitch: the stream plays in the window like Kick's, with its ad breaks said
Twitch prefetch segments are read as Kick's are, the ad break is said over the picture from the
playlist's own markers, mute and volume are remembered, the resolution choice is kept per service,
captions inside the video are offered, and the account's card can sign in on twitch.tv for video, open
what it follows, and forget the sign-in. A hidden page in main makes an integrity token on request.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 08:53:25 -04:00
SalastilandClaude Sonnet 5.5 d3a1efc1ef Twitch: Settings page, recent messages on opening a channel, the sign-in scripts
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 00:43:22 -04:00
SalastilandClaude Sonnet 5.5 322cbc8407 Twitch: the window signs in, joins channels and draws them
The Twitch mark, the sign-in form with the code and the page to approve it on, read-without-signing-in, an
account's own sign-in-again, the join panel, the signed-out composer, twitch emote pictures, and badge words
for a first message and a shared chat.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 00:32:29 -04:00
SalastilandClaude Sonnet 5.5 dd44e76970 Kick: the points plaque follows Kick's push, and badge pictures are drawn beside names
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 23:11:26 -04:00
SalastilandClaude Sonnet 5.5 987644ebf1 Kick: the recently-talking count keeps rising past what is listed
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 21:51:35 -04:00
SalastilandClaude Sonnet 5.5 8e3d1100c9 Kick: threads from replies, and removed messages struck through, left out or replaced as chosen
A reply shows a button into its thread; the thread panel gathers every reply that names the same root, and
sending in it works even when the first message has left the scrollback. Messages Kick removes stay in the
log, and Settings -> Kick chooses Delete, Strikethrough (the default, in red) or a notice in place of the text.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 21:17:34 -04:00
SalastilandClaude Sonnet 5.5 a7ef798df5 Kick video: no prefetch guesses for streams whose segments differ in length, and a longer lead for long segments
A broadcaster that sends its own segments (3 to 5 s, not IVS's even 2) made the segments still being
made the wrong length, and the picture stopped in the gaps about every 8 s. Prefetch is now only taken
where the segments are alike, and the player stays a segment and a half behind where they are long.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 20:24:06 -04:00
SalastilandClaude Sonnet 5.5 3aff255375 Kick video: about 3.5 s behind instead of 20, no rebuild on every address, a resolution menu and live captions
The player was rebuilt whenever the channel payload's address changed, which was every fetch (a new token
each time): that was the stutter. hls.js counted its live edge in 6 s target durations and ignored IVS's
prefetch segments: that was the lag. Both are fixed, prefetch segments no longer feed the bandwidth
estimate, and the address now comes from the lighter playback-url endpoint with its ad opt-out kept.
Resolution and CC buttons sit in the player's controls.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 19:57:03 -04:00
SalastilandClaude Sonnet 5.5 239c1e0ced Direct-messages headings made from a Steam account's folders are called protocol, then folder; a probe for QR sign-in
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 15:17:43 -04:00
SalastilandClaude Sonnet 5.5 2329abe29b Probes: leave a Steam group through the window, and list an account's groups after a fresh sign-in
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 14:55:04 -04:00
SalastilandClaude Sonnet 5.5 f03f8b276b Leaving a Steam group: a room's menu offers it, the settings dialog says when it fails, and a voice room is left with the group
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 14:41:44 -04:00
SalastilandClaude Sonnet 5.5 c6e3dd7ebf Steam group invitation on the Invitations tile, photographed; nobilis updated
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 14:10:38 -04:00
SalastilandClaude Sonnet 5.5 0633a2c835 Dropping a conversation on a category lights the whole category, not a line above it
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 13:24:02 -04:00
SalastilandClaude Sonnet 5.5 786936e6e0 Steam account page: Steam's folders are headings that are made, renamed, deleted and filled on Steam
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 13:19:54 -04:00
SalastilandClaude Sonnet 5.5 b0bc9b6d3d Steam account page: friends under Steam's folders, moved by dragging, and the move made on Steam
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 13:08:12 -04:00
SalastilandClaude Sonnet 5.5 9f8a104c53 A probe that places and answers a Steam 1:1 call against the official client
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 12:45:54 -04:00
SalastilandClaude Sonnet 5.5 48c070915b Steam voice: a refused acknowledgement of a new offer does not end the call, as in the client; a probe that joins a group's voice room
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 12:35:25 -04:00
SalastilandClaude Sonnet 5.5 810f780c73 Steam voice in the window: a group's voice rooms and calls to friends
The window holds the WebRTC session (lib/steamvoice.ts, a port of the Steam
client's own order of calls) and the daemon carries the signalling. A voice
room is listed under a group's channels with who is in it and who is speaking,
the call you are in is the same Voice panel as any other, a friend can be
called from their conversation, a call ringing is the same incoming-call
panel, and the footer's mute and deafen apply. Tried against real Steam as the
throwaway account: connected in two seconds with audio going to the relay.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 07:10:53 -04:00
SalastilandClaude Sonnet 5.5 0a07aa6f28 Steam chat groups in the window: a group is a server, its rooms are channels
The rail entry has Group settings (name and tagline, rooms, people and what
they may do, roles and permissions, invite links, how loudly to be told);
the member list moderates a Steam group's members; the Join page joins one
from an invite link and starts one; a room's own messages can be deleted.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 01:30:24 -04:00
SalastilandClaude Sonnet 5.5 dc051ca232 Steam: Profile opens the card every service uses, with the names they have had; invite links and blocked people on the add-a-friend page
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 00:32:56 -04:00
SalastilandClaude Sonnet 5.5 6cc8578c41 Steam friend groups are headings on the direct-messages page, kept the same both ways
A group is one of moho's own categories: its friends' conversations are under it, and
filing, renaming or deleting it here is done to the group on Steam, as what Steam does is
done here. What was last agreed is remembered so neither side echoes the other.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 00:19:36 -04:00
SalastilandClaude Sonnet 5.5 7eac8104f3 Steam: Profile in a friend's right-click menu opens a column about them
Where the member list would be: their status, the game they are playing, when they were
last seen, the names they have had, and what they wrote on their profile. Status and game
are live from their presence.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 00:06:59 -04:00
SalastilandClaude Sonnet 5.5 3b427131c0 A Steam warning is a red dismissable banner over the conversation and a red line in the log
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 23:28:34 -04:00
SalastilandClaude Sonnet 5.5 ce38d537ec Steam: the message just sent is recognised when Steam made a picture or card of its link
Before, the grey copy never matched the stored one, so an image link showed twice.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 22:06:46 -04:00
SalastilandClaude Sonnet 5.5 0770478d70 A link at the end of a clause does not take the clause's punctuation
Steam pages' cards draw as any link's do; checked in the real window.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 21:56:37 -04:00
SalastilandClaude Sonnet 5.5 2a2fda35fb A Steam sticker is drawn at the size Steam draws it, not as a small emoji
The rule sizing every emoji to the line outranked the sticker's own size.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 21:24:51 -04:00
SalastilandClaude Sonnet 5.5 846feb114a Steam videos are drawn, and a spoilered picture or video is covered like Discord's
The marker names a picture or a video, which an address with no extension cannot.
Anything in a spoiler - Steam's, Sneedchat's, a Discord ||link|| - gets the SPOILER
cover, and a link followed by || no longer loses its extension to the bars.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 20:21:29 -04:00
SalastilandClaude Sonnet 5.5 6728b53f6a A Steam conversation's emoji picker has no Unicode emoji and no GIF button
The picker offers the account's own emoticons, with a Stickers tab for its
stickers; reactions pick from the same two; the GIF button is not drawn in a
Steam conversation.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 19:10:36 -04:00
SalastilandClaude Sonnet 5.5 68684a4004 The profile card has a Status section
How they are showing (the dot and its word) and what they are doing - a game,
a track, or words they wrote, with an away message standing in for the words -
in a section of its own at the top of the card. What they are doing comes from
the lookup where the service gave it, and otherwise from the member lists,
which already carry it for every service.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 16:16:08 -04:00
SalastilandClaude Sonnet 5.5 82665ee4a5 Comfy lists follow Discord on every service; classic stays names
In comfy a member list has a face on everybody and, under each name, what they
are doing - a gamepad and the game, a note and the artist, or words with no
picture - and a direct message's row says the same under its name. In classic
both are plain names, as IRC and Sneedchat always were. A screenshot script
photographs the two.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-12 16:10:39 -04:00
SalastilandClaude Sonnet 5.5 f1183958ab Kick subscriptions, moderation and the stream's going live or ending are cards in the same theme as the gifts, raids and redeems
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-11 13:44:49 -04:00
SalastilandClaude Sonnet 5.5 97611c8742 No reference to the maintainer's own server: .gitmodules and PKGBUILD are the public ones on every branch, the nobilis release is its own script and the mirroring is kept outside the repository, and the maintainer is [email protected] everywhere it is named
Closes #335

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-11 00:28:47 -04:00
SalastilandClaude Sonnet 5.5 64ade92ee1 Kick cards sit where a person does: no join mark beside them, starting at the picture's edge with the name where a name is in the log - in comfy and in bubbles, where they had been centred - and with the air above them a message has
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-11 00:07:59 -04:00
SalastilandClaude Sonnet 5.5 39dcba548a A conversation opens as Discord's does: at its first unread only when the run is short (fifty or fewer), otherwise at its end with the bar to go back by - and the line from a visit is dropped when the conversation is left, so a return no longer goes up the history to a place nothing is unread
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 23:58:14 -04:00