From 59f1775fcdb65429411ccd8a7d5a30b9a138ac44 Mon Sep 17 00:00:00 2001 From: rouggy Date: Thu, 18 Jun 2026 10:48:23 +0200 Subject: [PATCH] fix: Updated README --- .claude/settings.local.json | 32 +++++++++ README.md | 136 +++++++++++++++++++++++++++++++++--- 2 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..4fb8cfc --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,32 @@ +{ + "permissions": { + "allow": [ + "Bash(go:*)", + "Bash(gofmt:*)", + "Bash(/c/Users/legre/go/bin/wails:*)", + "Bash(wails:*)", + "Bash(npm:*)", + "Bash(npx:*)", + "Bash(grep:*)", + "Bash(rg:*)", + "Bash(cat:*)", + "Bash(ls:*)", + "Bash(find:*)", + "Bash(echo:*)", + "Bash(head:*)", + "Bash(tail:*)", + "Bash(awk:*)", + "Bash(sed:*)", + "Bash(sort:*)", + "Bash(uniq:*)", + "Bash(wc:*)", + "Bash(xargs:*)", + "Bash(for f in *)", + "Bash(git status:*)", + "Bash(git diff:*)", + "Bash(git log:*)", + "Bash(git show:*)", + "Bash(curl -sI --max-time 10 https://raw.githubusercontent.com/google/fonts/main/ofl/archivoblack/ArchivoBlack-Regular.ttf)" + ] + } +} diff --git a/README.md b/README.md index 2596cb2..5e213b2 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,125 @@ -# README +# OpsLog -## About +A modern, fast ham-radio logger for Windows — Log4OM-style entry, real-time CAT +(OmniRig **and** native FlexRadio/SmartSDR), DX cluster, awards tracking, maps, +QSL management and a QSL-card designer. Built with **Wails v2** (Go backend + +React/TypeScript frontend), **pure Go** (no CGO): SQLite for configuration, +optional **shared MySQL** for the logbook so several operators can run one log. -This is the official Wails Svelte-TS template. +Developed by **F4BPO**. -## Live Development +--- -To run in live development mode, run `wails dev` in the project directory. This will run a Vite development -server that will provide very fast hot reload of your frontend changes. If you want to develop in a browser -and have access to your Go methods, there is also a dev server that runs on http://localhost:34115. Connect -to this in your browser, and you can call your Go code from devtools. +## Building / developing -## Building +- **Dev:** `wails dev` (Vite hot-reload; Go methods reachable at http://localhost:34115). +- **Build:** `wails build` (use the project's wails v2.11 — `~/go/bin/wails.exe`). +- **Regenerate Go↔TS bindings** after changing exported `App` methods: + `wails generate module`. +- **Release:** `.vscode/release.ps1` (Ctrl+Shift+P → *Tasks: Run Task* → + *Release OpsLog*) — bumps the version, pushes source to Gitea, builds the exe + and publishes it to Gitea + GitHub releases. -To build a redistributable, production mode package, use `wails build`. +--- + +## Logging + +- **Log4OM-style entry strip:** callsign, RST tx/rx, name/QTH/grid, band/mode, + TX/RX frequency (split), start/end time, comment/note. The contacted entity's + **flag** is shown large next to the RST fields. +- **Callsign lookup** (QRZ.com / HamQTH) with photo, auto-fill of name/QTH/grid + and the QRZ.com tab. +- **Offline DXCC** resolution from `cty.dat` (country, CQ/ITU zones, continent), + with `/MM` `/AM` and call-area (`/8`, `/W6`) handling, plus ClubLog DXpedition + date overrides. +- **Recent QSOs**, **Worked-before** matrix (per band/mode slot), bulk re-resolve + from cty/QRZ/ClubLog, bulk send to QSL services. +- **Profiles:** every setting is per-profile; each profile can point its logbook + at the local SQLite file or a **shared MySQL** database (multi-operator). + +## Maps & antenna + +- **Main view = two configurable panes** (per profile, Settings → General → + *Main view*): great-circle map, locator (street) map, the cluster grid, the + worked-before grid, or the **FlexRadio controls**. +- **Great-circle map** with short/long-path distance & azimuth, selectable + basemaps (Light / Voyager / Street / Satellite, all key-free and labelled) and + the **antenna beam lobe(s)** drawn from the rotor azimuth. +- **Rotor compass** (azimuthal-equidistant, click-to-turn) driven by PstRotator. +- **Ultrabeam** support (Normal / 180° reverse / Bidirectional): the radiating + direction is shown in green and the **mechanical boom** in grey, on both the + compass and the map, so you never lose track of where the antenna points. + +## DX Cluster + +- Multiple cluster servers with auto-reconnect, a master for commands. +- **Filter sidebar** (callsign search, hide-worked, group duplicates, band / + mode / status / source) shared by the Cluster tab and the Main-view cluster + pane, with a show/hide toggle. +- Per-spot **status** (new / new-band / new-slot / worked), click-to-tune the + rig, and a multi-band **Band Map** (panadapter-style strips). + +## CAT control + +- **OmniRig** backend (Rig 1/2, hot-swap), and a native **FlexRadio (SmartSDR)** + backend over the radio's TCP API — real-time slice freq/mode/split, auto + reconnect, UDP discovery, and **panadapter spots** (cluster spots pushed to the + Flex display, click → fill the call). +- Mode is taken from the radio; the digital sub-mode (FT4 vs FT8) is inferred + from the frequency. + +### FlexRadio control tab (SmartSDR-style) + +Shown only when the CAT backend is a FlexRadio: + +- **Transmit:** RF power, tune power, TUNE, MOX, speech processor (NOR/DX/DX+), + VOX (+ level + delay), monitor (+ level), mic gain. +- **Receive (active slice):** AGC mode/threshold, audio level, NB / NR / ANF. +- **Antenna tuner (ATU):** tune / bypass / memories. +- **Amplifier:** PowerGenius XL operate/standby + fault. +- **Live meters** over the UDP VITA-49 stream: S-meter (S-units), forward power + (W), SWR, ALC, PA temperature, voltage, plus the amplifier's meters. + +## Keyers & audio + +- **WinKeyer** CW keyer (macros, F-key macros, auto-call repeat). +- **Digital Voice Keyer** (DVK) message playback. +- **QSO audio recording** (SSB/DAX) archived per QSO; disabled for CW (no DAX + audio in CW). + +## QSL & awards + +- **Awards engine:** built-in + custom award definitions (shared **globally** + across profiles), worked/confirmed/validated by band & mode, OR rules and + manual reference assignment, live reference detection on call entry, and a + **Rescan** that re-pulls the logbook (picks up fresh LoTW/QRZ confirmations). +- **QSL services:** ClubLog (batched ADIF upload), LoTW, QRZ.com, eQSL — upload + and **confirmation download** (which auto-refreshes the award stats). +- **QSL Card Designer** (see below). +- **E-mail eQSL:** right-click a QSO → *Send eQSL by e-mail* via the configured + SMTP account. (Outlook/Hotmail disable basic-auth SMTP — use Gmail with an app + password, or a Microsoft app password.) + +## Multi-operator live status (special events) + +For a multi-op special-event call on a shared MySQL logbook (e.g. **TM74TFR**): +Settings → General → *Publish live operator status*. Each OpsLog instance +heartbeats its current activity (operator call, band, frequency, mode) into a +`live_status` table every ~15 s. A small PHP renderer +([`docs/livestatus/tm74-status.php`](docs/livestatus/tm74-status.php)) on your +own web server reads that table and produces a live page/image you can embed on +the station's **QRZ.com** bio (``). OpsLog +only writes to the DB — it is not a web server. + +## Other + +- **Autostart:** launch external programs (WSJT-X, JTAlert, rotator control…) at + OpsLog startup, skipping any already running. +- **Update check** at startup with a toast (toggleable). +- **Anonymous usage telemetry** (a once-a-day heartbeat: random install ID + + version + OS — no callsign or QSO data; opt-out in Preferences). + +--- ## QSL Card Designer @@ -40,3 +146,13 @@ Fonts: Archivo Black, Lilita One, Baloo 2, Oswald, Great Vibes, Allura (all OFL, embedded — licenses in `internal/qslcard/assets/fonts/`); Cooper Black is offered when MS Office installed it. Flags: flag-icons (MIT), embedded for the commonly-worked DXCC entities. + +--- + +## Data & storage + +- **Config** (settings, profiles, rigs/antennas, cluster nodes, lookup cache, + award lists, QSL templates) always lives in the local SQLite file under + `data/` — instant even when the logbook is on a far-away MySQL. +- **Logbook** (QSOs) lives where the active profile points it: the local SQLite + file or a per-profile shared **MySQL** database.