15 Commits

Author SHA1 Message Date
bl 080b9c46d6 chore: Release cnats version 0.2.4
Release / build (x86_64, ubuntu-latest) (push) Successful in 7m14s
Release / docker (push) Successful in 4m32s
Release / build (aarch64, aarch64) (push) Successful in 14m2s
Release / update-aur (push) Successful in 10s
v0.2.4
2026-07-30 15:06:52 +02:00
bl 3807294333 Fix mic feedback in solo calls: force .muted on the local preview tile
Every video tile is built client-side via document.createElement, never
parsed from HTML - browsers only seed the live .muted property from the
muted attribute for parser-inserted elements, so the attribute alone
never actually silenced the local preview. Result: your own mic played
back through your own speakers even with no other peers in the call.
Now sets el.set_muted(true) directly whenever the preview's srcObject
is (re)assigned.
2026-07-30 15:06:14 +02:00
bl 9c89cfbe9c chore: Release cnats version 0.2.3
Release / build (x86_64, ubuntu-latest) (push) Successful in 7m5s
Release / docker (push) Successful in 3m54s
Release / build (aarch64, aarch64) (push) Successful in 13m37s
Release / update-aur (push) Successful in 11s
v0.2.3
2026-07-29 10:50:09 +02:00
bl 9326f93576 Fix hydration mismatch in CallPanel that crashed room switching
The SSR branch rendered an empty call-panel div while the hydrate
branch expected a child button node. On any full load/refresh of the
lobby room, the mismatched hydration cursor hit tachys's
unreachable!() panic path, trapping the wasm instance and killing all
reactivity (routing, room switching, SSE) for the rest of the page
load, while the already-rendered SSR HTML stayed visually intact.

SSR now renders the same default join-button markup hydrate expects.
2026-07-29 10:50:02 +02:00
bl 9858460696 chore: Release cnats version 0.2.2
Release / build (x86_64, ubuntu-latest) (push) Successful in 7m10s
Release / docker (push) Successful in 3m59s
Release / build (aarch64, aarch64) (push) Successful in 15m24s
Release / update-aur (push) Successful in 12s
v0.2.2
2026-07-28 12:03:23 +02:00
bl 9550fa1f72 CI: install cargo-leptos via cargo-binstall instead of building from source
Building cargo-leptos from source pulls in swc/lightningcss/rhai and was
OOM-killing the aarch64 (Raspberry Pi) runner. cargo-leptos publishes
prebuilt aarch64-unknown-linux-gnu binaries, so binstall sidesteps the
compile entirely.
2026-07-28 12:02:26 +02:00
bl e0061af9ce chore: Release cnats version 0.2.1
Release / update-aur (push) Has been cancelled
Release / build (aarch64, aarch64) (push) Has been cancelled
Release / build (x86_64, ubuntu-latest) (push) Successful in 20m47s
Release / docker (push) Successful in 4m6s
v0.2.1
2026-07-28 10:53:51 +02:00
bl 64bc5222fc Fix release build: box CallPanel's in-call subtree to avoid recursion limit
Mesh calling's nested Show/For inside ChatShell's own Show inlined as a
type parameter, blowing rustc's query recursion limit during the wasm
release build (CI: "queries overflow the depth limit!"). Splitting the
in-call view into its own component and type-erasing both CallPanel
branches with .into_any() keeps the type shallow instead of raising the
crate-wide limit.
2026-07-28 10:53:32 +02:00
bl 4cc0103448 chore: Release cnats version 0.2.0
Release / build (x86_64, ubuntu-latest) (push) Failing after 17m18s
Release / docker (push) Failing after 18m48s
Release / build (aarch64, aarch64) (push) Failing after 1h17m53s
Release / update-aur (push) Has been skipped
v0.2.0
2026-07-27 23:55:00 +02:00
bl 650ed50c21 Kanidm group-gated rooms and minimal mesh calling
Rooms can now require a Kanidm group (via the `groups` OIDC claim,
mapped by `oauth2 update-claim-map` server-side) - dev/ops require
`developers`, enforced at every message path (send, history, SSE).

Adds a minimal WebRTC mesh call feature scoped to the lobby room,
signaled over a separate `call.room.*` NATS subject kept out of the
chat archive: public STUN only, no TURN, no SFU - small groups on
friendly networks, by design.
2026-07-27 23:52:27 +02:00
bl 46bdad1629 Pass NATS credentials explicitly: async-nats ignores userinfo in the URL
async_nats::connect() silently drops user:pass embedded in NATS_URL,
so the server rejected every connection with an authorization violation.
Parse the URL and feed credentials through ConnectOptions instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 22:33:20 +02:00
bl b4dfe0c5ea Add cargo-release config matching gpupaper release flow
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 14:44:03 +02:00
bl 8d0c87ad2e Add release pipeline: AUR packaging, Gitea workflow, MIT license
Release / build (x86_64, ubuntu-latest) (push) Successful in 31m46s
Release / build (aarch64, aarch64) (push) Successful in 41s
Release / update-aur (push) Successful in 12s
Release / docker (push) Successful in 25m53s
Mirrors the gpupaper release convention: v* tags build x86_64/aarch64
tarballs (binary + leptos site + systemd unit), upload them as Gitea
release assets, push bendik/cnats to Docker Hub, and update the AUR
package with checksums from the release assets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
v0.1.0
2026-07-09 14:38:40 +02:00
bl ec3771f2e7 Persist chat history to Postgres via durable JetStream consumer
DATABASE_URL required at startup; schema self-initializes.
Compose gains a postgres service for standalone dev.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:14:26 +02:00
bl 6b97ec3b0f cnats: NATS-native chat with Leptos SSR and Kanidm SSO
Initial import plus deployment packaging: multi-stage Dockerfile
(cargo-leptos build -> debian-slim runtime), .dockerignore, and a
dev-only docker-compose (app + local NATS). Production deployment
lives in the infrastructure repo.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 21:53:56 +02:00