Crewstone
One investment firm, two languages, every old link kept
A bilingual English and 中文 site for a Kuala Lumpur private equity firm: CMS-driven news, fund pages and enquiries, with every old URL redirected.
Where it started.
Crewstone speaks to investors in English and Chinese. The old site made that hard: content lived in two places, news was difficult to update, and years of links from press and partners pointed at pages that a rebuild could easily break. The firm needed a calm, institutional site that its own team could keep current in both languages.
How we approached it.
We rebuilt the site on SvelteKit with Sanity as a single source of content for both languages, and moved the archive across with import scripts rather than copy and paste. Every legacy URL maps to its new home with a permanent redirect, and both language versions are tied together for search engines so investors land on the right one.
Where it stands.
The new site is complete and preparing for launch. The team can publish news in both languages from one place, investors get a fast and consistent experience in their language, and no existing link to the firm will break when it goes live.
The system behind it.
Crewstone, taken apart: from the screen people use to the work that keeps it running.
-
Interface
What investors see
- EN / 中文 toggle
- Fund selector
- Investor portal link
-
Site
Ten page types
- /our-funds
- /portfolio
- /team
- /news/[slug]
- /register-interest
- /careers
-
Languages
Paired for search
- /zh-cn mirror
- hreflang pairs
- JSON-LD
- sitemap.xml
-
CMS
One source, two languages
- newsArticle
- blockContent
- articleImage
- seo
- routing
- scrape-crewstone-news.mjs
-
Operations
Nothing breaks at launch
- 308 legacy redirects
- scripts/check-seo.mjs
- News snapshot fallback
- Resend · enquiries
What we built.
Two languages, one CMS
Ten page types, each mirrored under /zh-cn, with translated articles paired automatically.
Funds & portfolio
Fund pages with a performance chart, a fund selector and a clear table of strategies.
News that edits itself
Sanity Studio for the team, with the old site’s news scraped and imported into it.
Register interest
A server-side enquiry form with validation, spam protection, 202 dial codes and email delivery.
Search-safe migration
Permanent redirects for legacy URLs, hreflang pairs, a sitemap and structured data, checked by script.
Graceful fallback
If the CMS is ever unreachable, the site serves a saved news snapshot instead of an error.
Under the hood.
- Frontend
- SvelteKit, Svelte 5, TypeScript, Manrope + Noto Sans SC
- Content
- Sanity CMS, Sanity Studio, Import scripts
- Backend
- Server-side forms, Resend email, Honeypot
- SEO
- hreflang, JSON-LD, 308 redirects, Sitemap
- Quality
- SEO test script, Viewport checks
By the numbers
- 2 languages, one content system
- 10 page types, each in English and 中文
- 18 page and screen-size checks, all passing
