feat: simplify navigation and add RU/EN home and contacts

- simplify main navigation and hide extra menu items
- make home page more sales-focused with updated hero, benefits and fleet teaser
- add RU/EN handling for home and contacts, including SEO defaults
- integrate basic Strapi homepage API client (no breaking changes)
- update contacts page with messenger buttons and dynamic footer year

Made-with: Cursor
This commit is contained in:
2026-03-13 19:41:07 +05:00
parent 575db0ac53
commit fde9609f9a
26 changed files with 1753 additions and 735 deletions

View File

@@ -1,8 +1,13 @@
import React from 'react';
import PageHeader from '../components/PageHeader';
import { CheckCircle2, Building2, Factory, Construction, Shield, Lightbulb, FileCheck } from 'lucide-react';
import { useLocation } from 'react-router-dom';
const DesignPage: React.FC = () => {
const location = useLocation();
const isEnglish = location.pathname.startsWith('/en');
const prefix = isEnglish ? '/en' : '';
const objectTypes = [
{
icon: Building2,
@@ -43,8 +48,12 @@ const DesignPage: React.FC = () => {
return (
<div className="bg-white pb-20">
<PageHeader
title="Проектирование"
description="Комплексные проектные решения для объектов любой сложности"
title={isEnglish ? 'Design' : 'Проектирование'}
description={
isEnglish
? 'Comprehensive design solutions for projects of any complexity.'
: 'Комплексные проектные решения для объектов любой сложности'
}
image="/media/images/headers/header-projectirovanie.png"
/>
@@ -53,32 +62,40 @@ const DesignPage: React.FC = () => {
<div className="max-w-5xl mx-auto mb-20">
<div className="bg-gray-50 rounded-2xl p-8 md:p-12 mb-12">
<p className="text-lg text-gray-700 leading-relaxed mb-6">
Специалисты нашей организации обладают значительным опытом в сфере проектирования объектов
в Республике Башкортостан и других регионах РФ.
{isEnglish
? 'Our specialists have extensive experience in designing facilities in the Republic of Bashkortostan and other regions of Russia.'
: 'Специалисты нашей организации обладают значительным опытом в сфере проектирования объектов в Республике Башкортостан и других регионах РФ.'}
</p>
<p className="text-gray-600 leading-relaxed mb-6">
<strong>Проектирование строительных объектов</strong> ответственный и сложный процесс,
влияющий на проведение строительства объекта и его успешное введение в эксплуатацию.
{isEnglish ? (
<>
<strong>Designing construction facilities</strong> is a demanding and complex process that directly
influences the construction phase and successful commissioning of the facility.
</>
) : (
<>
<strong>Проектирование строительных объектов</strong> ответственный и сложный процесс,
влияющий на проведение строительства объекта и его успешное введение в эксплуатацию.
</>
)}
</p>
<p className="text-gray-600 leading-relaxed">
На всех стадиях проектирования мы используем современные проектные и технические решения,
что позволяет нам получать отличные результаты работ независимо от сложности объекта.
Наши специалисты работают с актуальной законодательной базой в сфере проектирования
и способны находить оптимальные решения с учетом нормативных требований и пожеланий заказчика.
{isEnglish
? 'At every stage of design we use modern engineering and technical solutions, which allows us to achieve excellent results regardless of project complexity. Our team works with up-to-date design regulations and finds optimal solutions that meet both regulatory requirements and the clients expectations.'
: 'На всех стадиях проектирования мы используем современные проектные и технические решения, что позволяет нам получать отличные результаты работ независимо от сложности объекта. Наши специалисты работают с актуальной законодательной базой в сфере проектирования и способны находить оптимальные решения с учетом нормативных требований и пожеланий заказчика.'}
</p>
</div>
<div className="bg-brand-orange text-white rounded-2xl p-8 md:p-12">
<p className="text-lg leading-relaxed mb-4">
Необходимость проведения определенных видов изысканий, их объем и состав определяются после
анализа технического задания и зависят от вида, уровня ответственности, назначения сооружений,
стадии проектирования, условий участка и степени их изученности.
{isEnglish
? 'The need for certain types of surveys, their scope and composition is determined after analysing the technical assignment and depends on the type and responsibility level of the facility, design stage and site conditions.'
: 'Необходимость проведения определенных видов изысканий, их объем и состав определяются после анализа технического задания и зависят от вида, уровня ответственности, назначения сооружений, стадии проектирования, условий участка и степени их изученности.'}
</p>
<p className="leading-relaxed">
Проведение инженерных изысканий подразумевает анализ данных, оценку возможных последствий
реализации проекта, получение санитарно-эпидемиологических заключений и составление технических
отчетов, состав которых определяется действующими нормативными документами. Наши специалисты
профессионально выполняют изыскания для строящихся или реконструируемых объектов любых типов.
{isEnglish
? 'Engineering surveys include data analysis, assessment of potential consequences of project implementation, obtaining sanitary and epidemiological approvals and preparing technical reports as required by current regulations. Our specialists perform surveys for both new and reconstruction projects of any type.'
: 'Проведение инженерных изысканий подразумевает анализ данных, оценку возможных последствий реализации проекта, получение санитарно-эпидемиологических заключений и составление технических отчетов, состав которых определяется действующими нормативными документами. Наши специалисты профессионально выполняют изыскания для строящихся или реконструируемых объектов любых типов.'}
</p>
</div>
</div>
@@ -86,10 +103,14 @@ const DesignPage: React.FC = () => {
{/* Типы объектов */}
<div className="max-w-6xl mx-auto mb-20">
<h2 className="text-3xl font-bold text-gray-900 mb-4 text-center">
Предоставление комплексных услуг по проектированию
{isEnglish
? 'Comprehensive design services'
: 'Предоставление комплексных услуг по проектированию'}
</h2>
<p className="text-center text-gray-600 mb-12 max-w-3xl mx-auto">
ООО «ГеоВектор» осуществляет проектирование следующих объектов
{isEnglish
? 'GeoVector LLC provides design services for the following types of facilities:'
: 'ООО «ГеоВектор» осуществляет проектирование следующих объектов'}
</p>
<div className="grid grid-cols-1 md:grid-cols-3 gap-8 mb-12">
@@ -117,9 +138,9 @@ const DesignPage: React.FC = () => {
<div className="flex items-start gap-3">
<Shield className="text-brand-orange flex-shrink-0 mt-1" size={24} />
<p className="text-gray-700 leading-relaxed text-sm">
В каждом случае учитываются требования к архитектурно-планировочным решениям объекта
и соответствующие нормы пожарной безопасности. Значительное внимание уделяется также
проектированию надежных систем внутренних и наружных инженерных коммуникаций.
{isEnglish
? 'For each project we take into account architectural and planning requirements and applicable fire safety standards, with special attention to the design of reliable internal and external engineering networks.'
: 'В каждом случае учитываются требования к архитектурно-планировочным решениям объекта и соответствующие нормы пожарной безопасности. Значительное внимание уделяется также проектированию надежных систем внутренних и наружных инженерных коммуникаций.'}
</p>
</div>
</div>
@@ -128,10 +149,9 @@ const DesignPage: React.FC = () => {
<div className="flex items-start gap-3">
<Lightbulb className="text-brand-orange flex-shrink-0 mt-1" size={24} />
<p className="text-gray-700 leading-relaxed text-sm">
Перед выполнением работ по проектированию совместно с заказчиком определяются основные
требования к проекту, в том числе состав помещений и наполнение зданий инженерным
оборудованием. Проектировочные работы выполняются с учетом требований, предъявляемых
к определенному объекту, особенностей и условий его эксплуатации.
{isEnglish
? 'Before starting design work we agree with the client on the key project requirements, including room programme and engineering systems. The design process always accounts for the facilitys specific operating conditions and regulatory constraints.'
: 'Перед выполнением работ по проектированию совместно с заказчиком определяются основные требования к проекту, в том числе состав помещений и наполнение зданий инженерным оборудованием. Проектировочные работы выполняются с учетом требований, предъявляемых к определенному объекту, особенностей и условий его эксплуатации.'}
</p>
</div>
</div>
@@ -152,7 +172,9 @@ const DesignPage: React.FC = () => {
{/* Разделы комплексных проектов */}
<div className="max-w-6xl mx-auto mb-20">
<h2 className="text-3xl font-bold text-gray-900 mb-8 text-center">
Выполнение разделов комплексных проектов
{isEnglish
? 'Design of sections for integrated projects'
: 'Выполнение разделов комплексных проектов'}
</h2>
<div className="bg-gray-50 rounded-2xl p-8 md:p-10">
@@ -173,7 +195,9 @@ const DesignPage: React.FC = () => {
{/* Специальные разделы */}
<div className="max-w-6xl mx-auto mb-20">
<h2 className="text-3xl font-bold text-gray-900 mb-8 text-center">
Разработка специальных разделов
{isEnglish
? 'Development of specialised sections'
: 'Разработка специальных разделов'}
</h2>
<div className="grid md:grid-cols-3 gap-6">
@@ -197,7 +221,7 @@ const DesignPage: React.FC = () => {
<div className="max-w-5xl mx-auto">
<div className="bg-gradient-to-br from-gray-900 to-gray-800 text-white rounded-2xl p-8 md:p-12">
<h2 className="text-3xl font-bold mb-8 text-center">
Почему выбирают нас
{isEnglish ? 'Why clients choose us' : 'Почему выбирают нас'}
</h2>
<div className="grid md:grid-cols-2 gap-8">
@@ -206,9 +230,13 @@ const DesignPage: React.FC = () => {
1
</div>
<div>
<h3 className="font-bold text-lg mb-2">Современные решения</h3>
<h3 className="font-bold text-lg mb-2">
{isEnglish ? 'Modern solutions' : 'Современные решения'}
</h3>
<p className="text-gray-300 text-sm leading-relaxed">
Используем передовые проектные и технические решения на всех стадиях работы
{isEnglish
? 'We rely on advanced design and engineering solutions at every stage of the project.'
: 'Используем передовые проектные и технические решения на всех стадиях работы'}
</p>
</div>
</div>
@@ -218,9 +246,13 @@ const DesignPage: React.FC = () => {
2
</div>
<div>
<h3 className="font-bold text-lg mb-2">Актуальная база</h3>
<h3 className="font-bold text-lg mb-2">
{isEnglish ? 'Up-to-date regulations' : 'Актуальная база'}
</h3>
<p className="text-gray-300 text-sm leading-relaxed">
Работаем с актуальной законодательной базой в сфере проектирования
{isEnglish
? 'We work strictly within the current regulatory framework in the field of design.'
: 'Работаем с актуальной законодательной базой в сфере проектирования'}
</p>
</div>
</div>
@@ -230,9 +262,13 @@ const DesignPage: React.FC = () => {
3
</div>
<div>
<h3 className="font-bold text-lg mb-2">Опыт в регионе</h3>
<h3 className="font-bold text-lg mb-2">
{isEnglish ? 'Regional experience' : 'Опыт в регионе'}
</h3>
<p className="text-gray-300 text-sm leading-relaxed">
Значительный опыт проектирования в Республике Башкортостан и других регионах РФ
{isEnglish
? 'Extensive experience in the Republic of Bashkortostan and other Russian regions.'
: 'Значительный опыт проектирования в Республике Башкортостан и других регионах РФ'}
</p>
</div>
</div>
@@ -242,9 +278,13 @@ const DesignPage: React.FC = () => {
4
</div>
<div>
<h3 className="font-bold text-lg mb-2">Индивидуальный подход</h3>
<h3 className="font-bold text-lg mb-2">
{isEnglish ? 'Individual approach' : 'Индивидуальный подход'}
</h3>
<p className="text-gray-300 text-sm leading-relaxed">
Находим оптимальные решения с учетом нормативов и пожеланий заказчика
{isEnglish
? 'We find optimal solutions that balance regulations and the clients goals.'
: 'Находим оптимальные решения с учетом нормативов и пожеланий заказчика'}
</p>
</div>
</div>
@@ -255,13 +295,13 @@ const DesignPage: React.FC = () => {
<div className="mt-12 text-center">
<div className="bg-gray-50 rounded-2xl p-8">
<p className="text-gray-700 mb-6 text-lg">
Готовы обсудить ваш проект?
{isEnglish ? 'Ready to discuss your project?' : 'Готовы обсудить ваш проект?'}
</p>
<a
href="#/contacts"
href={`#${prefix}/contacts`}
className="inline-block px-10 py-4 bg-brand-orange text-white font-bold rounded-lg hover:bg-orange-600 transition-colors text-lg shadow-lg hover:shadow-xl"
>
Получить консультацию
{isEnglish ? 'Request a consultation' : 'Получить консультацию'}
</a>
</div>
</div>