The $: block applying note changes to CodeMirror listed the autosave
bookkeeping vars (saveTimer, lastKnown) as dependencies, so the 400 ms
autosave re-ran it before App delivered the updated note prop. That stale
run misread the save echo as an external sync change and replaced the
whole doc mid-typing: on Android this aborted every IME composition and
threw the cursor to the top of the note.
Apply note/query via $: fn(prop) so the statements re-run only when the
prop itself changes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Multi-stage build (node -> go -> alpine) producing the static tefterd
binary with the frontend embedded. Compose follows the house style for
the podman/SELinux server (:Z volume label + label:disable). deploy/
holds the user systemd unit and redeploy-tefter.sh, mirroring the
apelacija setup.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Single-runner workflow: test on every push; on v* tags cross-compile tefterd
for all platforms, build the Linux desktop app, and publish a Gitea release
via gitea.com/actions/release-action. Drop the GitHub workflow; document the
runner requirement and manual macOS/Windows desktop builds in the README.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SVG source in frontend/public/icon.svg, rendered to 192/512/maskable PNGs
and desktop/build/appicon.png; SVG favicon with PNG fallback; icons added
to the service-worker precache.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>