Convert medical-centre landing to React + Tailwind v4 with amoCRM lead capture

Ports the single-file MedCsFiz page — the medical centre that already runs
physiotherapy and wants the existing room to earn more — to the same
architecture as the fitness and hotel landings: Vite + React 19 + TypeScript +
Tailwind v4 on the client, Express 5 for the API, zod schema shared between the
two.

The original stays in legacy/index.html as the visual reference. Its 4 MB of
inlined CSS, JS and base64 images become 12 asset files (664 KB) plus a bundle
loaded on demand; the two 1.5 MB / 750 KB device PNGs are recompressed to webp.
The page is split into 18 components with all copy moved to src/data/content.ts.

Leads reuse the fitness amoCRM integration: contact lookup by phone in every
Russian spelling, deal in the first stage of pipeline 10980758, account fields
matched automatically with the rest written to a note. Rate limit, honeypot and
a localStorage fallback so a lead survives the CRM being down. Endpoint is
/api/leads/medical-centers-existing-physio; Vite runs on 5173 and the API on
3000.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Yuriy Panov
2026-08-28 19:59:14 +06:00
co-authored by Claude Fable 5
parent 35f713a267
commit 8b954ea5db
61 changed files with 9160 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Усиление действующего кабинета физиотерапии | ЭКЗО Групп</title>
<meta
name="description"
content="Аудит и модернизация действующего кабинета физиотерапии: сохраняем полезное оборудование, убираем дублирование, добавляем недостающие технологии ЭКЗО, объединяем старое и новое в маршруты и подтверждаем модель пилотом за 60 дней."
/>
<meta name="theme-color" content="#0A2540" />
<meta name="robots" content="index,follow" />
<link rel="canonical" href="%VITE_SITE_URL%" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta property="og:type" content="website" />
<meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="ЭКЗО Групп" />
<meta property="og:title" content="Усиление действующей физиотерапии — без замены всего парка" />
<meta
property="og:description"
content="Аудит оборудования и документов, интеграция старых и новых технологий, клинические маршруты, обучение, аналитика и пилот «до / после»."
/>
<meta property="og:url" content="%VITE_SITE_URL%" />
<meta property="og:image" content="%VITE_SITE_URL%/og-image.webp" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Усиление действующего кабинета физиотерапии — ЭКЗО Групп" />
<meta name="twitter:card" content="summary_large_image" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Усиление действующего кабинета физиотерапии",
"provider": { "@type": "Organization", "name": "Экзо Групп" },
"serviceType": "Аудит и модернизация кабинета физиотерапии медицинского центра",
"areaServed": "RU",
"url": "https://exodevices.ru/medical-centers/with-physiotherapy"
}
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>