<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andrew Armstrong</title>
    <description>The latest articles on DEV Community by Andrew Armstrong (@techygeeks1).</description>
    <link>https://dev.to/techygeeks1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1343241%2Fe8199b8b-4297-4be9-926b-93cd5b8e4ef0.png</url>
      <title>DEV Community: Andrew Armstrong</title>
      <link>https://dev.to/techygeeks1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techygeeks1"/>
    <language>en</language>
    <item>
      <title>Rewriting an 11-year-old WinForms app in Go and WebView2</title>
      <dc:creator>Andrew Armstrong</dc:creator>
      <pubDate>Tue, 18 Aug 2026 10:29:51 +0000</pubDate>
      <link>https://dev.to/techygeeks1/rewriting-an-11-year-old-winforms-app-in-go-and-webview2-1jdp</link>
      <guid>https://dev.to/techygeeks1/rewriting-an-11-year-old-winforms-app-in-go-and-webview2-1jdp</guid>
      <description>&lt;p&gt;Hi DEV! Ultimate Settings Panel is a free Windows tool I've maintained since 2014 — 250+ Windows settings, tools, diagnostics and commands behind one search box. Version 8.0 is a complete rewrite, and the interesting part isn't the app, it's what the old one was doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with the old version
&lt;/h2&gt;

&lt;p&gt;It was C#/WinForms sitting on MetroFramework, which stopped being maintained years ago. That alone would be reason enough. But the bigger issue was &lt;strong&gt;how it launched things&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To run a classic Control Panel applet or a shell command, the old version wrote a script to disk and invoked it through &lt;code&gt;mshta&lt;/code&gt;. It worked. It is also, more or less exactly, the behaviour that antivirus heuristics are built to catch — and they were right to be suspicious. Any tool doing that is one signature update away from being quarantined, and the user has no way to tell the difference between my app and something genuinely nasty.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 8.0 does instead
&lt;/h2&gt;

&lt;p&gt;A small Go program (no CGO) that renders the panel in a &lt;strong&gt;Microsoft Edge WebView2&lt;/strong&gt; window, with a JavaScript-to-Go bridge handling the launching. Nothing is written to disk. The UI is HTML, so the same panel ships as a standalone &lt;code&gt;index.html&lt;/code&gt; web edition — browsers can't launch local programs, for good reason, so those items give you &lt;strong&gt;Copy&lt;/strong&gt; and &lt;strong&gt;Get .bat&lt;/strong&gt; instead, while &lt;code&gt;ms-settings:&lt;/code&gt; deep links and web links still work directly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;windows &lt;span class="nv"&gt;GOARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64 &lt;span class="nv"&gt;CGO_ENABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="se"&gt;\&lt;/span&gt;
  go build &lt;span class="nt"&gt;-trimpath&lt;/span&gt; &lt;span class="nt"&gt;-ldflags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-H windowsgui -s -w"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s2"&gt;"Ultimate Settings Panel.exe"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole build. One binary, no runtime to install, no installer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I deleted
&lt;/h2&gt;

&lt;p&gt;This was the genuinely satisfying part. Google Analytics. Internet Explorer entries. Telnet "tricks" that stopped working somewhere around Windows 8. Google+ links. A rewrite is the only time you get to honestly audit an eleven-year-old feature list, and roughly a third of it was dead weight.&lt;/p&gt;

&lt;p&gt;What replaced it: Windows 11 &lt;code&gt;ms-settings:&lt;/code&gt; deep links, a Terminal &amp;amp; Shell category (Windows Terminal, PowerShell 7, &lt;code&gt;winget&lt;/code&gt;), modern diagnostics (&lt;code&gt;sfc /scannow&lt;/code&gt;, DISM RestoreHealth, battery and Wi-Fi reports, Winsock reset), favourites, light/dark themes and &lt;code&gt;.bat&lt;/code&gt; export.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Web edition (runs right now, no download): &lt;a href="https://techygeekshome.info/ultimate-settings-panel-online/" rel="noopener noreferrer"&gt;https://techygeekshome.info/ultimate-settings-panel-online/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/techygeekshome/Ultimate-Settings-Panel" rel="noopener noreferrer"&gt;https://github.com/techygeekshome/Ultimate-Settings-Panel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Walkthrough video: &lt;a href="https://www.youtube.com/watch?v=ATa4AXIVzvM" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=ATa4AXIVzvM&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to talk about the WebView2 embedding, why Go rather than staying on .NET, or the JavaScript-to-Go bridge. If you maintain something old enough to have an mshta call in it, I'd genuinely like to hear what you replaced it with.&lt;/p&gt;

