Remove legacy landing and documentation files, transitioning to a new structure with Pug templates for index and terms pages. Update Vite configuration for improved build process and streamline project organization. Clean up package dependencies and enhance project clarity.

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-10-29 11:45:27 +03:00
parent 108e895631
commit 7292fa8743
29 changed files with 2387 additions and 12621 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,14 +0,0 @@
import React from "react";
import { BrowserRouter } from "react-router-dom";
import { Dashboard } from './dashboard';
const App = () => {
return (
<BrowserRouter>
<Dashboard />
</BrowserRouter>
);
};
export default App;

View File

@@ -1,22 +0,0 @@
import React, { useEffect } from 'react';
import { Routes, Route } from 'react-router-dom';
import { UnderConstructionPage, LandingPage } from './pages';
const Redirect = ({ href }: { href: string }) => {
useEffect(() => {
window.location.href = href;
}, []);
return <div>Загрузка...</div>;
};
export const Dashboard = () => {
return (
<Routes>
<Route path="/" element={<UnderConstructionPage />} />
<Route path="/terms" element={<Redirect href="/terms.html" />} />
<Route path="*" element={<Redirect href="/landing.html" />} />
</Routes>
);
};

172
src/html/index.pug Normal file
View File

@@ -0,0 +1,172 @@
doctype html
html(lang="ru")
head
meta(charset="UTF-8")
meta(name="viewport" content="width=device-width, initial-scale=1.0")
meta(http-equiv="X-UA-Compatible" content="ie=edge")
title Tatar Punk - AI-агенты для бизнеса будущего
meta(name="description" content="Tatar Punk - инновационная компания, специализирующаяся на разработке интеллектуальных решений на основе AI-агентов. Автоматизация бизнес-процессов, обучение разработке AI-агентов на LangChain и LangGraph.")
meta(name="yandex-verification" content="98f7e15d1ad66018")
link(href="https://fonts.googleapis.com/css?family=Montserrat:400,600,700,900&subset=cyrillic,cyrillic-ext" rel="stylesheet")
link(rel="stylesheet" href="/src/styles/landing.scss")
body
//- Yandex.Metrika counter
script(type="text/javascript").
(function(m,e,t,r,i,k,a){
m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
})(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id=104934454', 'ym');
ym(104934454, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", accurateTrackBounce:true, trackLinks:true});
noscript
div
img(src="https://mc.yandex.ru/watch/104934454" style="position:absolute; left:-9999px;" alt="")
//- /Yandex.Metrika counter
//- Hero Section
section.hero
.hero-background
.grid
.glowing-orb
.hero-content
h1.hero-title
span.highlight AI-агенты
| для бизнеса будущего
p.hero-subtitle Автоматизируйте процессы, масштабируйте операции и достигайте новых высот эффективности
.hero-buttons
button.btn-primary Начать внедрение
button.btn-secondary Узнать больше
.scroll-indicator
.mouse
//- News Section
section.news
.container
h2.section-title Новости
.news-card
.news-date 31 октября 2025
h3.news-title Практический воркшоп: Запустись с ИИ-помощником
p.news-description Приглашаем на мероприятие от экспертов IT-парка в Казани. Практический воркшоп с 18:00 до 21:00.
.news-details
span 📍 Казань, ИТ-парк, ул. Петербургская, 52, конференц-зал
span 💰 3 000 рублей
a.news-link(href="https://tatarpunk.itpark.tech/" target="_blank" rel="noopener noreferrer") Зарегистрироваться →
//- Stats Section
section.stats
.container
.stats-grid
.stat-card
.stat-value $236 млрд
.stat-label Рынок к 2034
.stat-card
.stat-value 45.8%
.stat-label CAGR
.stat-card
.stat-value 85-90%
.stat-label Снижение затрат
.stat-card
.stat-value 74%
.stat-label ROI за год
//- Benefits Section
section.benefits
.container
h2.section-title Революция в бизнес-автоматизации
p.section-subtitle AI-агенты представляют новое поколение автоматизации, выходящее далеко за рамки традиционных систем
.benefits-grid
.benefit-card
.benefit-icon 📊
h3.benefit-title Измеримая эффективность
p.benefit-description ROI в течение первого года, снижение затрат на 85-90%
.benefit-card
.benefit-icon 🚀
h3.benefit-title Масштабируемость
p.benefit-description Повышение эффективности на 55%, рост без пропорциональных затрат
.benefit-card
.benefit-icon 🧠
h3.benefit-title Непрерывное обучение
p.benefit-description AI-агенты адаптируются и совершенствуются со временем
//- Solutions Section
section.solutions
.container
h2.section-title Преимущества по направлениям
.solutions-tabs
.tab-content
.solution-item
h3 Клиентский сервис
ul
li ✓ Автоматизация до 80% обращений
li ✓ Сокращение времени ответа на 68%
li ✓ Klarna обслуживает 85 млн пользователей
.solution-item
h3 Продажи и маркетинг
ul
li ✓ Увеличение конверсии на 15-30%
li ✓ Повышение выручки на 3-15%
li ✓ GitHub Copilot ускоряет разработку на 126%
.solution-item
h3 Бизнес-аналитика
ul
li ✓ Сокращение времени поиска на 40%
li ✓ Улучшение качества данных на 35%
li ✓ Детальные отчёты за минуты
//- Education Section
section.education
.container
h2.section-title Обучение разработке AI-агентов
.education-content
.education-text
h3 Почему LangChain & LangGraph?
p Специалисты по разработке AI-агентов получают конкурентные зарплаты:
ul.salary-list
li Junior: $70,000 - $95,000
li Mid-level: $95,000 - $140,000
li Senior: $140,000 - $220,000
li Principal: $220,000 - $350,000
p LangGraph поддерживается компаниями из Fortune 500 и используется для критически важных систем
.education-tech
.tech-badge LangChain
.tech-badge LangGraph
.tech-badge 700+ интеграций
//- Why Us Section
section.why-us
.container
h2.section-title Почему выбирают Tatar Punk
.why-us-grid
.why-us-card
.why-us-icon 🎯
h3 Экспертиза
p Глубокие знания в области разработки AI-агентов
.why-us-card
.why-us-icon 📈
h3 Результаты
p Измеримая бизнес-ценность и ROI в течение года
.why-us-card
.why-us-icon 🎓
h3 Образование
p Готовим специалистов будущего с зарплатой от $70k
.why-us-card
.why-us-icon 🚀
h3 Инновации
p Cutting-edge технологии от лидеров индустрии
//- CTA Section
section.cta
.container
h2.cta-title Готовы трансформировать ваш бизнес?
p.cta-subtitle Свяжитесь с нами для консультации или запишитесь на курс по LangChain и LangGraph
.cta-buttons
button.btn-primary Консультация по внедрению
button.btn-secondary Записаться на курс
//- Footer
footer.footer
.container
p &copy; 2025 Tatar Punk — Ваш партнер в мире интеллектуальной автоматизации

151
src/html/terms.pug Normal file
View File

@@ -0,0 +1,151 @@
doctype html
html(lang="ru")
head
meta(charset="UTF-8")
meta(name="viewport" content="width=device-width, initial-scale=1.0")
meta(http-equiv="X-UA-Compatible" content="ie=edge")
title Пользовательское соглашение - BROJS.RU
meta(name="description" content="Пользовательское соглашение для платформы обучения фронтенд-разработке BROJS.RU. Условия использования, обработка персональных данных, права и обязанности сторон.")
meta(name="yandex-verification" content="98f7e15d1ad66018")
link(href="https://fonts.googleapis.com/css?family=Montserrat:400,600,700,900&subset=cyrillic,cyrillic-ext" rel="stylesheet")
link(rel="stylesheet" href="/src/styles/terms.scss")
body
//- Yandex.Metrika counter
script(type="text/javascript").
(function(m,e,t,r,i,k,a){
m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
})(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id=104934454', 'ym');
ym(104934454, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", accurateTrackBounce:true, trackLinks:true});
noscript
div
img(src="https://mc.yandex.ru/watch/104934454" style="position:absolute; left:-9999px;" alt="")
//- /Yandex.Metrika counter
.container
.terms-doc
h1 Пользовательское соглашение
p.subtitle для BROJS.RU
p.date Последнее обновление: 25 мая 2025 г.
hr
h2 1. Термины
p
strong Платформа
| — сайт
a(href="https://brojs.ru" target="_blank") https://brojs.ru
| , предоставляющий услуги обучения фронтенд-разработке.
p
strong Пользователь
| — лицо, зарегистрированное на Платформе.
p
strong Микрофронтенд-проект
| — код, конфигурации и иные материалы, созданные Пользователем.
p
strong Gravatar
| — сторонний сервис (
a(href="https://gravatar.com" target="_blank") https://gravatar.com
| ), предоставляющий аватары на основе email-адресов пользователей.
p
strong Интеллектуальная собственность
| — результаты интеллектуальной деятельности, включая, но не ограничиваясь, программные коды, дизайны, тексты, графику и другие объекты, защищенные законом.
h2 2. Условия использования
h3 2.1. Регистрация
p Регистрация осуществляется через:
ul
li Аккаунт Yandex;
li Email (с подтверждением через ссылку).
h3 2.2. Обязанности Пользователя
p Пользователь обязуется:
ul
li Не передавать учетные данные третьим лицам;
li Не использовать Платформу для распространения незаконного контента или совершения мошеннических действий;
li Соблюдать конфиденциальность личных данных других участников Платформы.
h2 3. Персональные данные
h3 3.1. Собираемые данные
p Платформа собирает:
ul
li Email (обязательно для регистрации);
li Имя и фамилию (если указаны пользователем);
li Аватар через Gravatar (автоматически, на основе email);
li Информацию об активности (просмотренные курсы, выполненные задания).
h3 3.2. Цели обработки
p Данные используются для:
ul
li Идентификации пользователя и авторизации;
li Персонализации контента и отображения аватара через Gravatar;
li Анализа активности для улучшения Платформы.
h3 3.3. Gravatar
p
| Платформа использует
a(href="https://gravatar.com" target="_blank") Gravatar
| для отображения аватаров пользователей на основе их email. При регистрации ваш email хешируется и отправляется на сервера Gravatar для получения изображения профиля. Если у вас нет учётной записи Gravatar, отображается аватар по умолчанию.
p.note
strong Важно:
| Gravatar является сторонним сервисом, управляемым Automattic Inc. Мы не контролируем политику конфиденциальности Gravatar. Подробнее:
a(href="https://automattic.com/privacy/" target="_blank") https://automattic.com/privacy/
h3 3.4. Хранение данных
p Данные хранятся на защищённых серверах. Срок хранения — до момента удаления учётной записи пользователем или по требованию законодательства.
h3 3.5. Права пользователя
p Вы имеете право:
ul
li Запросить доступ к своим данным;
li Исправить неточности;
li Удалить учётную запись и все связанные данные.
h2 4. Интеллектуальная собственность
h3 4.1. Права на микрофронтенд-проекты
p Все микрофронтенд-проекты, созданные пользователем, остаются его интеллектуальной собственностью. Платформа не претендует на права на эти проекты.
h3 4.2. Лицензия на использование Платформы
p Предоставляя доступ к своим проектам через Платформу, пользователь даёт ограниченную, неэксклюзивную лицензию для:
ul
li Хранения проектов на серверах Платформы;
li Отображения проектов в рамках интерфейса Платформы.
h3 4.3. Контент Платформы
p Все материалы, размещённые на Платформе (курсы, статьи, дизайн), защищены авторским правом и не могут быть использованы без разрешения администрации.
h2 5. Ответственность
h3 5.1. Ограничение ответственности Платформы
p Платформа не несёт ответственности за:
ul
li Потерю данных в результате технических сбоев;
li Действия третьих лиц, получивших доступ к учётной записи пользователя;
li Содержание микрофронтенд-проектов, созданных пользователями.
h3 5.2. Ответственность пользователя
p Пользователь несёт полную ответственность за:
ul
li Соблюдение условий настоящего Соглашения;
li Контент, размещённый на Платформе;
li Безопасность своих учётных данных.
h2 6. Изменение условий
p Платформа оставляет за собой право изменять условия настоящего Соглашения. Пользователи уведомляются об изменениях через email или уведомления на сайте.
h2 7. Контакты
p
| По вопросам, связанным с настоящим Соглашением, вы можете обратиться по адресу:
a(href="mailto:support@brojs.ru") support@brojs.ru
hr
p.footer-note Регистрируясь на Платформе, вы подтверждаете, что прочитали и согласны с условиями настоящего Пользовательского соглашения.

View File

@@ -1,11 +0,0 @@
import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './app';
import './styles/main.module.scss';
const MOUNT_NODE = document.getElementById('app');
if (MOUNT_NODE) {
const root = createRoot(MOUNT_NODE);
root.render(<App />);
}

View File

@@ -1,2 +0,0 @@
export { default as UnderConstructionPage } from './under-construction';
export { default as LandingPage } from './landing/Landing';

View File

@@ -1,577 +0,0 @@
// Variables
$dark-bg: #0a0a0f;
$dark-surface: #141420;
$dark-card: #1a1a2e;
$accent-primary: #00d4ff;
$accent-secondary: #7c3aed;
$text-primary: #ffffff;
$text-secondary: #b4b4c7;
$gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
$gradient-accent: linear-gradient(135deg, #00d4ff 0%, #7c3aed 100%);
// Animations
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-20px); }
}
@keyframes glow {
0%, 100% { opacity: 0.5; }
50% { opacity: 1; }
}
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
// Base styles
.landing {
background: $dark-bg;
color: $text-primary;
min-height: 100vh;
overflow-x: hidden;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
// Hero Section
.hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.heroBackground {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 0;
}
.grid {
position: absolute;
width: 100%;
height: 100%;
background-image:
linear-gradient(rgba(124, 58, 237, 0.1) 1px, transparent 1px),
linear-gradient(90deg, rgba(124, 58, 237, 0.1) 1px, transparent 1px);
background-size: 50px 50px;
animation: float 20s ease-in-out infinite;
}
.glowingOrb {
position: absolute;
width: 500px;
height: 500px;
background: radial-gradient(circle, rgba(0, 212, 255, 0.3) 0%, transparent 70%);
border-radius: 50%;
filter: blur(80px);
animation: pulse 4s ease-in-out infinite;
left: 20%;
top: 20%;
}
.heroContent {
position: relative;
z-index: 1;
text-align: center;
padding: 40px 20px;
animation: slideInUp 1s ease-out;
}
.heroTitle {
font-size: 4rem;
font-weight: 900;
margin-bottom: 1.5rem;
line-height: 1.2;
@media (max-width: 768px) {
font-size: 2.5rem;
}
}
.highlight {
background: $gradient-accent;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heroSubtitle {
font-size: 1.5rem;
color: $text-secondary;
margin-bottom: 2rem;
max-width: 800px;
margin-left: auto;
margin-right: auto;
@media (max-width: 768px) {
font-size: 1.1rem;
}
}
.heroButtons {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
}
.btnPrimary {
background: $gradient-accent;
color: white;
border: none;
padding: 1rem 2.5rem;
font-size: 1.1rem;
font-weight: 600;
border-radius: 50px;
cursor: pointer;
transition: all 0.3s ease;
&:hover {
transform: translateY(-2px);
box-shadow: 0 10px 30px rgba(0, 212, 255, 0.4);
}
}
.btnSecondary {
background: transparent;
color: $accent-primary;
border: 2px solid $accent-primary;
padding: 1rem 2.5rem;
font-size: 1.1rem;
font-weight: 600;
border-radius: 50px;
cursor: pointer;
transition: all 0.3s ease;
&:hover {
background: rgba(0, 212, 255, 0.1);
transform: translateY(-2px);
}
}
.scrollIndicator {
position: absolute;
bottom: 40px;
left: 50%;
transform: translateX(-50%);
z-index: 1;
}
.mouse {
width: 30px;
height: 50px;
border: 2px solid $accent-primary;
border-radius: 20px;
position: relative;
&::before {
content: '';
position: absolute;
top: 10px;
left: 50%;
transform: translateX(-50%);
width: 4px;
height: 10px;
background: $accent-primary;
border-radius: 2px;
animation: pulse 2s ease-in-out infinite;
}
}
// Stats Section
.stats {
padding: 80px 0;
background: $dark-surface;
}
.statsGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
}
.statCard {
background: $dark-card;
padding: 2rem;
border-radius: 16px;
text-align: center;
border: 1px solid rgba(124, 58, 237, 0.2);
transition: all 0.3s ease;
&:hover {
transform: translateY(-5px);
border-color: $accent-primary;
box-shadow: 0 10px 30px rgba(0, 212, 255, 0.2);
}
}
.statValue {
font-size: 3rem;
font-weight: 900;
background: $gradient-accent;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 0.5rem;
}
.statLabel {
color: $text-secondary;
font-size: 1rem;
}
// Benefits Section
.benefits {
padding: 100px 0;
}
.sectionTitle {
font-size: 3rem;
font-weight: 900;
text-align: center;
margin-bottom: 1rem;
@media (max-width: 768px) {
font-size: 2rem;
}
}
.sectionSubtitle {
text-align: center;
color: $text-secondary;
font-size: 1.2rem;
max-width: 800px;
margin: 0 auto 4rem;
@media (max-width: 768px) {
font-size: 1rem;
}
}
.benefitsGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.benefitCard {
background: $dark-card;
padding: 2.5rem;
border-radius: 20px;
border: 1px solid rgba(124, 58, 237, 0.2);
transition: all 0.3s ease;
&:hover {
transform: translateY(-10px);
border-color: $accent-primary;
box-shadow: 0 20px 40px rgba(0, 212, 255, 0.3);
}
}
.benefitIcon {
font-size: 4rem;
margin-bottom: 1.5rem;
}
.benefitTitle {
font-size: 1.5rem;
font-weight: 700;
margin-bottom: 1rem;
}
.benefitDescription {
color: $text-secondary;
line-height: 1.6;
}
// Solutions Section
.solutions {
padding: 100px 0;
background: $dark-surface;
}
.solutionsTabs {
margin-top: 3rem;
}
.tabContent {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.solutionItem {
background: $dark-card;
padding: 2rem;
border-radius: 16px;
border-left: 4px solid $accent-primary;
h3 {
font-size: 1.5rem;
margin-bottom: 1rem;
color: $accent-primary;
}
ul {
list-style: none;
padding: 0;
li {
padding: 0.5rem 0;
color: $text-secondary;
position: relative;
padding-left: 1.5rem;
&::before {
content: '';
position: absolute;
left: 0;
color: $accent-primary;
font-weight: bold;
}
}
}
}
// Education Section
.education {
padding: 100px 0;
}
.educationContent {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
margin-top: 3rem;
@media (max-width: 768px) {
grid-template-columns: 1fr;
}
}
.educationText {
h3 {
font-size: 2rem;
margin-bottom: 1rem;
}
p {
color: $text-secondary;
line-height: 1.8;
margin-bottom: 1rem;
}
}
.salaryList {
list-style: none;
padding: 0;
margin: 1.5rem 0;
li {
padding: 0.75rem 0;
border-bottom: 1px solid rgba(124, 58, 237, 0.2);
color: $text-secondary;
}
}
.educationTech {
display: flex;
flex-direction: column;
gap: 1rem;
}
.techBadge {
background: $gradient-accent;
padding: 1.5rem;
border-radius: 12px;
text-align: center;
font-weight: 700;
font-size: 1.2rem;
animation: float 3s ease-in-out infinite;
&:nth-child(2) {
animation-delay: 0.5s;
}
&:nth-child(3) {
animation-delay: 1s;
}
}
// News Section
.news {
padding: 100px 0;
background: $dark-surface;
}
.newsCard {
background: $dark-card;
padding: 3rem;
border-radius: 24px;
border: 2px solid $accent-primary;
max-width: 800px;
margin: 0 auto;
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: $gradient-accent;
}
}
.newsDate {
color: $accent-primary;
font-weight: 600;
margin-bottom: 1rem;
}
.newsTitle {
font-size: 2rem;
margin-bottom: 1rem;
@media (max-width: 768px) {
font-size: 1.5rem;
}
}
.newsDescription {
color: $text-secondary;
line-height: 1.8;
margin-bottom: 1.5rem;
}
.newsDetails {
display: flex;
gap: 2rem;
margin-bottom: 2rem;
flex-wrap: wrap;
span {
color: $text-secondary;
}
}
.newsLink {
display: inline-block;
color: $accent-primary;
font-weight: 600;
text-decoration: none;
font-size: 1.1rem;
transition: all 0.3s ease;
&:hover {
transform: translateX(5px);
}
}
// Why Us Section
.whyUs {
padding: 100px 0;
}
.whyUsGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
margin-top: 3rem;
}
.whyUsCard {
background: $dark-card;
padding: 2rem;
border-radius: 16px;
text-align: center;
border: 1px solid rgba(124, 58, 237, 0.2);
transition: all 0.3s ease;
&:hover {
transform: translateY(-5px);
border-color: $accent-primary;
}
}
.whyUsIcon {
font-size: 3rem;
margin-bottom: 1rem;
}
.whyUsCard h3 {
font-size: 1.3rem;
margin-bottom: 0.5rem;
}
.whyUsCard p {
color: $text-secondary;
font-size: 0.95rem;
}
// CTA Section
.cta {
padding: 100px 0;
background: $dark-surface;
text-align: center;
}
.ctaTitle {
font-size: 3rem;
font-weight: 900;
margin-bottom: 1rem;
@media (max-width: 768px) {
font-size: 2rem;
}
}
.ctaSubtitle {
color: $text-secondary;
font-size: 1.2rem;
margin-bottom: 2rem;
max-width: 700px;
margin-left: auto;
margin-right: auto;
}
.ctaButtons {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
}
// Footer
.footer {
padding: 2rem 0;
text-align: center;
color: $text-secondary;
border-top: 1px solid rgba(124, 58, 237, 0.2);
}

View File

@@ -1,247 +0,0 @@
import React, { useState, useEffect } from 'react';
import styles from './Landing.module.scss';
interface BenefitData {
title: string;
description: string;
icon: string;
}
interface StatsData {
value: string;
label: string;
}
const Landing: React.FC = () => {
const [scrollY, setScrollY] = useState(0);
const [activeSlide, setActiveSlide] = useState(0);
useEffect(() => {
const handleScroll = () => setScrollY(window.scrollY);
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const benefits: BenefitData[] = [
{
title: 'Измеримая эффективность',
description: 'ROI в течение первого года, снижение затрат на 85-90%',
icon: '📊'
},
{
title: 'Масштабируемость',
description: 'Повышение эффективности на 55%, рост без пропорциональных затрат',
icon: '🚀'
},
{
title: 'Непрерывное обучение',
description: 'AI-агенты адаптируются и совершенствуются со временем',
icon: '🧠'
}
];
const stats: StatsData[] = [
{ value: '$236 млрд', label: 'Рынок к 2034' },
{ value: '45.8%', label: 'CAGR' },
{ value: '85-90%', label: 'Снижение затрат' },
{ value: '74%', label: 'ROI за год' }
];
return (
<div className={styles.landing}>
{/* Hero Section */}
<section className={styles.hero}>
<div className={styles.heroBackground}>
<div className={styles.grid}></div>
<div className={styles.glowingOrb} style={{ transform: `translate(${scrollY * 0.5}px, ${scrollY * 0.3}px)` }}></div>
</div>
<div className={styles.heroContent}>
<h1 className={styles.heroTitle}>
<span className={styles.highlight}>AI-агенты</span> для бизнеса будущего
</h1>
<p className={styles.heroSubtitle}>
Автоматизируйте процессы, масштабируйте операции и достигайте новых высот эффективности
</p>
<div className={styles.heroButtons}>
<button className={styles.btnPrimary}>Начать внедрение</button>
<button className={styles.btnSecondary}>Узнать больше</button>
</div>
</div>
<div className={styles.scrollIndicator}>
<div className={styles.mouse}></div>
</div>
</section>
{/* Stats Section */}
<section className={styles.stats}>
<div className={styles.container}>
<div className={styles.statsGrid}>
{stats.map((stat, index) => (
<div key={index} className={styles.statCard}>
<div className={styles.statValue}>{stat.value}</div>
<div className={styles.statLabel}>{stat.label}</div>
</div>
))}
</div>
</div>
</section>
{/* Benefits Section */}
<section className={styles.benefits}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Революция в бизнес-автоматизации</h2>
<p className={styles.sectionSubtitle}>
AI-агенты представляют новое поколение автоматизации, выходящее далеко за рамки традиционных систем
</p>
<div className={styles.benefitsGrid}>
{benefits.map((benefit, index) => (
<div key={index} className={styles.benefitCard}>
<div className={styles.benefitIcon}>{benefit.icon}</div>
<h3 className={styles.benefitTitle}>{benefit.title}</h3>
<p className={styles.benefitDescription}>{benefit.description}</p>
</div>
))}
</div>
</div>
</section>
{/* Solutions Section */}
<section className={styles.solutions}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Преимущества по направлениям</h2>
<div className={styles.solutionsTabs}>
<div className={styles.tabContent}>
<div className={styles.solutionItem}>
<h3>Клиентский сервис</h3>
<ul>
<li>Автоматизация до 80% обращений</li>
<li>Сокращение времени ответа на 68%</li>
<li>Klarna обслуживает 85 млн пользователей</li>
</ul>
</div>
<div className={styles.solutionItem}>
<h3>Продажи и маркетинг</h3>
<ul>
<li>Увеличение конверсии на 15-30%</li>
<li>Повышение выручки на 3-15%</li>
<li>GitHub Copilot ускоряет разработку на 126%</li>
</ul>
</div>
<div className={styles.solutionItem}>
<h3>Бизнес-аналитика</h3>
<ul>
<li>Сокращение времени поиска на 40%</li>
<li>Улучшение качества данных на 35%</li>
<li>Детальные отчёты за минуты</li>
</ul>
</div>
</div>
</div>
</div>
</section>
{/* Education Section */}
<section className={styles.education}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Обучение разработке AI-агентов</h2>
<div className={styles.educationContent}>
<div className={styles.educationText}>
<h3>Почему LangChain & LangGraph?</h3>
<p>
Специалисты по разработке AI-агентов получают конкурентные зарплаты:
</p>
<ul className={styles.salaryList}>
<li>Junior: $70,000 - $95,000</li>
<li>Mid-level: $95,000 - $140,000</li>
<li>Senior: $140,000 - $220,000</li>
<li>Principal: $220,000 - $350,000</li>
</ul>
<p>
LangGraph поддерживается компаниями из Fortune 500 и используется для критически важных систем
</p>
</div>
<div className={styles.educationTech}>
<div className={styles.techBadge}>LangChain</div>
<div className={styles.techBadge}>LangGraph</div>
<div className={styles.techBadge}>700+ интеграций</div>
</div>
</div>
</div>
</section>
{/* News Section */}
<section className={styles.news}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Новости</h2>
<div className={styles.newsCard}>
<div className={styles.newsDate}>31 октября 2025</div>
<h3 className={styles.newsTitle}>Практический воркшоп: Запустись с ИИ-помощником</h3>
<p className={styles.newsDescription}>
Приглашаем на мероприятие от экспертов IT-парка в Казани. Практический воркшоп с 18:00 до 21:00.
</p>
<div className={styles.newsDetails}>
<span>📍 Казань, ИТ-парк, ул. Петербургская, 52, конференц-зал</span>
<span>💰 3 000 рублей</span>
</div>
<a href="https://tatarpunk.itpark.tech/" target="_blank" rel="noopener noreferrer" className={styles.newsLink}>
Зарегистрироваться
</a>
</div>
</div>
</section>
{/* Why Us Section */}
<section className={styles.whyUs}>
<div className={styles.container}>
<h2 className={styles.sectionTitle}>Почему выбирают Tatar Punk</h2>
<div className={styles.whyUsGrid}>
<div className={styles.whyUsCard}>
<div className={styles.whyUsIcon}>🎯</div>
<h3>Экспертиза</h3>
<p>Глубокие знания в области разработки AI-агентов</p>
</div>
<div className={styles.whyUsCard}>
<div className={styles.whyUsIcon}>📈</div>
<h3>Результаты</h3>
<p>Измеримая бизнес-ценность и ROI в течение года</p>
</div>
<div className={styles.whyUsCard}>
<div className={styles.whyUsIcon}>🎓</div>
<h3>Образование</h3>
<p>Готовим специалистов будущего с зарплатой от $70k</p>
</div>
<div className={styles.whyUsCard}>
<div className={styles.whyUsIcon}>🚀</div>
<h3>Инновации</h3>
<p>Cutting-edge технологии от лидеров индустрии</p>
</div>
</div>
</div>
</section>
{/* CTA Section */}
<section className={styles.cta}>
<div className={styles.container}>
<h2 className={styles.ctaTitle}>Готовы трансформировать ваш бизнес?</h2>
<p className={styles.ctaSubtitle}>
Свяжитесь с нами для консультации или запишитесь на курс по LangChain и LangGraph
</p>
<div className={styles.ctaButtons}>
<button className={styles.btnPrimary}>Консультация по внедрению</button>
<button className={styles.btnSecondary}>Записаться на курс</button>
</div>
</div>
</section>
{/* Footer */}
<footer className={styles.footer}>
<div className={styles.container}>
<p>&copy; 2025 Tatar Punk Ваш партнер в мире интеллектуальной автоматизации</p>
</div>
</footer>
</div>
);
};
export default Landing;

View File

@@ -1,3 +0,0 @@
import { UnderConstruction } from './underConstruction';
export default UnderConstruction;

View File

@@ -1,14 +0,0 @@
import React from 'react';
import Lottie from "lottie-react";
import animation from '../../__data__/assets/lottie/under-construction.json';
export const UnderConstruction = () => {
return (
<div>
<Lottie style ={{ maxHeight: 250 }} animationData={animation} />
<h3><center>Сайт в разработке</center></h3>
</div>
)
}

View File

@@ -1,13 +0,0 @@
// Main styles for the landing page
body {
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
}
.app {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}

View File

@@ -1,2 +0,0 @@
export const app: string;