One platform for a semiconductor company: site, ServiceDesk and admin portal on a single codebase
Polargate replaced KD.tech's WordPress site and a planned Odoo rollout with one React and Supabase platform holding the bilingual corporate site, a customer ServiceDesk and an admin portal, and now runs it on a monthly senior retainer.

- 100 / 100 / 100
- Lighthouse mobile: accessibility, best practices, SEO (SEO was 69)
- 327
- bilingual pages in the sitemap accepted by Search Console
- 22
- customer tickets resolved through the desk, April to July 2026
- 20 h
- senior maintenance hours per month under contract
- 238 KB
- public bundle gzip, down from 321 KB
- 155
- automated tests on every change, plus a healthcheck every 6 hours
The problem
KD.tech designs semiconductors and optical transceivers for automotive Ethernet and sells to carmakers and Tier 1 and Tier 2 suppliers across Europe, the United States and Asia. That engineering sat behind a WordPress site the marketing team could not edit in two languages, technical documentation spread across PDF links, and a careers form that stored applications without the CV. There was no customer support desk at all: the plan on the table was an Odoo Community rollout. And because the site rendered in the browser, AI search engines received an empty 3,559-byte shell.
What we built
Polargate dropped the Odoo plan and built one Vite, React and TypeScript application on Supabase and Vercel, with three surfaces on the same codebase: the bilingual site with a CMS and a curated Design Center, a customer ServiceDesk with email in and out and automatic assignment by region, and an admin portal with analytics. We then moved the platform onto Polargate's own Supabase project with verified parity, added structured data, hreflang and a prerender that serves AI crawlers the same text a person reads, and put every change behind CI gates and an external healthcheck.
The outcome
The site now scores 100 on mobile for accessibility, best practices and SEO, up from 69 on SEO, and the public bundle dropped from 321 to 238 KB gzip. Search Console accepts a sitemap of 327 bilingual pages, and AI crawlers read full articles instead of an empty shell. Twenty-two customer tickets were resolved through the desk between April and July 2026. Six live breakages, including a careers form that had been storing applications without the CV, were found and fixed under the maintenance retainer.
Stack
- React
- Vite
- TypeScript
- Tailwind CSS
- shadcn/ui
- Supabase
- PostgreSQL
- Deno
- Vercel
- Resend
- OpenAI
- GitHub
- GitHub Actions
- GA4
- Search Console
- Vitest
The company and the starting point
KD.tech designs semiconductors and optical transceivers for automotive Ethernet over plastic and glass optical fibre, and sells to carmakers and to Tier 1 and Tier 2 suppliers in Europe, the United States and Asia. That engineering sat behind a WordPress site the marketing team could not edit in two languages, technical documentation spread across PDF links, and a careers form that stored applications without the CV. Customer support had no home of its own: the plan on the table was an Odoo Community rollout.
What we found
- The site was a single-page app, so AI crawlers (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot) received an empty 3,559-byte shell.
- Lighthouse mobile scored 69 on SEO, and the hero text measured 1.13:1 contrast in dark mode, a WCAG failure.
- The documentation section and the six deployment pages had been returning a real 404 since May.
- Document downloads were still being counted against a backend that was meant to be retired.
What we built
One Vite, React and TypeScript application on Supabase and Vercel, with three surfaces on the same codebase:
- kd.tech: the bilingual EN/ES site with a CMS for news, products and jobs, and a Design Center of standards, white papers and user guides with download tracking.
- kd.tech/help: a customer ServiceDesk with email in and out through Resend on its own subdomain, a Postgres trigger assigning every ticket to a business manager and a field application engineer by region (Europe and the Middle East, Asia, the USA and rest of world), region-scoped visibility enforced in the database, SLA tiers and a rating on close.
- kd.tech/portal: the admin panel, with first-party cookieless analytics stored in KD's own database plus GA4 and Search Console in a single view.
We then moved the platform onto Polargate's own Supabase project with verified parity: 55 tables, 148 RLS policies, 37 edge functions and 371 of 371 storage objects, with no data loss.
How it runs now
Structured data (JobPosting, NewsArticle, Organization), hreflang and a dynamic sitemap of 327 pages keep the site legible to search engines. A server-side prerender gives AI crawlers the same text a person reads, built from the same translation keys the page renders, with a test that fails if the two ever drift apart. Every change passes GitHub Actions: typecheck, 155 tests, build and lint, which went from 137 errors to zero. An external healthcheck runs every six hours over public pages, crawler responses, the sitemap, password recovery and the download route. Maintenance is a fixed pool of 20 senior hours a month, and customer support runs on Polargate's multi-tenant ServiceDesk, where KD was the first tenant: 22 tickets resolved between April and July 2026.
Questions about this project
How long does it take to replace a WordPress site with a custom platform?
Can ChatGPT and Perplexity read a React single-page app?
Can you build a support desk into our own website instead of buying a helpdesk tool?
What does a monthly maintenance retainer actually cover?
Related work
Start the engine
Tell us what you are building in a few short questions. A senior engineer answers in writing within 48 business hours, with a first take on scope, timeline and price.