</description>
      <category>go</category>
      <category>windows</category>
      <category>showdev</category>
      <category>refactoring</category>
    </item>
    <item>
      <title>PDFGeek: a free, offline PDF toolkit for Windows</title>
      <dc:creator>Andrew Armstrong</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:46:51 +0000</pubDate>
      <link>https://dev.to/techygeeks1/pdfgeek-a-free-offline-pdf-toolkit-for-windows-41nc</link>
      <guid>https://dev.to/techygeeks1/pdfgeek-a-free-offline-pdf-toolkit-for-windows-41nc</guid>
      <description>&lt;p&gt;Hi DEV! I built PDFGeek because I kept hitting the same wall: I'd need to merge two PDFs, end up on some web tool, and find myself about to upload a bank statement to a server I know nothing about. And then it'd tell me the free tier allows three tasks an hour.&lt;/p&gt;

&lt;p&gt;It's a Windows desktop app. Nothing is uploaded, which also means none of the limits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Merge any number of files, in the order you set&lt;/li&gt;
&lt;li&gt;Split into one file per page, or fixed-size chunks&lt;/li&gt;
&lt;li&gt;Extract or remove pages using print-dialog ranges (&lt;code&gt;1-3, 5, 9-&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Rotate, reorder, watermark&lt;/li&gt;
&lt;li&gt;Add or remove AES-128 password protection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;The online PDF tools are genuinely good at what they do. The problem is the trade: your documents go to someone else's machine, and the free tier is deliberately annoying enough to push you to a subscription. For a job that's just "put these two files together", that's a ridiculous amount of ceremony — and for anything sensitive it's not a trade I want to make at all.&lt;/p&gt;

&lt;p&gt;Once it's a local app, the caps stop making sense. There's no reason to limit you to 25 files per merge when the work is happening on your own CPU.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;p&gt;Avalonia UI on .NET 8, PDFsharp for the PDF operations, published as a self-contained win-x64 build so there's no runtime to install.&lt;/p&gt;

&lt;p&gt;The thing I'd point at if you're building something similar: every PDF operation lives in a service layer with &lt;strong&gt;no UI dependencies at all&lt;/strong&gt;. That sounds like architecture-astronaut advice until you try to test a page-range parser through a view model. There are 29 smoke checks that run against real PDF files rather than mocks, and they've caught more than they should have — page ranges are a deceptively nasty little parsing problem once you allow open-ended ranges, duplicates and out-of-order input.&lt;/p&gt;

&lt;p&gt;One honest caveat: it isn't code-signed, so SmartScreen warns on first run. Certificates cost real money annually and I'd rather not put that behind a free tool. SHA256 checksums go out with every release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Homepage: &lt;a href="https://techygeekshome.info/pdfgeek/" rel="noopener noreferrer"&gt;https://techygeekshome.info/pdfgeek/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/techygeekshome/PDFGeek" rel="noopener noreferrer"&gt;https://github.com/techygeekshome/PDFGeek&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download: &lt;a href="https://github.com/techygeekshome/PDFGeek/releases/latest" rel="noopener noreferrer"&gt;https://github.com/techygeekshome/PDFGeek/releases/latest&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about the Avalonia side, the page-range parser, or the testing setup. Feedback very welcome — especially if you try it on a weird PDF and it falls over.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>dotnet</category>
      <category>showdev</category>
      <category>privacy</category>
    </item>
    <item>
      <title>NeoDark Pro: adding Freemius licensing to a WordPress theme without touching the original codebase</title>
      <dc:creator>Andrew Armstrong</dc:creator>
      <pubDate>Fri, 07 Aug 2026 17:37:59 +0000</pubDate>
      <link>https://dev.to/techygeeks1/neodark-pro-adding-freemius-licensing-to-a-wordpress-theme-without-touching-the-original-codebase-253p</link>
      <guid>https://dev.to/techygeeks1/neodark-pro-adding-freemius-licensing-to-a-wordpress-theme-without-touching-the-original-codebase-253p</guid>
      <description>&lt;p&gt;Hi DEV! I recently shipped NeoDark Pro, the premium version of NeoDark (a free dark-mode WordPress theme for tech guides and reviews), and the more interesting part of that launch wasn't the theme itself — it was adding proper license-key licensing to it without touching the original codebase or the free theme at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;NeoDark Pro adds a homepage hero slider, dedicated review content blocks (Quick Facts, Pros &amp;amp; Cons, Comparison Tables, Verdict Boxes), a mega menu, full-width landing page templates, and a built-in download counter on top of everything the free theme already does. It had been selling as a plain WooCommerce downloadable product — pay, get a zip, done. Which meant: no license enforcement, no update delivery, and the raw zip could be shared indefinitely with nothing checking whether the person installing it had actually paid for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just bolt it onto the existing package
&lt;/h2&gt;

&lt;p&gt;The free NeoDark theme is in the WordPress.org Theme Directory review queue, and the Pro package was already a sold, working product. I didn't want to risk either of those by editing in place. So instead of modifying the live Pro codebase, I built a fully isolated copy — same theme, plus the Freemius PHP SDK dropped into vendor/freemius/, plus the SDK's init snippet added to functions.php, plus the readme.txt format Freemius expects. Nothing about the original free theme or the previously-sold package changed at all; the licensed build is a separate artifact that happens to start from the same source.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Freemius actually adds
&lt;/h2&gt;

&lt;p&gt;Freemius works as a "merchant of record" — it handles the checkout, generates a license key per purchase, and its SDK checks that key against the activating site before the premium functionality unlocks. Once the licensed build was deployed and the plan released, I switched techygeekshome.info's own Buy button from a plain WooCommerce download link to the Freemius checkout URL, so every real sale now goes through it and issues a license key the SDK verifies. It's not bulletproof — a determined person can still strip license checks out of a theme, same as any WordPress product — but it raises the bar considerably above "here's a zip, enjoy."&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;Sandbox checkout tested clean, the plan is live and purchasable at £39 one-time (lifetime updates), and the split between "free theme in WP.org review" and "licensed Pro build sold via Freemius" means neither one can break the other going forward.&lt;/p&gt;

&lt;p&gt;Happy to go deeper on the SDK integration, the isolated-build approach, or the Freemius setup specifically if anyone's tackling something similar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;NeoDark Pro: &lt;a href="https://techygeekshome.info/" rel="noopener noreferrer"&gt;https://techygeekshome.info/&lt;/a&gt;&lt;br&gt;
Free version (NeoDark): currently in WordPress.org Theme Directory review&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>NeoDark: a free, fast dark-mode WordPress theme for tech guides and reviews</title>
      <dc:creator>Andrew Armstrong</dc:creator>
      <pubDate>Fri, 07 Aug 2026 17:37:53 +0000</pubDate>
      <link>https://dev.to/techygeeks1/neodark-a-free-fast-dark-mode-wordpress-theme-for-tech-guides-and-reviews-1015</link>
      <guid>https://dev.to/techygeeks1/neodark-a-free-fast-dark-mode-wordpress-theme-for-tech-guides-and-reviews-1015</guid>
      <description>&lt;p&gt;Hi DEV! I built NeoDark because most "tech blog" WordPress themes fall into one of two camps: bloated with a page builder and a dozen bundled plugins, or generic enough that they don't feel purpose-built for guides, tutorials and reviews. NeoDark is a free, lightweight, dark-mode-first theme built specifically for that kind of content.&lt;/p&gt;

&lt;p&gt;What it does out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dark-mode-first design with a consistent, accessible color system&lt;/li&gt;
&lt;li&gt;Customizer-driven homepage — pick which six categories get their own homepage section, no code required&lt;/li&gt;
&lt;li&gt;Automatic table of contents on long-form posts, generated straight from your headings&lt;/li&gt;
&lt;li&gt;Related posts based on shared categories&lt;/li&gt;
&lt;li&gt;Breadcrumbs on every archive, single post, and page&lt;/li&gt;
&lt;li&gt;Site-wide social links menu with automatic icon detection for common networks (Twitter/X, Facebook, Instagram, LinkedIn, GitHub, YouTube, etc.)&lt;/li&gt;
&lt;li&gt;Mobile-friendly navigation with a properly focus-trapped menu and search overlay (keyboard users won't get stuck)&lt;/li&gt;
&lt;li&gt;WooCommerce-compatible out of the box&lt;/li&gt;
&lt;li&gt;No page builder, no bundled plugins, no tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Runs on WordPress 6.4+ and PHP 7.4+.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;A lot of tech-guide sites end up looking the same because they're all running the same page-builder-plus-plugin-stack combo, which drags load times down and adds a maintenance burden nobody asked for. NeoDark skips all of that: it's just a theme, styled dark-mode-first (because most of us are reading guides at 11pm with the lights off), with the specific content structures a guides/reviews site actually needs — automatic TOC, related posts, breadcrumbs — built directly into the theme rather than bolted on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech notes
&lt;/h2&gt;

&lt;p&gt;No remote/CDN-loaded scripts, styles, or fonts — everything's self-hosted, and NeoDark doesn't store any personal data beyond what WordPress core already provides. All social icons are original SVG artwork, not an icon-font library. There's also a premium version, NeoDark Pro, with additional homepage layouts, dedicated review content blocks (Quick Facts, Pros &amp;amp; Cons, Comparison Tables, Verdict Boxes), and a mega menu — but the free version is a complete, standalone theme on its own, not a crippled trial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Homepage: &lt;a href="https://techygeekshome.info/" rel="noopener noreferrer"&gt;https://techygeekshome.info/&lt;/a&gt;&lt;br&gt;
Currently going through the WordPress.org Theme Directory review queue — automated Theme Check already passed, awaiting final human review.&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the Customizer setup, the focus-trap implementation, or anything else. Feedback very welcome, especially if you try it on your own guides/review site.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>DiskGeek: a free, no-bloat disk space analyzer for Windows</title>
      <dc:creator>Andrew Armstrong</dc:creator>
      <pubDate>Fri, 07 Aug 2026 17:25:11 +0000</pubDate>
      <link>https://dev.to/techygeeks1/diskgeek-a-free-no-bloat-disk-space-analyzer-for-windows-abn</link>
      <guid>https://dev.to/techygeeks1/diskgeek-a-free-no-bloat-disk-space-analyzer-for-windows-abn</guid>
      <description>&lt;p&gt;Hi DEV! I built DiskGeek because I was tired of disk-analyzer tools that were either abandoned, bundled with adware, or missing the one feature I actually wanted: near-duplicate detection via perceptual hashing, not just exact-match.&lt;/p&gt;

&lt;p&gt;It's a free, self-contained Windows tool (Avalonia UI on .NET 8) that does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List view + treemap view of what's eating your space&lt;/li&gt;
&lt;li&gt;Exact and near-duplicate file detection (perceptual hashing for images)&lt;/li&gt;
&lt;li&gt;Full-text search across scan results&lt;/li&gt;
&lt;li&gt;Batch rename&lt;/li&gt;
&lt;li&gt;Snapshot comparison — see what changed on a drive over time&lt;/li&gt;
&lt;li&gt;Scheduled scans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No installer bloat, no bundled offers, no telemetry, no "Pro" upsell — it's just free. Windows 10/11, 64-bit only right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;Most of the disk-space tools I tried fell into one of three buckets: unmaintained for years, wrapped in an installer that tries to change your default browser, or capable of finding exact duplicate files but not near-duplicates — which matters a lot if you've got a folder of photos exported from three different apps with slightly different compression each time.&lt;/p&gt;

&lt;p&gt;DiskGeek's duplicate detection uses perceptual hashing for images, so it can flag visually similar files even when the bytes don't match exactly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;p&gt;DiskGeek is built with Avalonia UI on .NET 8, which made it straightforward to keep the app self-contained (no separate runtime install needed) while still getting native performance for scanning large drives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Homepage: &lt;a href="https://techygeekshome.info/diskgeek/" rel="noopener noreferrer"&gt;https://techygeekshome.info/diskgeek/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/techygeekshome/DiskGeek" rel="noopener noreferrer"&gt;https://github.com/techygeekshome/DiskGeek&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download: &lt;a href="https://techygeekshome.info/downloads/diskgeek/DiskGeekSetup.exe" rel="noopener noreferrer"&gt;https://techygeekshome.info/downloads/diskgeek/DiskGeekSetup.exe&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about the build, the perceptual-hashing approach to duplicate detection, or anything else. Feedback is very welcome — especially if you try it on a messy drive and it finds something useful.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>dotnet</category>
    </item>
  </channel>
</rss>
