Skip to content

Releases: fact0real/yaam

YAAM 1.37.37: Upload privacy safeguards, active station filtering, and platform stability fixes

Choose a tag to compare

@fact0real fact0real released this 18 Oct 07:06

YAAM 1.37.37 introduces positive ADIF field allowlists for online logbook uploads, granular Data Safety privacy controls, active station callsign filtering, and extensive platform and DSP stability fixes.

Highlights

  • Positive Upload Allowlist (Patch 61): Uploads to QRZ, eQSL, Club Log, HRDLog, HamQTH, Wavelog, and LoTW now use strict per-service allowlists. The other station's personal data (email, address, notes, biography, precise coordinates) and your own street address/exact coordinates are excluded by default.
  • Three Granular Privacy Opt-Ins: Added configurable switches under Settings → Data Safety:
    1. Upload other station's name and QTH (default: OFF).
    2. Upload contact details and precise locations (default: OFF).
    3. Upload comments and QSL messages (default: OFF; internal tags are always stripped).
  • Active Station Callsign Boundary: Online synchronization (QSL Hub Sync All / Selected, Wavelog full sync) now uploads only QSOs matching the active station's callsign. Historical or imported QSOs under other callsigns remain safe in the local log and are cleanly skipped with reported counts.
  • Wavelog Connection & Rights Test: New non-mutating check_auth test distinguishes read-only from read/write API keys, warning before upload attempts fail. Modern endpoints (api/qso, get_contacts_adif, station_info) are now used.
  • Strict TQSL Verification: Only exit code 0 marks an entire batch as uploaded. Diagnostic codes 8, 9, and 14 leave QSOs unmarked and present TQSL diagnostic messages for operator review. Temporary files are signed inside an isolated 0700 sandbox directory.
  • Digital Suite & DSP Improvements:
    • Standardized PSK31 Varicode to the 128-character G3PLX specification, eliminating duplicate codes.
    • Corrected Hellschreiber fractional sample accumulator to achieve exact 245 pixels/s reception at 44.1 kHz and 48 kHz.
    • Buffered streaming RTTY/PSK characters to decode callsigns on complete word boundaries.
    • Inhibited unconfigured digital audio playback before PTT keying to prevent invalid RF transmission.
    • Applied calibrated +0.66 s DT timing offset to FT8 decodes and normalized weather queries to coarse 4-character grid locators.
  • Radio & CW Safety:
    • 200 ms connection loss detection during CW transmission immediately cancels ON AIR status and Auto-CQ.
    • Connected rigctld instances default to the shared client without requiring Operator Desk to be opened first.
  • Hardening & Security:
    • Removed get-task-allow debugger entitlement from Release builds and disabled base entitlement injection.
    • Documented full entitlement inventory in DEVELOPER_DOCUMENTATION.md.
    • Replaced silent ADIF auto-save failures (try?) with surfaced I/O error reporting and serialized disk writes.
    • Required explicit in-band frequencies for contest quick-logging.
    • Removed legacy demonstration callsigns and seed entries from club memberships, call history, and SCP engines.

Verification & Regressions

  • Full upload privacy suite (19 allowlist + 52 switch + 100 sync regression checks) passed.
  • Digital receive review, CW connection loss, FT8 timing calibration, and workspace review regressions passed.
  • Release entitlements regression passed with code-signed sandbox validation.
  • Native arm64 macOS Release build succeeded with 0 compiler warnings/errors.

Acknowledgments

Special thanks to EA3JIC for patch 61, regression suites, and detailed technical review notes.

v1.17.4 (Build 62)

v1.17.4 (Build 62) Pre-release
Pre-release

Choose a tag to compare

@fact0real fact0real released this 21 Aug 16:32

Changelog

All notable changes to YAAM are documented in this file.

YAAM is a macOS-native Amateur Radio logbook manager focused on protected local storage, ADIF interoperability, operating workflow, QSL confirmation intelligence, award progress, and station-aware tools.

[1.17.4] - 2026-08-21

Highlights

This release improves day-to-day usability of large logbooks. Log Table scrolling is substantially lighter, filter results follow a predictable UTC date order, internal record numbers no longer clutter the table, and the Help experience is easier to search and navigate.

Improved

Log Table Performance

  • Reworked Log Table scrolling to use a single lazy two-axis table surface.
  • Removed per-row geometry calculations previously used to keep the left control area pinned.
  • Reduced rendering work for large Master Logs, improving vertical and horizontal scrolling responsiveness.
  • Kept the table header visible while scrolling.
  • Replaced the wide leading row-number area with a compact selection and delete control area.
  • Preserved all internal record identifiers in the protected database; only their visual display was removed.

