Energy Counsel
Case StudySteve Huntoon is a former President of the Energy Bar Association with more than 40 years in the energy industry, and more than 100 published columns to show for it. When his old host suspended the site for malware, that body of work went offline. I recovered all 111 documents, scanned every one before reuse, and rebuilt the site as a fast, fully searchable archive that runs at $0 a month for hosting.
Visit Energy-Counsel.com
Results at a Glance
Google PageSpeed Insights
Core Web Vitals
A perfect 100 in all four categories, on both mobile and desktop. Largest Contentful Paint lands at 1.2s on mobile (throttled to slow 4G) and 0.3s on desktop. Total Blocking Time is 0 ms and Cumulative Layout Shift is 0 on both. The home page runs no JavaScript at all, so there is nothing to block it from painting.
Project Overview
Steve Huntoon has advised and represented energy companies including Dynegy, Exelon and NextEra. His columns run in RTO Insider and Public Utilities Fortnightly, and his website is the home for all of that writing: 111 documents from seven publishers, from 2014 to this month.
The old site was WordPress on a shared host. In 2026 the host suspended it for malware, and years of columns went offline with it. The job was to get every document back, make sure none of it carried anything harmful, and put it on a site that is fast, easy to search, and very hard to break into again. Work started on September 3, 2026 and the new site went live on September 15.
Site Structure
Six main pages, plus a page of its own for every document:
Recovering 111 Documents From a Suspended Host
The first job was getting Steve's work back without bringing any of the old site's problems along with it.
Clean Sources First
I pulled every document from Internet Archive snapshots first, since all of them predate the breach. I only went to the old server's backup to fill gaps, and that turned up five recent columns the Archive had never captured. The result was 138 files, which I reduced to 111 distinct documents by finding the byte-identical re-uploads and alternate copies. Nothing was missing and nothing was truncated.
Every PDF Scanned Before Reuse
Every PDF was checked for embedded JavaScript, launch actions and auto-run actions before it went anywhere near the new site. None of the old site's HTML or PHP was reused. I read it for Steve's copy and nothing else.
Cleaning Up the Old Host
On the old server I found two fake WordPress plugins publishing SEO spam, and a full-site backup, database password included, that anyone could download from the web. I removed both and documented the cleanup for Steve. The new site has no WordPress, no plugins and no database, so none of those problems can come back.
Dated and Attributed Correctly
Every document has a title, publisher and date. Where a date could be checked against RTO Insider or Public Utilities Fortnightly, the publisher's date wins over whatever the PDF itself says, so the archive is in the right order.
Twelve Years of Columns, Fully Searchable
The old site was a list of links. The new one lets a reader find the column where Steve made a particular argument, by searching the words inside the PDFs.
Keeping Every Old Link Working
Steve's columns have been linked from other sites and emails for years, across two generations of the old site. Those links point at URLs that no longer exist, so I kept every one of them working.
The build generates 179 permanent redirects from the recovered catalogue, one for every old page and every old PDF address, duplicate uploads included. They are generated rather than written by hand, so adding a document can never break one. An automated check also makes sure the addresses bots probe for, like /wp-login.php, get a plain 404 and never a redirect.
Security
After what happened to the old site, security was the point, not an add-on:
SEO Strategy
Every document now has its own indexable page, so a search for one of Steve's column titles can land on it directly instead of on a bare PDF.
Person and WebSite Schema
The home page carries JSON-LD for the website and for Steve himself, so search engines connect the site to the person.
Article Schema on Every Document
Each of the 111 document pages carries Article, Person and Organization JSON-LD naming Steve as author and the publisher it first ran in.
One Flat Sitemap
A single sitemap lists all 117 indexable pages. Error and confirmation pages are marked noindex and left out.
Clean Metadata
Every indexable page has its own title, a unique description, a canonical URL and a single H1.
Share Cards
A 1200×630 share image plus Open Graph and Twitter tags, so links to the site look right in email and on social media.
One Canonical Address
http and www both redirect permanently to https://energy-counsel.com, with HSTS on.
A post-launch PageSpeed run flagged four links that just said “here,” which scored SEO at 92. I moved the link onto words that name the destination, without changing a word of Steve's copy, and the score went to 100.
Design and Accessibility
A site for reading, scoring 100 for Accessibility on mobile and desktop:
AI Discoverability
When someone asks an AI assistant what Steve Huntoon has written about capacity markets or FERC, the answer should come from his own site:
Technology Stack
| Component | Technology |
|---|---|
| Framework | Astro, static output, one Markdown file per document |
| Hosting | Cloudflare Pages on the client’s own account (global CDN, automatic HTTPS) |
| Domain / DNS | Cloudflare Registrar and DNS (client-owned) |
| Search | Pagefind, indexed at build from PDF text extracted with pdfjs-dist |
| PDF Processing | Build-time thumbnails and page counts; OCR for scanned documents |
| Contact Form | Cloudflare Pages Function + Resend |
| Spam Protection | Cloudflare Turnstile (verified server-side) + honeypot field |
| SEO | JSON-LD (WebSite, Person, Article, Organization) + Open Graph / Twitter Cards |
| Redirects and Headers | Generated by the build, 179 redirects |
| Testing | 281 unit and build tests, plus a Playwright smoke suite run against production |
Hosting costs $0 a month. The only recurring bill is the domain.
Kevin has been fantastic! My website had been shut down by my prior domain host due to malware, risking my access to many years' worth of publications and other materials. Kevin somehow recovered all of these.
He then scanned every document for malware and posted everything on my new site.
He moved the domain from name.com to Cloudflare, resulting in a new site that's faster, safer and less expensive to maintain ($0 hosting fee, only $11/year for the domain).
He quickly added some new materials and made edits to my old website pages upon my request. He made some redesigns that greatly increased the aesthetics and ease of use for my website.
And he was incredibly responsive to all my emails, texts and calls! Thank you Kevin!