AGENTS.md
Rama main · réplica de lectura del repositorio original.
### Don't ever do
- git write commands: commit, push, merge, rebase ...
### Frontend
- frontend location is `web-ui/`, a member of the main Rust workspace (WASM target)
- built with Dioxus framework, compiled to WebAssembly
- one-time setup after clone: `cd web-ui && npm install` (installs tailwind/daisyui/material-icons and copies font files to `public/material-icons/`)
- compile check: `dx check` (run from `web-ui/`)
- dev: `cargo make serve_dev` or `cd web-ui && dx serve`
- release: `cargo make build_ui_release` (output embedded in backend binary)
- CSS source is `web-ui/input.css`; compiled output is `web-ui/public/tw.css` (committed to git)
- regenerate CSS: `cargo make build_css`, then commit `public/tw.css`
- `public/material-icons/` is committed too (copied there by `npm install`): the Android/F-Droid UI build (`build_ui_android`) uses the committed CSS and fonts and never runs npm; cd.yml fails the release if they are stale
### Backend
- Compile BE with `cargo make build_dev`
- Frontend release build must exist before compiling the backend (`cargo make build_ui_release` embeds the UI)
- Run locally with `cargo make run_local`. CWD dir is `.run`
- When deployed to target env it is run by systemd defined in PGKS
### Documentation
- docsify site in `docs/`
- README.md
- Release notes are here `docs/release_notes.md`
### Rust toolchain
- pinned in `rust-toolchain.toml` (newer rustc breaks `build_ui_release` via wasm-bindgen); `cargo`/`dx` in the repo use it automatically
- bump all pins together (`Dockerfile.builder`, `Dockerfile.android`, `android-build-env.sh`, macOS job in `cd.yml`) and run `cargo make check_toolchain_pins` (CI runs it)
### Versioning
- version is centralized in root `Cargo.toml` under `[workspace.package]`; crates inherit it via `version.workspace = true` and code reads it via `env!("CARGO_PKG_VERSION")`
- `Makefile.toml` derives `RELEASE_VERSION` from `Cargo.toml` at runtime
- release tags must equal the workspace version (CI verifies this)
### Packaging / Release
- server packages: `cargo-deb` (deb, config in `crates/server/Cargo.toml` `[package.metadata.deb]`), `cargo-generate-rpm` (rpm, `[package.metadata.generate-rpm]`), plain rootfs tgz for Arch — all produced by `cargo make package_linux_release` into `target[/cross]/<target>/pkg/` with final release asset names
- desktop bundles: `cargo tauri build` (config in `crates/desktop/tauri.conf.json`) — deb + rpm + Arch tgz on Linux; `cargo-packager` — DMG on macOS; task `cargo make build_desktop_release` (or `bundle_desktop_release` when the web UI is already built)
- macOS (server binaries + DMGs) is built natively on GitHub `macos-latest` runners; there is no darwin cross-compilation anymore
### Deploy to local test env (RPI)
- there are two test devices rpi zero and rpi4 (rpi_host and rpi_target env variables in Makefile.toml) it requires switch remove/add comment...
- If FE files changed: `cargo make build_ui_release && cargo make copy_remote`
- Otherwise: `cargo make copy_remote`