Leaderboard Performance

  • Switched major Leaderboard content stacks to lazy rendering.
  • Limited rank-chart rendering to the latest 90 visible days.
  • Reduced chart point and layout work when a station has a long rank-history archive.
  • Preserved full stored history while optimizing only the visual presentation.

Filtering Workflow

  • Applying filters now automatically orders matching QSOs by QSO_DATE and TIME_ON in descending UTC order.
  • Added visible guidance in the Filter window so operators understand that filtered results are shown newest first.
  • Filtered results remain non-destructive: applying or resetting filters never modifies QSOs, confirmations, enrichment data, or database records.

Country and Entity Display

  • Improved visual distinction between Greece and Crete.
  • Crete is now represented as 🇬🇷◈, retaining its Greek association while clearly identifying it as a distinct operating/entity label in YAAM views.

Help Center

  • Added Help search for faster access to relevant operating guidance.
  • Added a dedicated Log Table & Filters guide covering:
    • Large-log browsing
    • Search and filtering
    • UTC date ordering
    • Column visibility
    • Hidden-versus-deleted data behavior
    • Confirmation filtering
    • Persistent station-specific table layouts
    • Internal database identifiers and why they are not shown in the table
  • Expanded guidance around safer high-volume log review and column management.

Changed

  • Removed the visible database row-number column from Log Table.
  • Updated context-menu language from row-number-based actions to QSO-based actions.
  • Reduced the width of the leading table control column.
  • Retained row selection and deletion actions through compact icon controls with tooltips.

Fixed

  • Fixed visual ambiguity where Crete and Greece used the same flag display.
  • Fixed filtered result ordering being dependent on the previously active table sort.
  • Addressed unnecessary layout cost that could make large log tables feel sluggish.
  • Addressed unnecessary chart rendering cost that could make Leaderboard scrolling less responsive.

Current Feature Set

Logbook and Data Safety

  • Protected SQLite-backed Master Log storage.
  • Station-profile-aware logbooks for home, portable, club, remote, and historical operations.
  • ADIF import, export, conversion, filtering, and CSV/Excel output.
  • SmartSDR / SDR-Control log import support.
  • Duplicate detection, review, and protected import workflow.
  • Automatic restore points and database safety tooling.
  • Hidden-column policy that keeps operational fields stored without overwhelming the daily table view.

QSL and Confirmation Intelligence

  • QRZ Logbook confirmation synchronization.
  • LoTW confirmation synchronization.
  • Incremental and full-history confirmation rebuild workflows.
  • Confirmation reconciliation for identifying matched, unmatched, ambiguous, and missing records.
  • QSL card generation and mail workflows.
  • Batch QSL-card sending for confirmed QSOs.
  • Reminder workflows for recent unconfirmed QSOs.
  • QRZ incoming confirmation-request review and missing-QSO follow-up email drafting.

QRZ, Awards, and Rankings

  • QRZ login workflow with protected session handling.
  • QRZ award loading with achieved awards, progress, and achievement display.
  • Award cards with completion states and progress indicators.
  • QRZ global rank enrichment for QSO, Bands, and DXCC rank metrics.
  • Rival comparison and tracked callsign history.
  • Daily rank-history refresh and configurable rank backfill workflow.
  • Rank momentum feedback showing relative improvement or lost ground against tracked rivals.
  • QRZ rank congratulation and QSL-request email template support.

Operator Desk

  • Quick Log workflow with callsign lookup and duplicate awareness.
  • QRZ and HAMQTH enrichment support.
  • Worked history, same-band/mode context, and confirmation awareness.
  • DX Cluster connection and spot intelligence.
  • Rig control through Hamlib rigctld.
  • WSJT-X and JTDX UDP integration.
  • Contest Workspace with serial tracking, duplicate awareness, ADIF contest fields, and Cabrillo export.
  • Portable activity support.
  • Cloud and mobile companion features.

Contest, DX, and Propagation

  • Contest calendar with cached schedule support.
  • Contest-interest settings and relevance highlighting.
  • DXpedition watch with active-spot awareness.
  • 6m / Magic Band monitoring.
  • PSK Reporter and propagation context.
  • Middle East and Iran-adjacent propagation awareness.
  • VHF and E-skip propagation display.

Statistics and Planning

  • Total, confirmed, and unconfirmed QSO statistics.
  • DXCC and confirmed-DXCC totals.
  • Worked and confirmed 4-character Maidenhead grid totals.
  • Band and country breakdowns.
  • Unconfirmed DXCC analysis.
  • Award and operating-progress summaries.

