1) Clean up fonts (perf + CLS)
You’re loading Inter in <head> and Roboto later in the body. Pick one to avoid double font downloads and layout shifts.
- If you keep Inter, remove the Roboto
<link>that’s injected later. - If you keep Roboto, remove the Inter
<link>in<head>.
Also add display=swap (or Inter via next/font):
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap" rel="preload" as="style">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap" rel="stylesheet">
2) Preconnect the domains you depend on (faster starts)
Add these near the top of <head>:
<link rel="preconnect" href="https://assets.gammahosted.com" crossorigin>
<link rel="preconnect" href="https://imgproxy.gamma.app" crossorigin>
<link rel="preconnect" href="https://cdn.gamma.app" crossorigin>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
(Optionally also <link rel="dns-prefetch" ...> for the same hosts.)
3) Make your LCP image discoverable
Your hero is a CSS background image, which browsers don’t prioritize as LCP. Keep the background, but add a hidden helper <img> so it can be preloaded/prioritized:
<!-- inside the hero container -->
<img
src="https://cdn.gamma.app/mdnapk6mvsewctd/generated-images/M2ORd-MI_sQBfNXX1RbP9.png"
alt=""
width="1152" height="864"
fetchpriority="high" decoding="async"
style="position:absolute; width:1px; height:1px; opacity:0; pointer-events:none"
/>
4) Prefers-reduced-motion support (a11y & UX)
You have site-wide animations. Respect the user’s setting:
@media (prefers-reduced-motion: reduce) {
.site-animations-bootstrap *,
.splide__track, .splide__list, .splide__slide {
animation: none !important;
transition: none !important;
}
}
5) Emoji in headings — make them silent
Screen readers will read “atom symbol” etc. Wrap emojis as decorative:
<h1>
<span aria-hidden="true">⚛️</span> AMR<span aria-hidden="true">™</span>: Thorium Reactor Technology
</h1>
(Do this anywhere you use emoji in titles/buttons.)
6) Navigation fixes
- Your logo anchor currently has
href="". Make it a proper root link:
<a class="chakra-link" href="/"> ...logo...</a>
- Ensure dropdown/toggle buttons update
aria-expandedand the controlled element’shiddenattribute in JS (if you’re toggling only classes).
7) Descriptive links + affiliate attributes (SEO/compliance)
You have Amazon links (amzn.to). Mark them as sponsored and keep noopener/noreferrer:
<a href="https://amzn.to/3FMA353"
target="_blank"
rel="noopener noreferrer sponsored">Nuclear Safety and the Adaptive Modular Reactor (AMR)…</a>
Also make sure any “Learn more / Read more” links are descriptive (you have good copy now—keep that pattern everywhere).
8) Canonical + site meta polish (SEO)
Add your canonical to avoid duplication:
<link rel="canonical" href="https://adaptiveenergysystems.com/">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="/favicon.ico">
9) Social graph alt text
You already set Open Graph. Add image alt too:
<meta property="og:image:alt" content="AES™ clean-energy powered data infrastructure hero image">
(Repeat for twitter:image:alt if you keep separate tags.)
10) Organization JSON-LD (rich results)
Add an org schema to help engines connect properties and profiles:
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"Organization",
"name":"Adaptive Energy Systems (AES)",
"url":"https://adaptiveenergysystems.com/",
"logo":"https://cdn.gamma.app/mdnapk6mvsewctd/f28a7c1f853d46c69a9aba20969ebfcb/original/AES.png",
"sameAs":[
"https://www.linkedin.com/company/...",
"https://x.com/...",
"https://github.com/..."
]
}
</script>
(Replace social URLs as appropriate.)
11) Color contrast check
Your palette is subtle (grays on light gray). Run a quick pass to ensure body text and link states (hover) meet WCAG AA (4.5:1 for normal text). Bump contrast on --body-color / --link-color-hover if needed.
12) External scripts hygiene
You’re loading many Next chunks (Gamma/Next). That’s expected, but:
- Put analytics (if any custom) at the bottom of the bundle list or via GTM.
- Avoid duplicate vendors/polyfills if you ever inline custom scripts.
13) Security headers at the edge (if you control the domain)
Set these via your CDN/host:
Content-Security-Policy: default-src 'self'; script-src 'self' https://assets.gammahosted.com https://imgproxy.gamma.app https://cdn.gamma.app 'unsafe-inline' 'unsafe-eval'; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; img-src 'self' data: https://cdn.gamma.app https://imgproxy.gamma.app; font-src https://fonts.gstatic.com; connect-src 'self' https://api.gamma.app; frame-ancestors 'none'; base-uri 'self';
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=(), camera=(), payment=(), usb=()
(Tune CSP to match any additional domains you truly need.)
14) Minor nitpicks / nice-to-haves
- Add
lang(you already have<html lang="en">✅). - Ensure all decorative
<img>havealt="" aria-hidden="true". - If any image is key content, add meaningful
alt. - Add a sitemap (
/sitemap.xml) and reference it inrobots.txt. - Keep only one meta description (you’re good—just avoid duplicates).
Quick checklist to implement first
- Choose one font (Inter or Roboto) and add
display=swap. - Preconnect: assets.gammahosted.com, imgproxy.gamma.app, cdn.gamma.app, fonts.
- Add hidden LCP
<img fetchpriority="high">for the hero. prefers-reduced-motionCSS.- Wrap emojis with
aria-hidden="true". - Fix logo link
href="/". - Add
rel="sponsored noreferrer noopener"to Amazon links. - Add canonical +
og:image:altand Organization JSON-LD. - Tighten security headers at the CDN (if possible).
If you want, I can convert these into a small Next.js _document.tsx head block and a CSS patch you can paste straight into your Gamma custom code panel.