Skip to content

feat(app): read marks in light blue, and the side panel comes back with the bot - #52

Merged
httpsphl merged 2 commits into
mainfrom
feat/read-marks-panel-memory
Sep 30, 2026
Merged

httpsphl merged 2 commits into
mainfrom
feat/read-marks-panel-memory

Conversation

@httpsphl

Copy link
Copy Markdown
Owner

Two small app changes the owner asked for after using Botloft with real bots. One commit each.

Read marks in light blue

A message the bot has read showed CheckCheck and "Read" in text-muted, the same dim color as "Delivered". Now the two marks are light blue, as in chat apps, and the word stays as it was.

  • New token --read in index.css (text-read): #1787c9 in the light theme, #5cc4f2 in the dark one.

  • --work was not reused: it already means a bot at work and a message being delivered ("Delivering…" sits in the same line), and in the light theme it is a deep blue, not a light one.

  • Contrast of the marks (an icon needs 3:1):

    theme canvas panel sunken
    light #1787c9 3.53 3.93 3.23
    dark #5cc4f2 9.97 9.33 8.63

    The blue chat apps use (#53bdeb) gives 1.9 to 2.1 in the light theme, so the light theme has a deeper tone.

  • The label keeps text-muted (4.55:1 on the light canvas, 5.82:1 on the dark one): the word states the state, the color only helps (spec 15.3).

  • Spec 9.1 and 15.3 describe it.

The side panel comes back with the bot

The open panel was local state in BotView, which is remounted per bot, so switching to another bot and back lost it.

  • The panel beside each bot's chat is kept in the app store (panels, setPanel) until the app closes. Closed is kept too: a panel the owner closed comes back closed.
  • The panel that comes back is there at once, without sliding open (PanelRestored in panelMotion.ts); one opened after that slides as before.
  • useFollowBot is unchanged. Coming back counts as opening the bot: a browser the bot opened meanwhile stays behind its button, and what opens by itself when a bot is opened (a request for a hand still unanswered, a screen still being written) or starts after it takes the place of the panel that came back.
  • Only the panel is kept: not the file or screen in focus inside it, and not the browser in the owner's hands, which switching bots already gives back (spec 21.10).
  • Spec 15.1 describes it.

One thing to decide, not changed here: a request for a hand that is still open reopens the browser every time the bot is opened, also after the owner closed that panel, and a screen still being written does the same for the design area. That is how it already worked; with the panel now coming back, it is the one case where a panel the owner closed opens again.

Tests

  • features/bots/panels.test.tsx (new): the panel comes back, each bot with its own, without sliding; closed stays closed; one that opened by itself comes back, also through the crew page; a browser opened while away stays behind its button and what the bot starts next still takes the panel's place. Three of the four fail on main.
  • ui/sidepanel.test.tsx: a restored panel is open at once and still slides closed.
  • features/messages/messages.test.tsx: the marks take text-read and the label does not; the token keeps 3:1 on every surface in both themes and stays lighter than --work (reads index.css, so it is added to test.css.include).
  • pnpm check passes (198 tests).

Checked in the preview (pnpm dev, FakeBotloft) in both themes: the marks, and the browser panel coming back live after switching bots.

Nothing here depends on the real Claude Code.

A message the bot has read showed its two check marks in the same dim
color as "Delivered", so the two were hard to tell apart at a glance.
The marks now take a new `--read` token, a lighter blue than `--work`
(which already means a bot at work and a message being delivered). The
word "Read" keeps the muted color of the other delivery lines: it is the
word that states the state, the color only helps (spec 15.3).

The blue chat apps use is too faint on the light theme (about 2:1), so
the light theme gets a deeper tone. A test reads the tokens from
index.css and checks 3:1 against canvas, panel and sunken in both
themes.
The panel beside a bot's chat was local state of the bot's view, so
switching to another bot and back lost it, and the owner had to open
the browser again every time. The open panel is now kept per bot in the
app store until the app closes, closed included: a panel the owner
closed comes back closed.

The panel that comes back is there at once, without sliding open
(`PanelRestored`). Following the bot is unchanged and treats coming back
as opening the bot: a browser the bot opened meanwhile stays behind its
button, and what opens by itself on opening a bot, or starts after it,
takes the place of the panel that came back. Spec 15.1 says so.
@httpsphl
httpsphl merged commit 82a8306 into main Sep 30, 2026
3 checks passed
@httpsphl httpsphl mentioned this pull request Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant