How I Built the Tava One Ecosystem: Field Station to Content Machine
- 18 min reading time
A note before we start: Tava One has been an evolving build. Some of what's described here reflects earlier configurations — gear and tools have been updated along the way. Where something is historical, it's labeled. The stack table at the end reflects current state as of June 2026.
Most ham radio content sites are either a WordPress blog from 2009 or a Facebook group with no archive. I wanted something different — a real content brand built on a modern stack, with a newsletter, affiliate monetization, and a field workflow that generates blog posts and social content automatically from every activation. What started as a Shopify store rebuild turned into a connected ecosystem of custom tools, serverless infrastructure, and a content pipeline that runs almost entirely on its own once I hit the field.
This is the full build log. If you're a ham who also comes from an IT or web background — and there are more of us than people realize — this is the post you probably wish existed somewhere.
Want to see the full architecture in an interactive format? There's a companion presentation that walks through every layer of the stack with diagrams, data flow charts, and the complete gear and tools table. View the Tava One Build Presentation →
The Pivot
Tava One didn't start as a ham radio site. The store had a prior life selling other things entirely. At some point I made a decision that's harder than it sounds: burn the old content to the ground and rebuild around what I actually care about.
That meant stripping the product catalog, gutting the blog, and rebuilding the site identity from scratch. New pages, new navigation, new theme customization, new everything. The core brand became what it is now — GrumpaGrinch on the air, POTA activations out of Tampa Bay, Florida, digital modes, gear, and the occasional philosophical tangent about why anyone in their right mind drives to a state park at 6 AM to make radio contacts.
The site runs on Shopify with the Xtra theme, organized into three blogs: Field Operations for activation reports, Gear Reviews for equipment coverage, and The Shack for technical and behind-the-scenes content like this post.
The Field Station
Every blog post, TikTok, and social update starts here — in a park, with a 5-watt radio and a Raspberry Pi. The field station is the source of everything, so it has to be reliable, fast to deploy, and capable of generating clean loggable data.
The primary radio is the Xiegu X6200 — a 5W QRP transceiver with a built-in ATU and USB CAT/audio control over a single cable. That USB connection is the key design decision: no interface boxes, no level matching hardware. The DigiPi sees the radio as a standard USB sound card and serial port. WSJT-X running on the Pi talks to the X6200 for frequency and PTT, reads and writes audio through the same connection.
The Pi runs DigiPi, a purpose-built Raspberry Pi image for portable digital modes. WSJT-X is pre-integrated into the web menu, so operating from the field means pulling up the DigiPi interface on a phone or tablet and clicking a button. FT8 on 20 meters is the primary mode.
The current field antenna is the Radioddity HF-010, which replaced an earlier JPC-12 telescoping vertical setup. The HF-010 has been the antenna through the most recent run of activations — a full review is in the Gear Reviews blog.
Field power went through two generations. The original build was a DIY ammo can: four LiFePO4 8Ah cells wired in parallel for 32Ah total capacity, with a voltmeter display, 12V cigarette lighter socket, USB-A, USB-C, a master rocker switch, and Anderson Powerpole connectors. Version two kept the same electrical design but moved everything into a 50L waterproof tactical backpack — two LiFePO4 8Ah cells in parallel inside the pack, with a 3D-printed MOLLE-clipped panel box on the exterior housing the master switch, QC 3.0 USB, USB-C PD with voltmeter, and the Anderson Powerpole socket. One carry unit, fully self-contained, waterproof. Setup time for the whole station is 15–30 minutes.
Activate: Where the Data Pipeline Starts
The content workflow runs on data captured in the field. That data needs to be clean, structured, and in the right place before anything else can happen downstream. That's what TavaOne Activate was built for.
Activate lives at activate.tavaone.com — a browser-based, mobile-friendly field activation logger built specifically for POTA, SOTA, WWFF, IOTA, and general portable operation. Sign in with Google and your data saves to your own Google Drive. No app install, no ads, no third-party server holding your logs.
Setting Up an Activation
Everything starts in the Field Notes tab. Before heading out, you fill in the activation details: type (POTA, SOTA, WWFF, IOTA, or Other), park reference, park name, date, callsign, start and end times in UTC, power level, rig, antenna, weather — which auto-fills from your current location — band conditions, and a narrative field. There's also a "Would activate here again?" toggle built right in, with Yes / Maybe / No options. These details become the skeleton of the blog post.
Logging Contacts
The Logger tab handles QSO logging with fields for callsign, band, mode, RST sent and received, frequency, name, grid, SIG reference (for the contact's park or summit), and notes. The 10-contact POTA minimum is tracked live with a counter at the top of the screen — and when you hit it, you get a small celebration. Default band and mode are configurable in Settings so you're not reselecting FT8 and 20 meters on every single entry.
WSJT-X Integration: The Live Feed
This is the part that closes the loop on the whole field station. In the Settings tab, Activate provides a personal bridge endpoint — an IP address and port that's permanently assigned to your account. You point WSJT-X's Secondary UDP Server at that endpoint (File → Settings → Reporting), and from that point on every QSO logged in WSJT-X auto-imports directly into your active Activate session in real time. No scripts, no extra apps, no copying files manually between programs.
This means the live ADIF log in Google Drive is being written continuously during the activation — not exported at the end, but updated with every single contact as it happens. By the time you pack up the antenna and drive home, the complete log is already sitting in your Drive folder.
Submit and Export
When the activation is complete, hitting Submit & Export in Field Notes does three things: generates the .adi ADIF file, generates the field_notes.md file with all the activation details and narrative, and saves both to a dated folder in your Google Drive automatically. If Drive isn't connected, both files are available for manual download and upload later.
That folder — with the field notes file and the live ADIF log — is exactly what the content workflow reads when you get home.
The Home Shack Data Bridge
While the field station is running, a second data stream flows back to the home shack. WSJT-X broadcasts real-time decode data over UDP — every contact, every heard station, everything. A Python script running on the home PC listens on one port, receives each UDP datagram from the field, and fans it out simultaneously to DX Lab Suite, GridTracker 2, SpotCollector, and the logger. Port numbers are omitted here for security, but the architecture is straightforward: one incoming stream cloned to multiple consumers.
FT8 UDP packets are tiny — even a cellular connection handles this without a hiccup. The result is that the home shack logging stack behaves as if the radio is sitting on the desk, even when it's operating from a park bench twenty miles away.
The Website Stack
Shopify + Xtra Theme
Shopify handles the storefront and blog infrastructure. The Xtra theme is customized with CSS injected through the Theme Settings Custom CSS block rather than editing theme.liquid directly — that approach survives theme updates without breaking anything. Font sizing, line heights, and content container styles all live in that single injection point.
The nav organizes cleanly into the three blog tracks plus static pages: About, My Gear, My POTA Field Kit, and Subscribe. Affiliate links for Radioddity gear are embedded throughout the gear pages and blog posts — the Xiegu X6200 and Radioddity HF-010 are always linked by name with code W4GGJ for $15 off.
Beehiiv Newsletter
The newsletter runs on Beehiiv's free tier. After evaluating Klaviyo and Kit (formerly ConvertKit), Beehiiv won on two points: the API works on the free tier, and the subscriber experience is cleaner. Setup includes six custom boolean interest fields — interest_pota-activations, interest_gear-reviews, interest_ft8-digital, interest_diy-builds, interest_florida-parks, and interest_beginner-ham-radio — so every subscriber is tagged from day one based on what they care about.
The signup form is a custom HTML/CSS/JavaScript widget with green accents and interest checkboxes mapped directly to those Beehiiv fields. The welcome email fires immediately on subscription and delivers the lead magnet: the POTA Go-Bag Checklist PDF. Subscribe at tavaone.com/pages/subscribe.
The Cloudflare Worker Proxy
The custom signup form surfaced a real engineering problem. Posting directly to the Beehiiv API from a browser exposes the API key in client-side JavaScript — and Beehiiv's API doesn't include CORS headers allowing direct browser requests anyway. Every form submission was failing at the browser level before a response even came back.
The fix was a Cloudflare Worker acting as a proxy. The form POSTs to the Worker endpoint. The Worker receives the request, attaches the API key from its secure environment variables, and forwards the call to Beehiiv's API server-to-server. The API key never touches client-side code. CORS is handled by the Worker's response headers. The Worker runs on Cloudflare's free tier at a workers.dev subdomain — zero infrastructure cost, globally distributed.
That's a non-trivial architecture for "a newsletter signup form," but it's the right architecture: secure, free, and fast.
The Content Workflow
With the field data already waiting in Google Drive — field notes file and live ADIF log both written during the activation — the content workflow is a four-word trigger: "write me a blog post for today's activation."
From there the workflow:
- Finds the current date's folder in Google Drive — already there before you left the park
- Reads the field notes file for the narrative, gear details, conditions, and observations
- Parses the live ADIF log for contact count, bands, modes, and timestamps
- Analyzes the photos
- Outputs a full Tava One blog post — header block with mode/band/radio/contacts/park reference, narrative, "Would I activate here again?", sign-off, image placeholders with alt text, meta description, and tags
- Outputs a matching TikTok post with image order, overlay text, caption, and five hashtags
The blog post goes into Shopify with minor editing. The TikTok content goes into CapCut for assembly. Metricool handles scheduling across Facebook, TikTok, and YouTube.
Total time from activation to published content on a good day: about 30 minutes.
TavaScope: Turning the ADIF Into Content
Once the ADIF log exists — whether from Activate, WSJT-X export, or any other logger — TavaScope turns it into a full statistical dashboard and ready-to-post content assets.
TavaScope lives at tavascope.com and is currently at v1.8. No account required, no upload to any server — files are processed entirely in your browser and saved locally. The park ID comes from the filename: name your ADIF us-6700.adi and TavaScope queries the POTA database to fill in the park name automatically. Name it log_export.adi and it won't know where you were.
Three Analysis Modes
Single gives you the full dashboard for one activation — 11 stat blocks, rate charts, a geographic contact map, and downloadable images. This is the primary mode after every activation.
Combined merges two or more activations into one unified stats view. Useful for seeing overall performance across a park you've activated multiple times, or across a full season of operating.
Compare puts two activations side by side with overlapping rate charts — the right tool for antenna comparisons, band comparisons, or seeing how the same park performs at different times of day or year.
Stats Images for the Blog
This is where TavaScope connects directly to the content pipeline. Every Tava One activation blog post has a stat card in the header. That card is not typed manually — it's exported from TavaScope.
Four image formats are available: the Blog Card (11 stat blocks plus park info and date, ready to drop into a post header), the Stats Only Card (just the stat blocks, clean for social media), the Full Dashboard screenshot, and the Contact Map as a standalone image.
TavaScope works with any standard ADIF file — QRZ.com, POTA.app, DXKeeper, N1MM+, WSJT-X, Ham Radio Deluxe, and more.
What's Running Now
The full connected stack as of June 2026:
| Component | Platform | Status |
|---|---|---|
| Storefront | Shopify / Xtra theme | Live |
| Blogs | Field Operations, Gear Reviews, The Shack | Active |
| Newsletter | Beehiiv (free tier) | Live |
| Signup form | Custom HTML/JS with interest tagging | Live |
| API proxy | Cloudflare Worker | Live |
| Lead magnet | POTA Go-Bag Checklist PDF | Active |
| Social scheduling | Metricool → FB, TikTok, YouTube | Connected |
| Field logger | activate.tavaone.com | Live |
| Activation analyzer | tavascope.com v1.8 | Live |
| Content workflow | Google Drive + Activate + Claude | Operational |
| Field radio | Xiegu X6200 | Operational |
| Field antenna | Radioddity HF-010 | Current |
| Field power | DIY LiFePO4 tactical pack | Operational |
| DigiPi | Raspberry Pi 4 / DigiPi image | Operational |
| Home logging | DX Lab Suite + GridTracker 2 | Running |
| UDP data bridge | Python cloner script | Running |
Why Any of This Matters
I spent 15+ years in IT and network administration before ham radio took over as the primary hobby. The intersection of those two worlds is where Tava One lives. The technical depth is real — the CORS problem is a real CORS problem, the UDP cloner is a real networking solution, the Cloudflare Worker is actual serverless infrastructure — but it's all in service of getting on the air more often and sharing what that looks like.
If you're a ham with a web background, or a web person who's curious about radio, this is the gap I'm trying to fill. The content exists at that intersection. The stack was built to serve it.
If you want to follow along, the newsletter is the best way. Subscribe at tavaone.com/pages/subscribe and grab the free POTA Go-Bag Checklist while you're there.
73 de W4GGJ
All Radioddity gear linked in this post uses affiliate code W4GGJ for $15 off your order.