Adds a clear :focus-visible keyboard ring for buttons/links/menu items,
a skip-to-messages link, landmark labels on the message log (role=log),
conversation sidebar and member list, and aria-labels on the emoji-only
message action buttons. New a11y i18n namespace across all locales.
Adds topbar_item and sidebar_item slots, plus addMessageDecorator() —
a per-message hook handed a stable read-only view {id,nick,text,kind,
ts,mine}, each rendered inside its own error boundary. Ships orbit-clock
(topbar) and orbit-copy (decorator) examples and documents both.
Replaces the binary mute with a three-way level stored per channel
(legacy muted channels migrate to Mute). The topbar bell opens an
accessible popover; the notify decision honours the level — All alerts
on every line, Mentions only on your nick/highlights, Mute never.
Global hotkeys (chat view): Ctrl/Cmd-K switcher, Alt+Up/Down to cycle
conversations, Shift+Esc to mark everything read, ? for the help sheet.
Composer arrow handler now ignores Alt so buffer-nav passes through.
Topbar (search/members/manage/modes/mute/server terminal/public-channel),
reconnect + kick/ban banners, the welcome entry (placeholder/enter/join hint/
password toggle/errors/trust/links), and the theme picker labels now all use
i18n. Adds banners + themes + extra topbar keys to all 10 locales. v21 -> v22.
The high-frequency chat noise now goes through i18n: join/part/quit/kick
(store, both live + history replay) and the mode/topic system lines + tags
(MessageList). Adds system + modeline namespaces to all 10 locales, empty
state reuses sidebar.noChannel. SW cache v20 -> v21.
Whois panel labels now use stable keys (decoupled from the wide-layout
detection) and render via t(); status/badges/actions/moderation translated.
The services-leak guard warning + its 'Sécurité' tag now go through i18n.
Adds whois + security namespaces to all 10 locales. SW cache v19 -> v20.
Consolidate the duplicate orbit-dark blocks into one, and add the actual
tchatou.fr typeface (Geist / Geist Mono) + muted hash-avatars on top of the
existing near-black monochrome palette. Bump SW cache v17 -> v18.
New selectable theme matching the tchatou.fr site: near-black neutral
surfaces, high-contrast white text, white (Grok-style) primary accent
with dark button text, green live dots. Extends the dark component
fixes to orbit-dark; themes the connect screen too. SW cache v16->v17.
Pro auth-links row on the welcome (Créer un compte · Mot de passe oublié ·
Aide & FAQ) opening a polished in-app FAQ accordion that deep-links to the
relevant entry. FAQ covers account creation (the real in-app Réglages →
Compte flow), password recovery, privacy, mobile/PWA, pricing. Bump cache
v15 -> v16.
Drop the centred-hero pattern entirely. Left: joining reframed as writing
your first message (composer-style entry). Right: a live chat room you peek
into — ambient messages stream in with avatars, names, reactions and a
typing indicator, isolated in its own component so it never re-renders the
form. Decorative feed is aria-hidden. Bump SW cache v14 -> v15.
Replace the generic centred-card/blurred-orbs connect screen with a
signature orbital system — the entry sits at the centre of gravity while
member satellites orbit it on tilted elliptical rings over a drifting
starfield. Green cosmic palette, Fraunces display. Removes the floating
bubbles + blur orbs + per-theme connect overrides. Bump SW cache v13->v14.
The room filter, message search, and channel-search inputs had neither
id nor name — browsers warn and can't autofill correctly. Give each a
name + type=search + autoComplete=off. Bump SW cache v12 -> v13.
Brand mark in two forms: orbit-logo.svg (transparent mark) and
orbit-icon.svg (dark rounded tile for favicons/PWA). Used on the
project site navbar and favicon.
Drop the accent a notch darker — --green #3fb950 -> #2ea043 and the
matching glows/profile banner — for a less-light green on the night
theme. Bump SW cache v11 -> v12.
A dark uploaded avatar blended into the dark background — the existing
inset ring is covered by the <img>. Add a visible outer ring for image
avatars on the dark and orbit themes. Bump SW cache v9 -> v10.
The nick-hash avatar gradient and profile cover/ring were fixed at high
saturation/lightness regardless of theme — too bright on the dark Orbit
theme. Drive avatar S/L from CSS vars (per-nick hue unchanged) and add
muted orbit-scoped values; dim the profile banner and avatar ring too.
Bump SW cache v8 -> v9.
New selectable theme 'orbit' for the client:
- theme.ts: register in Theme union, THEME_COLOR (#0b0e13), THEMES
- SettingsModal: add the 🛰️ Orbit appearance option
- index.css: orbit token block (site palette, green accent), extend all
dark component overrides to orbit, and green-ify the hardcoded accent glows
- sw.js: bump cache v7 -> v8
TypeScript + React + Vite client with zustand state. IRCv3 caps (SASL,
message-tags, echo-message, chathistory, multiline, account-registration,
webpush, …), mIRC formatting, reactions/typing/read-markers, themes, PWA +
Web Push, and runtime config.json (webchat-style) for re-pointing/re-branding
without a rebuild. See CONFIG.md.