MK83TE · Bengaluru, Karnataka · Licenced 1993
Located in the garden city of India, Bangalore. Licensed since 1993, I started operations in Thrissur, Kerala with a simple homebrew QRP rig following VU2VWN OM Vasanth (SK)'s circuit — the most popular design of those days.
Later graduated to SSB with the help of an old exciter originally made by VU2UCY Om Bhasi (SK). Went through different iterations of 807 tube QRO and some military surplus gear (Redifone GR 345) during the 1990s. Shifted to Bangalore in early 2003.
I travel extensively for work and mostly operate remote during free time. The shack runs a fully automated setup including remote antenna switching and lightning protection.
/ui board. Thirteen collapsible cards (FlexRadio, LP-700, SPE amplifier, rotator, lightning protection, power control, solar conditions, DXCC tracker, RBN skimmer, Raspberry Pi fleet, internet health, GPS NTP, UberSDR receiver) lay out in a responsive masonry grid that adapts from phone to desktop with no build step. Each card polls flow context every 1–5 s, shows a colour-coded collapsed summary and expands for full telemetry. Top bar carries the callsign, a live/offline connectivity pill and four clocks (UTC / IST / sunrise / sunset). PWA-installable on iPad and iPhone via "Add to Home Screen"./ui board.nr_lightning_events.jsonl so history survives Node-RED restarts. 20-min auto-reconnect timer once the storm passes. On disconnect it also sends a transmit set inhibit=1 command to the FLEX-6600 over the SmartSDR API, so the rig can't key up into a disconnected antenna — SmartSDR shows a red TX-Inhibit indicator and a Telegram alert fires. The inhibit clears automatically on reconnect, manual override or bypass; the radio stays powered and RX-capable throughout.pps-gpio + chrony pulls PPS error down to ±171 ns — well below anything a userland NTP implementation can match. Publishes chrony status, satellite count and fix quality over MQTT to the shack dashboard, with an LWT offline marker. Production timeserver for the LAN.INIT (RFC 5905 §3.5) so clients cleanly fall back to other NTP sources rather than trusting a drifting local clock. Publishes status over MQTT with the same schema as the Pi NTP server and an LWT offline marker. WiFiManager captive-portal config — no compile-time secrets.vbat_mv on /hb + /status, on-demand query_vbat) is exposed over MQTT, so noise floor, watchdog threshold, TUN_CAP calibration and %SOC are all tunable live from the dashboard without opening the enclosure. WiFiManager captive portal carries WiFi and the shack broker's ACL-scoped iot MQTT credentials — no compiled-in secrets.p_out_avg (EMA, ~1 s settle) and p_out_peak (peak-hold, 600 W/s decay) travel alongside raw p_out, so a RAW / AVG / PEAK pill toggle on the shack dashboards reads meaningful values at CW-swing speeds without every client rolling its own filter. Interactive ./configure.sh lists the Pi's /dev/serial/by-id/ aliases for menu pick, walks through the optional Flex block, and preserves saved settings across re-runs; sudo ./install-service.sh --update re-configures and restarts the live systemd unit with a diff preview. Optional flex: config opens a second connection to a FlexRadio 6000-series rig over the SmartSDR TCP API and orchestrates an SM5TOG-style ATU tune plus the full sub-band SWEEP; leave flex.host empty and the server auto-discovers the radio via SmartSDR's UDP broadcast on port 4992. All four UIs (MacExpert, the bundled dashboard, Node-RED /ui, Vue /shack) receive the same tune_event stream. Based on original work by OH2GEK, rewritten and extended.tune_band orchestrator over WebSocket — band picker, progress bar, Stop — reading the shared tune_event phase stream. Amp-powered-off banner dims the panel and blanks status chips when the FTDI link stays up but the amp CPU is off. Auto-ranging QRP power meter (5 / 25 / 50 / 100 / 200 W) for STANDBY / TX-bypass drive readings. Universal binary (Apple Silicon + Intel), Developer-ID signed + Apple-notarised; the same release script also packages an ExtensionKit .radioplugin for Amateur Radio Suite. Named after and inspired by the original MacExpert by Georg Isenbürger DJ6GI/NZ1C; RCU protocol reverse-engineered from scratch by VU2CPL..app; the suite loads it through the RadioPluginKit contract — the host links only the contract, never compiles a plugin in. Plugins are discovered at runtime (browse a catalog or sideload a .radioplugin) and run out-of-process as sandboxed ExtensionKit extensions, so crash isolation is real and adding one never requires rebuilding the suite. Ships with an empty catalog: published plugins today are LP-700, LP-100A, Band Pass Filter and Antenna Switch; SPE amplifier (MacExpert) and SO2R Box are next. Notarized release pipeline, macOS 14+. Original concept and reference implementation by Vinod VU3ESV — upstream at VU3ESV/AmateurRadioSuite.state + heartbeat events over /ws, /healthz endpoint, all writes serialised through one lock so poll queries and client commands never interleave on the wire.SO2RBox.exe and cross-checked against N4AF's TR4W uYCCCSO2R.pas.? pair each for IOTA, WAS, VUCC and WAZ, and the DX Marathon — and get their own Telegram alerts, with a history of what was actually sent, over the same shared spot stream. A match can be marked on the radio as well as sent to a phone: FlexRadio panadapters over SmartSDR and ExpertSDR3 over TCI, several of each per account. DXCC Challenge points and band×mode slot totals per station, per-band and per-mode entity breakdowns, LoTW uploaders flagged from ARRL's list, and each account's ClubLog log plus the shared LoTW list re-downloaded on a schedule. Five awards beyond DXCC are opt-in per account and add nothing anywhere until ticked — IOTA from a spot's own comment, checked against the directory; WAS from the FCC licence database; VUCC grids on 50 MHz and up; WAZ's forty zones; and the DX Marathon's score for the current year — and which WAS or WAZ you are chasing (mixed, per band, or each mode) is itself a setting, because it changes what wakes you rather than only what is shown. Confirmations ride an optional LoTW QSL-report download, except zones, which score off the QSL flags ClubLog's export already carries. Where a cluster comment omits the mode, it is inferred from an IARU Region 3 band plan and marked as inferred rather than asserted — an unknown mode is never quietly filed as digital. Live WebSocket dashboard on a three-tab shell — Spots, Alerts, Stats — with everything you configure behind a gear: sources, nodes, destinations, MQTT, accounts and a server-wide call blacklist, all edited in the browser with hot-apply. Both spot tables share one fixed, measured column grid, so a column lands in the same place on every row while the stream runs, and each screen's narrowing sits in a collapsible rail that still reports how much it is holding back when folded. An optional band mask recedes bands the sun says are not workable from your Maidenhead square — dim or hide, around a tunable grey-line window, and New DXCC is never masked. Stats shows what the live feed is made of beside your own ClubLog totals, with Club Log's DX Dashboard embedded alongside them and an awards view — WAS endorsements per band and per mode with a Triple Play worklist, zones worked and confirmed, islands, grids and the Marathon year, each with a still needed list. Installs as a systemd service (Pi), a launchd agent (macOS) or — new in v2.2.0 — a boot-started scheduled task on Windows from a prebuilt .exe + installer shipped as a release asset, each through an installer that checks its own prerequisites and then verifies the result is genuinely serving; behavioural parity with the macOS app proven by golden tests against its own artifacts. Supersedes the macOS DX Cluster Aggregator (final release v1.8.4, retained as fallback). Original concept and reference implementation by Vinod VU3ESV; the DX-cluster telnet engine and the web GUI's design system are derived from the Meridian project (joint work with Basil Thomas W6BT and Ram VU3RDD).host_processor_info CPU sensor, dark theme, app icon, font defaults. User state lives under ~/Library/Application Support/MSHV/ — replace the bundle and callsign, QSOs, logs and WAVs stay put. Developer-ID signed + Apple-notarised, so Gatekeeper passes without the right-click dance. Patches sit on a _MACOS_-conditional macos-port branch on top of upstream main, so Linux and Windows builds remain untouched and new LZ2HV releases merge cleanly.wsprd), and an NCDXF beacon watcher. Decoded spots flow through a per-mode refinery and a plugin-based gate to internal + external DX-cluster telnet feeds, PSKR + WSPRnet uploads, and a durable SQLite spot store; external-cluster spots relay back in through the same gate. Every configuration change is applied live across the system — no restarts. Three config layers: bootstrap TOML (bind addrs + which web UI to serve), a system-wide config.json (device / external-cluster / band-plan / calibration inventories), and switchable JSON profiles (operator identity, devices in use, decoders, gate policy, feeds). Ships with a Svelte 5 + TypeScript web UI on port 7374 (i18n en / de, light / dark). RBN upload is deliberately external — a separate rbclient app consumes the byte-stable Aggregator-dialect telnet feed. Deployed as the station daemon on a Raspberry Pi 5 driving the Red Pitaya as VU2CPL-9 (10 bands, 8 RX @ 192 kHz, greyline-masked), with idle release builds also running on Mac, Windows, and the UberSDR box. A joint project, built together with Basil Thomas W6BT (upstream repo owner), Vinod VU3ESV, and Ram VU3RDD.gpsd + chrony stack turns the Mac itself into a stratum-2 NTP server for the rest of the shack; a small privileged helper daemon lets the app talk to chrony without sudo each time./CQ, preamble and watched callsigns, so an operator who knows one client can read the other. Grid squares and frequencies are picked out inside message text. Alert sounds fire whether or not the app is in front — the case a notification banner cannot cover — and mentions raise a banner when it is not. A built-in DX-cluster node re-serves the chat's spots on a LAN port, so DXCA or any cluster client dials it as one more node and receives them verbatim, unparsed. The whole telnet protocol was reverse-engineered from packet captures of the live service rather than from documentation, which turned out to be wrong about the room list, the timestamp format, the command rate limit and more; docs/PROTOCOL.md in the repo records what is captured versus what is still inferred. Universal binary (Apple Silicon + Intel), Developer-ID signed and Apple-notarised. Named after and modelled on KST2Me by Bo OZ2M, the long-standing Windows client; the protocol work here is original, but the interaction design and the highlight conventions follow OZ2M's manual.Contents/MacOS/. Slimmed from ~1.3 GB to 253 MB by stripping unused Qt frameworks, qml, translations, metatypes, and lipo-thinning every Mach-O binary to arm64. A macOS UI sizing patch relaxes upstream's hard-coded setFixedHeight/Width calls so Qt stops clipping label text on native macOS control chrome (50kHz→50kH, Sweep→Sweer, Rescan→Rescar). Ships with a hand-drawn 1024 px macOS-style .icns (rounded square + Smith-chart logo) in place of the upstream 128 px fallback. Logs to ~/Library/Logs/NanoVNASaver/nanovnasaver.log for easy support.vu2cpl.tunnel.ubersdr.org. UberSDR by M9PSY (madpsy), built on Phil Karn KA9Q's ka9q-radio engine; the receive antenna is Chavdar Levkov LZ1AQ's active loop design.For sked requests, email via QRZ or WhatsApp. For QSL, use LOTW or Clublog OQRS — no bureau. 73 de VU2CPL.