The studio holds itself to the same brief it gives clients
This site: Next.js 16, Tailwind v4, 48 statically generated pages, Lighthouse 100 across accessibility, best practices, SEO and agentic browsing, and a 772ms LCP, all measured on the live URL, not a staging build.
Snapshot
- Client
- GoodGround (the studio itself)
- Industry
- Website design and development studio, South Africa
- Services
- Design, front-end build, SEO, ongoing iteration
- Build
- Next.js 16, Tailwind v4, GSAP and Framer Motion, deployed on Vercel.
The challenge
A studio's own site is where every shortcut it would never let a client take becomes tempting, because there's no client waiting on a deadline and no one to notice if a claim about performance or accessibility quietly stops being true. The failure mode is well known: the agency that sells fast, accessible, well-structured websites while running one that fails its own pitch.
The brief here was to hold this site to the same bar as B3TTER and Point Break: real Lighthouse scores on the live URL, not a local build; a genuine SEO audit, not an assumed clean bill of health; and fixes applied and re-verified rather than marked done from memory. This case study exists because that audit found real issues, and this is the record of fixing them.
The solution
An SEO audit run against ourselves, not just clients
The audit that produced this case study found sixteen pages missing their own og:image (services and industry subpages sharing the homepage's link-preview card), a stale llms.txt claiming /work was 'coming soon' when it wasn't, and a /work page that gave the first case study a wide featured treatment while the rest sat in a smaller grid below, quietly implying one project mattered more than another.
Every one of those got fixed in the same pass: sixteen new opengraph-image routes off the existing card template, llms.txt brought back in sync with the real sitemap, and /work rebuilt so every case study, including this one, renders at identical size and weight.

An animation the audit flagged as broken, that wasn't
The same audit reported that the light animation on the recommended pricing card had stopped shipping, based on a screenshot showing a static ring. Sampling the card's computed offset-distance twice, 800ms apart, on the live URL told a different story: 72.55% moving to 89.55%, the animation running exactly as built.
The likely cause: a screenshot catches one frozen frame of a six-second, continuously looping animation, and a frozen frame of anything in motion looks static. It's a useful reminder that a visual check and a moving one aren't the same test, and this case study fixes what the audit actually found rather than what it happened to catch mid-frame.

Numbers that hold up on the real domain
The homepage scores 100 on Lighthouse Accessibility, Best Practices, SEO and Agentic Browsing, measured against www.goodground.co.za directly rather than a local or staging copy. Largest Contentful Paint lands at 772ms and Cumulative Layout Shift at 0.02, both from a live performance trace, not a lab estimate.
The build itself is unremarkable by design: Next.js's static generation produces 48 pages at build time, so most of the site serves as static HTML with no server round-trip per request.
Built mobile-first, same as every other project here
The same responsive discipline applied to B3TTER and Point Break applies here: no desktop-first layout scaled down after the fact, no horizontal overflow at any checked width, and the same reduced-motion handling across every animated element on the page.
The difference on this site is stakes. If a client's site had a bug like the grid-overflow issue caught on Point Break, it would be an embarrassing fix. On this one, it's the site making the exact promise it's failing to keep.

The results
Every figure below was measured on the live URL. Each one tells you how to check it yourself.
100
Lighthouse Accessibility
Run Lighthouse against www.goodground.co.za in Chrome DevTools.
100
Lighthouse Best Practices
Same audit, same run.
100
Lighthouse SEO
Same audit, same run.
772 ms
Largest Contentful Paint
Record a performance trace against the live homepage in Chrome DevTools.
0.02
Cumulative Layout Shift
Same trace, same run.
48 pages
Statically generated at build time
Run a production build and read the route summary Next.js prints.
These numbers describe how the site is built, not how the business is performing: traffic, leads and client outcomes are real but aren't the subject of this page. Where they're relevant, they belong in a business update, not a build case study, and won't be invented here to fill the gap.
Want a website like this?
Tell us what you sell and who you sell it to. We will tell you honestly whether a new site is the thing that will move the needle.
