
Public Website
A localized marketing site for each of Plum's ten markets — homepage, pricing, features, press, legal. Geo-routed to the visitor's market and served as pre-rendered static HTML for instant loads and clean SEO.
Plum was scaling across Europe. We built the public website and a custom block-based CMS that lets one marketing team launch and localize every page — across ten markets and seven languages — and ship it all as blazing-fast static HTML.
Plum — the European savings and investing app — was expanding fast. Each new country meant a fully localized marketing site: its own language, currency, pricing, legal pages, menus, and promotions.
A small marketing team had to launch and maintain all of it. Without the right tooling, every page change, every new market, every translation would route back through engineering — turning marketing into a ticket queue.
And it all had to land in time for Plum's rebrand launch — a fixed, immovable date — with the SEO and page speed a consumer fintech lives or dies by.
Ten markets. Seven languages. One marketing team. And a rebrand launch date that wasn't moving.
markets to launch and localize — each with its own language, currency, and content
Every market shares one codebase — but renders its own language, currency, theme, and pages.
We built two things at once: a fast, SEO-first public website rendered as static HTML for every market — and a custom page-builder on top of PayloadCMS that hands the marketing team full control over content, layout, languages, and per-market visibility.

A localized marketing site for each of Plum's ten markets — homepage, pricing, features, press, legal. Geo-routed to the visitor's market and served as pre-rendered static HTML for instant loads and clean SEO.
A block-based editor where marketers compose any page from 24 reusable blocks, translate it into seven languages, restrict sections per market, and preview drafts live — then publish with a redeploy. No engineering in the loop.
Behind the two surfaces, the system that keeps ten markets in sync.
Every page × every locale pre-rendered at build time. Marketing publishes by redeploying — the whole site ships as static HTML to the edge.
Edge middleware reads the visitor's country and routes them to their market — respecting any manual locale override they've chosen.
A single Next.js codebase backed by PayloadCMS. One catch-all route renders every page in every locale, a prebuild step pulls the market map from the CMS, and the whole site compiles to static HTML behind Vercel's edge.
Block-based page builder with 24 reusable content blocks — heroes, carousels, pricing tables, an ETF calculator, testimonials, accordions — that marketers stack to build any page.
Data-driven markets each with its own currency, supported languages, menus, footer, banner, and theme variables — new markets are configured, not coded.
Seven languages English, Greek, French, Dutch, Spanish, Italian and Portuguese — with the schema built to add more without a migration headache.
Full static pre-rendering every page in every locale generated at build time, so loads are instant and SEO is baked into the HTML.
Geo-aware routing edge middleware sends each visitor to their market's homepage, while respecting a manual locale override.
Per-market content control any block or section can be shown or hidden per market — one page, many regional variations.
SEO done right per-page metadata via Payload's SEO plugin, correct hreflang language tags, and pre-rendered HTML for crawlers.
Live draft preview a secure draft-mode endpoint lets marketers preview unpublished changes in context before they ship.
Cloud-native media images and downloads served from Google Cloud Storage, deployed on Vercel's edge network.
Press & legal built in a dedicated press-release collection and localized legal pages, all rendered through the same static pipeline.
The hard part of a multi-market site isn't translating words — it's keeping ten markets, seven languages, and dozens of pages coherent, fast, and self-serve.
So we made markets and languages data, not code. The marketing team composes a page once, and the build pipeline renders a static version for every locale it applies to.
Full control. Build pages from blocks, translate them, target markets, preview drafts, and publish — without filing a single engineering ticket.
A site that feels local: right language, right currency, right pricing, right promotions — all from one shared system.
New markets and pages are content, not deploys of bespoke code. The team builds capabilities, not one-off pages.
Pre-rendered HTML, correct hreflang, per-page metadata, and edge delivery — the speed and crawlability a consumer fintech depends on.