Commit Graph
116 Commits
Author SHA1 Message Date
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
SalastilandClaude Sonnet 5.5 7bae0eaaa8 Kick events are cards in Kick's shape on this client's surfaces: KICKs sent with the gift and its tier, gifted subs with their recipients on a purple bar, a raid, and a redeemed reward in the streamer's colour
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 20:49:58 -04:00
SalastilandClaude Sonnet 5.5 5d826a785d Mirror script: MIRROR_GITEA reaches Gitea by its own address for the files Cloudflare will not take
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 16:33:00 -04:00
SalastilandClaude Sonnet 5.5 99e03116e9 Mirror script: a file over Cloudflare's 100 MB limit stays on GitHub only, said plainly, instead of stopping the mirror before nobilis
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 16:28:04 -04:00
SalastilandClaude Sonnet 5.5 ee0120ff5e A deploy tidies first: old AppImages, debug and cross builds, and a daemon build directory past 8 GB are removed, so a checkout stops growing to a hundred gigabytes
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 16:12:52 -04:00
SalastilandClaude Sonnet 5.5 7803cc38a6 A mute stops the interruptions, not the count: a muted channel still shows its mentions in the list, the rail, the switcher and the tray; a muted direct message shows none; and muting on Discord is written to the account as it is on Matrix
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 13:33:05 -04:00
SalastilandClaude Sonnet 5.5 336335a8a3 Scrolling a long unread run no longer snaps back: the place being read is found through the bar laid over the top of the log, not read off the bar, so a card or picture settling above does not put the view back where the bar appeared
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 13:17:22 -04:00
SalastilandClaude Sonnet 5.5 1e314f85b6 The tray's number is the window's: counted by the rail's rule - muted and hidden conversations out, a direct message by each unread message, anywhere else by its mentions - and told to the tray whenever it changes, instead of a tally of its own that drifted
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-09 20:08:34 -04:00
SalastilandClaude Sonnet 5.5 55248eb583 GIFs: a linked GIF is drawn as the picture - silent, looping, without the player - on every service, a GIF picker with trending, categories and search, and Klipy/Tenor/Giphy pages are never probed (#331)
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-09 17:55:10 -04:00
SalastilandClaude Sonnet 5.5 23c87dd353 Idle detection: how long since anything was used, from the system where it will say and moho's own windows where it will not; a setting for it and for how long; the plaque says Idle (away) and keeps what was chosen checked (#332)
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-09 17:35:58 -04:00