Upgrade Notes

  • Existing Master Log data remains intact.
  • Internal QSO identifiers are still retained in the database even though they are no longer displayed in Log Table.
  • Existing column preferences remain station-specific.
  • After upgrading, open Help > Log Table & Filters for the updated table, filtering, and column-visibility guide.
  • For a complete confirmation refresh after changing station identity or credentials, use the Full QSL History workflow.

Build Information

  • Version: 1.17.4
  • Build: 62
  • Platform: macOS

v1.7.0: YAAM Confirmation Sync and Feature Updates

Choose a tag to compare

@fact0real fact0real released this 14 Aug 02:18

Recent Development Update

Added

  • QRZ Logbook confirmation sync alongside LoTW confirmation sync.
  • QRZ confirmed QSO parsing from QRZ Logbook API ADIF responses.
  • DX Advisor “Callsigns With No Confirmed QSOs” follow-up workflow.
  • One-click QRZ email lookup from DX Advisor.
  • Multi-QSO confirmation request emails with full unconfirmed QSO details.
  • Bulk QSL email sending with recipient selection.
  • Duplicate email warning based on previous email history.
  • APP_YAAM_LAST_EMAIL table column showing last email date, status, and subject.
  • SDR-Control SmartSDR.smartsdrlog direct import.
  • Periodic SDR-Control sync from Settings.
  • External ADIF periodic sync for WSJT-X, JTDX, GridTracker, Log4OM, N1MM, and similar apps.
  • DX Advisor propagation panels for HF, VHF, solar indices, and geomagnetic data.
  • Audible success/failure feedback for major actions.

Changed

  • Moved SMTP/email settings from Log Table Viewer to Settings > Email.
  • Removed SMTP button from the Log Table toolbar.
  • Improved QRZ confirmation sync with a separate QRZ sync timestamp.
  • Improved QRZ API parsing for escaped ADIF payloads.
  • Improved email templates for confirmation requests.
  • Improved default Log Table visibility by hiding low-value columns.
  • Moved MY_* and APP_LOTW_* columns behind optional display controls.
  • Bulk email now plays one final result sound instead of one sound per recipient.

Fixed

  • Fixed QRZ confirmations not being applied to table rows.
  • Fixed QRZ API responses being misread as errors when ADIF was HTML-escaped.
  • Fixed QRZ email decoding from encoded qmail values.
  • Fixed QRZ email values containing trailing mailto.
  • Fixed missing VHF propagation display values from HamQSL.
  • Fixed repeated email sends without warning.
  • Fixed SDR-Control iCloud permission and plist parsing issues.
  • Fixed background-thread publishing warnings during model updates.

Technical

  • Added centralized activity sound handling in AppState.
  • Added QRZ Logbook API response parser.
  • Added QRZ/LoTW confirmation cache updates.
  • Added persisted email history storage.
  • Added SDR-Control binary plist parser and ADIF field mapper.
  • Added periodic sync timers for SDR-Control and External ADIF.

v1.3.0 — Master Logbook Engine & Targeted Enrichment

Choose a tag to compare

@fact0real fact0real released this 09 Aug 19:39

YAAM (Yet Another ADIF Manager) has evolved from a lightweight ADIF viewer into a centralized Master Logbook Database Engine. This release introduces targeted multi-row enrichment, dual-cloud QSL synchronization with LoTW & QRZ, full historical log downloads, and crucial network sandbox fixes on macOS.


