Open most game portals in 2025 and you will wait 3 to 8 seconds for the homepage to be usable. The download size is typically 4-12 megabytes. Most of that is fonts you do not need, ad library code, analytics scripts, lazy-loaded images, and tracking pixels. The actual content of the page — the title, the game cards, the navigation — is maybe 50KB.
We took the opposite approach. The GerGame homepage is 110KB on first load, including HTML, CSS, JavaScript, and the four web fonts we use. Each game detail page is around 40KB on top of cached resources. The original games themselves are 5-30KB each. The whole site, fully cached, is under 1MB.
Here is how, with the trade-offs.
One CSS file, hand-written
No framework. No Tailwind. No CSS-in-JS. Site CSS is 24KB minified, covering homepage, detail pages, legal pages, and game shells. The trade-off is real: writing CSS by hand takes longer and is harder to maintain across a large team. We are a small site; the math works out for us. It would not work for a 200-page site.
No JavaScript framework
We use vanilla JS. Total JS on the homepage is 18KB unminified — about 6KB minified. We do not render React server-side and we do not hydrate React client-side, because we do not use React. The cost is verbose code in a few places. The benefit is no framework parsing tax on first load.
Fonts loaded carefully
Three web fonts: Fraunces (display serif), Geist (body), JetBrains Mono (UI labels). Each is requested with font-display: swap and the weights we do not need are filtered out at the URL level. Total font payload is about 50KB across all three families.
SVG covers, not PNG
Each of our 23 games has an SVG cover instead of a PNG screenshot. SVGs render crisply at any size, compress better than equivalent PNGs for our style, and let us update branding by editing one file instead of regenerating 23 images.
Aggressive caching
Static assets (CSS, JS, fonts, SVGs) are served with one-year cache headers and immutable flags. HTML pages cache for 5 minutes — short enough to push fixes fast, long enough to skip the network on repeat visits. The Cloudflare CDN handles geographic distribution.
What we gave up
Server-side rendering means our pages are slightly less crawlable than fully static HTML. We worked around it by pre-rendering the 23 detail pages at build time, so each game has its own static HTML with full content — no JavaScript required to read a review.
We also gave up some visual polish. We do not have parallax scrolling. We do not have hover-triggered video previews. We do not have animated headers. The site looks plain by 2025 standards. We think that is actually a feature: less noise, less work for your battery.
The numbers
Lighthouse scores for the homepage on a simulated 4G connection: Performance 99, Accessibility 96, Best Practices 100, SEO 100. Time to Interactive: 1.2 seconds. Largest Contentful Paint: 0.9 seconds. These numbers are not because we are geniuses; they are because we sent you less stuff.
Why bother
Every megabyte you do not load is a megabyte that does not burn the user's data plan, does not drain their battery, does not slow their old phone. Speed is not a feature you add at the end. It is the result of every small decision along the way.