[
{
  "title": "NTFS Permission Reporter: Stop Guessing Who Has Access to What",
  "description": "A free Windows tool that scans any local or UNC path and generates an interactive HTML permission audit report — with side-by-side path comparison for migration audits.",
  "date": "2026-03-30",
  "file": "ntfs-permission-reporter.html",
  "tag": "Dev"
},
{
  "title": "FieldQuote: Job Estimating for Contractors Who Work in the Field, Not Behind a Desk",
  "description": "An Android estimating app built on your real labor and equipment costs — build a quote in under two minutes on-site, generate a professional PDF, and track jobs from quoted to invoiced.",
  "date": "2026-03-30",
  "file": "fieldquote-android-app.html",
  "tag": "Android"
},
  {
    "title": "VxRail in Full Meltdown: Recovering VMs When vCenter and vSAN Are Both Gone",
    "description": "Both vCenter and VxRail Manager were offline. vSAN was partially recovered. Here's how we got VMs back on the network by rewriting VMX files directly on the host.",
    "date": "2026-03-16",
    "file": "vxrail-recovery-vmx-no-vcenter.html",
    "tag": "IT"
  },
  {
    "title": "UniFi Sticky Client Hell: 240 Laptops Glued to One AP at a School",
    "description": "Students were getting 4 Mbps in a building full of APs. Every laptop was stuck to the Media Room access point regardless of where in the building they were sitting.",
    "date": "2026-02-13",
    "file": "unifi-sticky-client-school-fix.html",
    "tag": "IT"
  },
  {
    "title": "pfBlockerNG GeoIP Was Running But Not Actually Blocking Anything",
    "description": "pfBlockerNG looked configured and the MaxMind key was valid, but overseas traffic was still getting through. The culprit was a single dropdown set to Deny Both instead of Deny Inbound.",
    "date": "2026-03-12",
    "file": "pfblocker-geoip-deny-inbound-fix.html",
    "tag": "IT"
  },
  {
    "title": "The Print Spooler That Lied: Killing a Phantom DLL After a Bad CU",
    "description": "KB5078752 dropped and the print spooler on our RDS host started dying on startup. The error pointed at PS5UI.DLL — a file that existed but was lying about it.",
    "date": "2026-03-30",
    "file": "spooler-ps5ui-dll-fix.html",
    "tag": "IT"
  },
  {
    "title": "FortiGate Auto-Ban: Automatically Block SSL VPN Brute Force Attackers",
    "description": "Built a FortiGate automation stitch from scratch to instantly ban IPs hammering the SSL VPN — no SIEM, no third-party tools, just FortiOS doing the work.",
    "date": "2026-03-28",
    "file": "fortigate-autoban-ssl-vpn.html",
    "tag": "IT"
  },
  {
    "title": "Server Won't Boot to Domain and the NIC Is Dead — Getting Back In With Hiren's",
    "description": "Lost the NIC, cached credentials won't work, blank password is being rejected. Here's the exact registry trick that got us back in without reinstalling anything.",
    "date": "2026-03-25",
    "file": "hirens-limitblankpassworduse-fix.html",
    "tag": "IT"
  },
  {
    "title": "Microsoft Killed Basic Auth SMTP — So I Replaced SSRS Email with Microsoft Graph",
    "description": "When Microsoft deprecated Basic Auth for SMTP, our SSRS reports stopped emailing. Built a .NET 8 Windows Service to replace it using Graph API and certificate auth.",
    "date": "2026-03-20",
    "file": "ssrs-graph-api-mail-relay.html",
    "tag": "Dev"
  }
]
