Satellite company
Public company · Software development partner · 2025
Space / satellite servicing & debris removal
Built the frontend for a large, CMS-driven corporate and investor-relations platform — editor-composable pages, up to 10 locales, and interactive 3D/WebGL brand experiences.

Not a landing page — a full multi-section corporate site (Solutions, Missions, Sectors, Resources, News, a dedicated Investor-Relations sub-site, Contact, Legal) plus interactive brand games. Content had to be fully editor-driven, and had to work across markets and languages.
Let a content team assemble arbitrary pages with no engineering involvement, serve investor content and news across many languages, and embed heavy 3D and game media — all while staying inside a headless CMS's real platform limits and under a strict security posture.
What I did
- Server-first Next.js 15 / React 19 frontend
App Router with React Server Components by default and client boundaries pushed down, strict TypeScript throughout.
- Editor-composable page system on Contentful
A 47-type section library consumed over typed GraphQL (GraphQL Code Generator) and rendered by a __typename switch — editors drop any section onto any page with zero per-page code changes.
- A fan-out GraphQL loader that beats the CMS's own limits
Split one giant page query into a page-shell query plus parallel per-section-type batches — engineered specifically to stay under Contentful's 8192-byte query-text and 11,000 cost-unit ceilings, which a single query blows past at ~15+ section types.
- Internationalization across 10 locales
next-intl with three hand-authored core locales (en/fr/ja) plus a hashed, incremental, rich-text-aware machine-translation pipeline that adds seven more languages for news, so unchanged content is never re-translated.
- Middleware for routing, locale scoping, and security
Locale routing, scoping machine-translation locales to news paths only, special-casing a Japanese IR vendor iframe, and a site-wide Content-Security-Policy moved out of next.config so it also covers static assets.
- 3D/WebGL brand experiences and B2B integrations
Three.js satellite models with Draco + KTX2 decoders and embedded Unity/HTML5 games, plus Salesforce, Mailgun, Mailchimp and Google Maps integrations and dynamic Zod form schemas built from CMS field definitions.
Trade-offs I'd defend
Deliberately traded a couple of cold-request round-trips for staying under the CMS's query limits — and for keeping each section type independently cacheable.
Moved the Content-Security-Policy into middleware so the policy also covers /public static files, with the rationale documented for the team.
Outcomes
A single query fetching 15+ section types blows straight past Contentful's 8192-byte query-text and 11,000 cost-unit ceilings — the platform simply refuses it. Rather than cap what editors could compose on a page, I changed the data-access shape: split the fetch into a lightweight page-shell query plus parallel per-section-type batches. Pages could then grow to any number of section types while staying under the platform limits, and every section type became independently cacheable as a bonus.
When the platform's limits fight the product's flexibility, change the data-access shape, not the product.
More case studies
AI eSourcing platform for UK public-sector procurement — prototype to production, founding team hired, pre-seed closed.
Explainable inventory-allocation engine — a transparent linear program that splits factory output across distribution centers at lowest landed cost.
Ready to scale your engineering?
Book a 30-minute discovery call. If we're not a fit, I'll tell you on the call — and point you toward someone who is.