🌟 Key Highlights

  • Master Logbook Workspace Architecture: Automatically loads your callsign-specific master database on launch, isolating your primary logbook from temporary "Guest" logs.
  • Smart Merge & Deduplication: Prevents duplicate QSO records using a 5-part composite unique key (CALL + QSO_DATE + TIME + BAND + MODE).
  • Targeted Enrichment (Max 19 Rows): Select specific rows via checkboxes (capped at 19 rows per batch), enrich individual callsigns from the context menu, or cancel in-flight tasks instantly.
  • Dual Cloud QSL Sync: Simultaneously fetches incremental QSL confirmations from both ARRL LoTW and QRZ Logbook API.
  • Full Cloud History Importer: Downloads 100% of your historical QSOs from LoTW and seamlessly merges them into your Master Logbook.
  • macOS Sandbox SMTP Fix: Resolves curl Error 6 (Could not resolve host) inside the macOS Sandbox, sanitizes Google App Passwords, and provides a live debug terminal.
  • Direct QRZ Profile Link (QRZ_URL): Dynamically generates clickable profile links (https://www.qrz.com/db/CALLSIGN) that open directly in your default browser.

🛠️ Technical Changelog

🏗️ 1. Core Architecture & Persistence

  • Multi-Profile Support: Isolated database storage located at Application Support/YAAM/MasterLogs/MasterLogbook_\(callsign).adi.
  • Context-Aware Auto-Save: Implemented autoSaveActiveWorkspace for background persistence of cell edits, row deletions, and enrichment flags directly to the active file workspace.
  • Import Strategy Modal: Added a native NSAlert prompt upon opening new files offering "Merge into Master Log" or "Open as Guest Log".

🪄 2. Targeted Enrichment Engine

  • Delta Enrichment (APP_YAAM_ENRICHED): Flags processed records to skip re-fetching previously enriched callsigns, accelerating batch processing.
  • Multi-Row Selection Limit: Enforces a strict selection limit of 19 rows per batch with a native alert warning if exceeded.
  • Task Cancellation: Integrated stopEnrichment using Swift Concurrency's Task.cancel() for instant user-initiated cancellation.
  • Auto-Deselect: Automatically clears row checkmarks once enrichment completes to optimize UX.
  • Right-Click Context Menu: Added 🪄 Enrich Callsign 'CALL' to enrich single callsigns directly from the table grid.

🔄 3. Cloud Synchronization & APIs

  • QRZ Logbook API Integration: Fully implemented HTTP FETCH against QRZ's official Logbook API (https://logbook.qrz.com/api) with MODIFIEDSINCE timestamping.
  • Flexible Matching Engine: Enhanced cleanDate and cleanBand normalizers to reliably match mismatched ADIF fields between local records and server reports.
  • Full Cloud Importer: Rebuilt fetchAndManageCloudLogbook using qso_qsosince=1900-01-01 to pull 100% of historical QSOs from LoTW, complete with confirmation dialogs.

📧 4. Sandbox Networking & SMTP

  • Sandbox Environment Injection: Injected ProcessInfo.processInfo.environment into the child /usr/bin/curl process to grant DNS resolution access within the macOS Sandbox.
  • App Password Sanitizer: Automatically strips white space characters from 16-character Google App Passwords.
  • Sender Callsign Sanitization: Corrected the callsign resolver algorithm to prevent email addresses from populating template callsign placeholders.
  • Inline Debug Terminal: Added a live terminal log view to inspect connection handshakes and server response codes in case of SMTP failures.

🎨 5. UI/UX Enhancements

  • Deep Link Renderer: Dedicated rendering for the QRZ_URL column featuring a Safari icon, underline styling, and native browser launch via NSWorkspace.shared.open.
  • Dynamic Row Highlighting: Selected rows are highlighted with a distinct accent background color.
  • Status Bar Selection Counter: Real-time feedback in the bottom status bar displaying Selected: X / 19 Max.

🐛 Bug Fixes

  • 🔴 FIXED: Log data loss occurring after quitting and reopening the application.
  • 🔴 FIXED: curl Error 6 (Could not resolve host) during SMTP email dispatch inside the macOS Sandbox.
  • 🔴 FIXED: Station email address overriding callsign placeholders in email templates.
  • 🔴 FIXED: Sync QSLs button failing to update QRZ confirmations and displaying inaccurate confirmed counts.
  • 🔴 FIXED: Cloud Logbook button restricting downloads to only recent 30 QSLs rather than fetching full history.

v1.2.0 — Authenticated QRZ Email Scraper, Bulk Log Enrichment & Native SMTP Client 🚀

Choose a tag to compare

@fact0real fact0real released this 09 Aug 11:30

What's New in YAAM v1.2.0 🚀

Version 1.2.0 is one of our biggest updates yet! This release introduces Automated Bulk Log Enrichment, Native In-App SMTP Email Dispatching, and a breakthrough WebKit-based QRZ Email Scraper that seamlessly bypasses Cloudflare protections and dynamic DOM anti-scraping mechanisms.


✨ Key Highlights & Features

📧 1. Authenticated QRZ Email Scraper & Cloudflare Decryptor

  • Dynamic #qem Event Triggering: Automatically interacts with QRZ’s protected <span id="qem"> element by executing showqem() and dispatching synthetic DOM mouseover/click events to reveal hidden emails.
  • Native WebKit Integration (WKWebView): Runs an in-memory macOS WebKit engine that shares cookies (WKWebsiteDataStore.default()), bypassing Cloudflare TLS fingerprinting, CAPTCHA challenges, and anti-bot blocks.
  • Cloudflare Email XOR Decryptor: Built-in algorithm to decode hex-encrypted email attributes (data-cfemail and email-protection#HEX) on profiles using Cloudflare obfuscation.
  • MFA / 2FA Login Support: Embedded native browser sheet allowing operators to securely log in to QRZ.com with full Multi-Factor Authentication support.

📊 2. Bulk Log Enrichment Engine

  • One-Click Data Enrichment: The new 🪄 Enrich Data toolbar button automatically fetches global standings and emails for all unique callsigns in your loaded ADIF logbook.
  • Real-Time QRZ Ranks: Dynamically appends and renders RANK_QSO, RANK_BAND, and RANK_DXCC columns directly inside the spreadsheet viewer.
  • Color-Coded Rank Badges: Visual distinction for QSO (Blue), Band (Orange), and DXCC (Green) rankings.
  • Instant UI Column Injection: Guaranteed thread-safe header re-rendering on the Main Thread (@MainActor).

✉️ 3. Built-In Native macOS SMTP Email Client

  • Zero External Dependencies: Uses macOS native /usr/bin/curl under the hood for encrypted SMTP/SMTPS transfers (supports Gmail, Outlook, custom servers).
  • Interactive Email Hyperlinks: Clicking any blue email address in the table view instantly opens the Email Composer Sheet.
  • Pre-Configured Template Engine:
    • 🎴 QSL Requests: Exchange QSL cards via Bureau or Direct.
    • 🗓️ Sked Requests: Schedule band/mode contacts for rare DXCC entities.
    • ☁️ LoTW Reminders: Polite upload reminders for unconfirmed QSOs.
  • Dedicated SMTP Settings Panel: Configure server host, TLS port (465/587), username, and App Passwords safely.

🛠️ Improvements & Bug Fixes

  • Structured Async/Await Refactoring: Converted multi-step API and WebKit workflows to Swift’s modern concurrency model (Task, async/await, withCheckedContinuation), eliminating background thread crashes (pid failure) and UI deadlocks.
  • AppKit NSAlert Migration: Fully replaced buggy SwiftUI alert modifiers with native macOS NSAlert modal windows to prevent window layout collapse.
  • SF Symbols Fix: Replaced legacy SF Symbol names with native Mac symbols (arrow.clockwise.icloud).
  • Optimized Scraping Delays: Gentle 0.5s inter-request throttling to protect your IP from rate limits.

🛠️ Installation & Upgrade

  1. Download YAAM.dmg or YAAM.zip from the Assets below.
  2. Drag YAAM.app into your /Applications folder (replacing the previous version).
  3. Open YAAM and click Enrich Data to automatically fetch ranks and emails!

v1.1.0 — Real-Time QRZ Leaderboard VS Mode & Standalone Cloud Logbook 🚀

Choose a tag to compare

@fact0real fact0real released this 08 Aug 10:02

What's New in YAAM v1.1.0 🚀

We are thrilled to announce YAAM v1.1.0, featuring major breakthroughs in cloud synchronization, real-time leaderboard analytics, and a polished macOS native UI!


🏆 1. Full-Page QRZ Global Leaderboard & Head-to-Head (VS Mode)

  • Dedicated Leaderboard Tab: Search any ham radio callsign to instantly view their real-time global rankings.
  • Head-to-Head Comparison (VS Mode): Compare your station's global rank against any rival operator side-by-side!
  • Smart Rank Delta Badges: Calculates rank differences and score gaps in real-time across QSO, Band, and DXCC categories via qrz-rank.asis.sh.

☁️ 2. Standalone Cloud Logbook Fetcher

  • No Local File Needed: Download your entire historical logbook directly from LoTW/QRZ servers.
  • Incremental Offline Sync: Automatically saves an offline copy (MyCloudLogbook.adi) and appends only new QSO records during subsequent syncs.

🍏 3. Refined Native macOS Experience

  • Native AppKit NSAlert Engine: Replaced SwiftUI alert modifiers with robust macOS NSAlert windows, resolving layout collapse bugs and providing direct release links.
  • Redesigned About Window: Added a native Apple-style About dialog featuring clickable repository links and station metadata.
  • Persistent QSL Match Caching: Fast offline cross-referencing against your local confirmed_cache.json database.

🛠️ Installation

  1. Download YAAM.dmg or YAAM.zip from the assets below.
  2. Drag YAAM.app to your /Applications folder.
  3. Launch YAAM and configure your Station Callsign in Preferences (⌘,).

Developed with ❤️ by EP2AES (fact0real)
GitHub Repository: https://github.com/fact0real/yaam