I recently launched GPA Vault — a free tool site for US college students with 15 calculators and 16 blog guides covering GPA, student loans, and college costs. No framework, no backend, no database. Just static HTML files hosted on GitHub Pages.
Here's what the build taught me.
Why pure HTML?
The target audience is students searching Google for specific calculators. Page speed matters for SEO, and nothing beats a static HTML file served from a CDN. No hydration, no JS bundle, no render-blocking. Every tool loads in under a second.
The trade-off: no shared state, no components in the traditional sense. Header and footer are injected via a small JS partial system I wrote — components.js fetches the HTML partials and injects them into placeholder divs on load.
The SEO approach
Rather than competing on broad terms like "GPA calculator" (dominated by NerdWallet, College Board), the strategy is long-tail keywords that large sites don't bother building tools for:
"weighted GPA calculator for AP classes"
"how many A's do I need to raise my GPA"
"semester GPA calculator"
"IB GPA calculator"
Three weeks in: 117 impressions, average position 49, 8 pages indexed out of 29. Still early but the trajectory is right.
Schema markup and llms.txt
Every tool page has WebApplication JSON-LD schema. Every blog post has Article schema. I also added llms.txt to help AI search engines (Perplexity, ChatGPT) understand the site structure — this is becoming standard practice for content sites.
What I'd do differently
Honestly, not much on the technical side. Pure static HTML was the right call for this use case. The main thing I underestimated was content volume — each tool page needs a substantial explainer section (700+ words) to avoid AdSense "low value content" flags. That's more writing than I expected.
What's next
Working toward Google AdSense approval. After that, affiliate partnerships with student loan refinancing platforms.
Happy to answer questions about the static site approach or the SEO strategy.
🔗 gpavault.com
Top comments (0)