commit af1ad471703a770fb689c176c07d33d47ee5b69f Author: kalugin66 Date: Wed May 13 01:38:36 2026 +0500 v260513 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1755b5d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.env +data +README.md \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..f8bf237 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "dependencies": { + "dotenv": "^17.4.2", + "express": "^5.2.1", + "sharp": "^0.34.5", + "sqlite3": "^6.0.1" + }, + "scripts": { + "start": "node server.js", + "dev": "nodemon server.js" + } +} diff --git a/public/img/belarus-mtz1523.webp b/public/img/belarus-mtz1523.webp new file mode 100644 index 0000000..fe07dba Binary files /dev/null and b/public/img/belarus-mtz1523.webp differ diff --git a/public/img/caterpillar-336.webp b/public/img/caterpillar-336.webp new file mode 100644 index 0000000..f122fbd Binary files /dev/null and b/public/img/caterpillar-336.webp differ diff --git a/public/img/geo.webp b/public/img/geo.webp new file mode 100644 index 0000000..247b6a3 Binary files /dev/null and b/public/img/geo.webp differ diff --git a/public/img/hero-bg.webp b/public/img/hero-bg.webp new file mode 100644 index 0000000..d24cb8b Binary files /dev/null and b/public/img/hero-bg.webp differ diff --git a/public/img/hitachi-zx350.webp b/public/img/hitachi-zx350.webp new file mode 100644 index 0000000..4633c86 Binary files /dev/null and b/public/img/hitachi-zx350.webp differ diff --git a/public/img/howo-sitrak.webp b/public/img/howo-sitrak.webp new file mode 100644 index 0000000..fab824f Binary files /dev/null and b/public/img/howo-sitrak.webp differ diff --git a/public/img/ivanovets-ks5571.webp b/public/img/ivanovets-ks5571.webp new file mode 100644 index 0000000..367cb06 Binary files /dev/null and b/public/img/ivanovets-ks5571.webp differ diff --git a/public/img/john-deere.webp b/public/img/john-deere.webp new file mode 100644 index 0000000..179d04c Binary files /dev/null and b/public/img/john-deere.webp differ diff --git a/public/img/kamaz-6520.webp b/public/img/kamaz-6520.webp new file mode 100644 index 0000000..4829144 Binary files /dev/null and b/public/img/kamaz-6520.webp differ diff --git a/public/img/komatsu-pc400.webp b/public/img/komatsu-pc400.webp new file mode 100644 index 0000000..8e3a66f Binary files /dev/null and b/public/img/komatsu-pc400.webp differ diff --git a/public/img/ks-45721.webp b/public/img/ks-45721.webp new file mode 100644 index 0000000..61594d9 Binary files /dev/null and b/public/img/ks-45721.webp differ diff --git a/public/img/license-lom.webp b/public/img/license-lom.webp new file mode 100644 index 0000000..45fe289 Binary files /dev/null and b/public/img/license-lom.webp differ diff --git a/public/img/license-otxody.webp b/public/img/license-otxody.webp new file mode 100644 index 0000000..7e77359 Binary files /dev/null and b/public/img/license-otxody.webp differ diff --git a/public/img/logo.webp b/public/img/logo.webp new file mode 100644 index 0000000..e05fe98 Binary files /dev/null and b/public/img/logo.webp differ diff --git a/public/img/secret.webp b/public/img/secret.webp new file mode 100644 index 0000000..15425c3 Binary files /dev/null and b/public/img/secret.webp differ diff --git a/public/img/tral-1.webp b/public/img/tral-1.webp new file mode 100644 index 0000000..4216b5a Binary files /dev/null and b/public/img/tral-1.webp differ diff --git a/public/img/tral-2.webp b/public/img/tral-2.webp new file mode 100644 index 0000000..bbdfb50 Binary files /dev/null and b/public/img/tral-2.webp differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..acbadb2 --- /dev/null +++ b/public/index.html @@ -0,0 +1,1329 @@ + + + + + +СТС-Авто — Демонтаж и капитальный ремонт магистральных трубопроводов + + + + + + + + + + +
+ + + +
+
+ Строительство трубопровода +
+
+
+
+ + Лицензии СРО и НОСТРОЙ +
+

Демонтаж и капитальный ремонт магистральных трубопроводов по всей России

+

Собственная спецтехника. Лицензии СРО и НОСТРОЙ. Более 10 лет опыта. Работаем на опасных производственных объектах без привлечения субподрядчиков.

+
+ + +
+ + г. Екатеринбург, ул. Московская, 11, оф. 702 +
+
+ +
+
0
лет на рынке
+
0
объектов выполнено
+
0
единиц техники
+
0
федеральных округов
+
+
+
+
+ + +
+
+
+

О компании

+

Компания «СТС-Авто» — надёжный партнёр в сфере демонтажа и капитального ремонта магистральных трубопроводов. Мы работаем на всей территории Российской Федерации, обеспечивая полный цикл работ собственными силами и техникой.

+
+
+
+ Работы на трубопроводах +
+
+

Собственная техника и полный контроль

+

Наш автопарк состоит из более чем 50 единиц современной спецтехники, возраст которой не превышает 5 лет. Мы используем экскаваторы, трактора, краны, самосвалы и тралы ведущих мировых производителей: Hitachi, Komatsu, Caterpillar, Belarus, John Deere, Howo, КамАЗ, КС и Ивановец.

+

Все работы выполняются исключительно силами компании — без привлечения субподрядчиков. Это гарантирует полное соответствие качества, сроков и ответственности на каждом этапе проекта.

+

Мы работаем в самых сложных условиях: труднодоступные районы, заболоченные территории, Крайний Север. Гибкие варианты оплаты: работаем по договору, включая вариант расчёта трубой за услуги (бартер с металлоломом после демонтажа).

+
+
+
+
Парк техники не старше 5 летБолее 50 единиц современной спецтехники
+
+
+
+
Без субподрядчиковВсе работы силами компании
+
+
+
+
Сложные условияБолота, Крайний Север, труднодоступные районы
+
+
+
+
Гибкая оплатаВключая расчёт трубой (бартер)
+
+
+
+
+
+
+ + +
+
+
+

Наши услуги

+

Полный спектр работ по демонтажу, ремонту и строительству трубопроводной инфраструктуры. Работаем на опасных производственных объектах с собственным парком спецтехники.

+
+
+
+
+

Демонтаж и капитальный ремонт труб, трубопроводов

+

Выполняем полный цикл работ по демонтажу и капитальному ремонту магистральных и промысловых трубопроводов любого типа и диаметра.

+
    +
  • Нефтепроводы, газопроводы, водоводы — все типы магистральных и промысловых сетей
  • +
  • Полный цикл: от вскрытия и вырезки дефектных участков до вывоза и сдачи металлолома
  • +
  • Капитальный ремонт: замена участков, восстановление изоляции, укладка на проектную отметку
  • +
  • Работа с трубопроводами любого диаметра в любых климатических условиях
  • +
+
+
+
+

Техническая рекультивация земель

+

Восстановление нарушенных земель после проведения строительных и ремонтных работ.

+
    +
  • Засыпка траншей, планировка, восстановление плодородного слоя
  • +
  • Работа с нефтезагрязнёнными, засоленными землями
  • +
  • Сдача по актам под контролем экологов
  • +
+
+
+
+

Строительство вдольтрассовых проездов

+

Устройство временных и постоянных дорог вдоль трубопроводов.

+
    +
  • Устройство основания из щебня
  • +
  • Укладка лежневых настилов
  • +
  • Отсыпка песчано-гравийной смесью
  • +
+
+
+
+

Расчистка территории от мелколесья и ДКР

+

Подготовка полосы отвода: расчистка от древесно-кустарниковой растительности.

+
    +
  • Валка, корчёвка, дробление пней
  • +
  • Планировка полосы отвода
  • +
  • Мульчеры и кусторезы на гусеничном ходу
  • +
+
+
+
+

Устройство лежневого настила

+

Обеспечение проходимости для тяжёлой техники по болотам и слабым грунтам.

+
    +
  • Изготовление секций из бревен и бруса
  • +
  • Укладка перекрытий на слабых грунтах
  • +
  • Обеспечение проходимости для тяжёлой гусеничной техники
  • +
+
+
+
+
+ + +
+
+
+

Этапы работы

+

Прозрачный и отлаженный процесс от первого обращения до сдачи объекта. Каждый этап контролируется инженерами компании.

+
+
+
+
1
+
+

Заявка

+

Вы оставляете заявку на сайте, по электронной почте или звоните нам. Наши специалисты оперативно свяжутся с вами для обсуждения деталей проекта, объёма работ и сроков.

+
+
+
+
2
+
+

Выезд специалиста и оценка

+

Наш инженер выезжает на объект для проведения осмотра, оценки объёма работ, определения необходимых ресурсов и техники. По результатам составляется техническое задание и подписывается договор.

+
+
+
+
3
+
+

Выполнение работ

+

Мобилизуем технику и персонал на объект. Выполняем демонтаж, капитальный ремонт, рекультивацию или строительство проездов в соответствии с проектной документацией. Ежедневные отчёты о ходе работ.

+
+
+
+
4
+
+

Сдача объекта

+

По завершении всех работ подписывается акт выполненных работ, передаётся полный комплект закрывающей документации. При необходимости — сопровождение сдачи объекта экспертизе.

+
+
+
+
+
+ + +
+
+
+

Наша спецтехника

+

Собственный парк из более чем 50 единиц современной спецтехники ведущих мировых производителей. Возраст всей техники — не старше 5 лет.

+
+
+ + +
+
+ Экскаватор Hitachi ZX350 +
Hitachi
+
+
+

Экскаватор гусеничный Hitachi ZX350

+
Не старше 5 лет
+
+
Масса35 тонн
+
Объём ковшадо 1.8 м³
+
Глубина копаниядо 7.5 м
+
НавесноеГидромолот, ковш
+
+
+
+ + +
+
+ Экскаватор Komatsu PC400 +
Komatsu
+
+
+

Экскаватор гусеничный Komatsu PC400

+
Не старше 5 лет
+
+
Масса40 тонн
+
Объём ковшадо 2.0 м³
+
Глубина копаниядо 8.0 м
+
НавесноеГидромолот, рыхлитель
+
+
+
+ + +
+
+ Экскаватор Caterpillar 336 +
Caterpillar
+
+
+

Экскаватор гусеничный Caterpillar 336

+
Не старше 5 лет
+
+
Масса36 тонн
+
Объём ковшадо 1.9 м³
+
ДвигательCat C9.3B
+
НавесноеГидромолот, грейфер
+
+
+
+ + +
+
+ Трактор Belarus МТЗ-1523 +
Беларус
+
+
+

Трактор Belarus МТЗ-1523

+
Не старше 5 лет
+
+
Мощность155 л.с.
+
НавесноеБульдозерный отвал
+
ПрименениеПланировка, рекультивация
+
ПриводПолный 4×4
+
+
+
+ + +
+
+ Трактор John Deere +
John Deere
+
+
+

Трактор John Deere с бульдозерным навесным

+
Не старше 5 лет
+
+
Мощностьдо 400 л.с.
+
НавесноеБульдозерный отвал, плуг
+
ПрименениеПланировка, расчистка
+
ПриводПолный 4×4
+
+
+
+ + +
+
+ Автокран Ивановец KS-55 +
Ивановец
+
+
+

Автокран Ивановец КС-55

+
Не старше 5 лет
+
+
Грузоподъёмностьдо 25 тонн
+
Вылет стрелыдо 28 м
+
ПрименениеМонтаж труб, погрузка
+
ШассиАвтомобильное
+
+
+
+ + +
+
+ Автокран КС на КамАЗ +
КС / КамАЗ
+
+
+

Автокран КС на шасси КамАЗ

+
Не старше 5 лет
+
+
Грузоподъёмностьдо 25 тонн
+
Вылет стрелыдо 30 м
+
ПрименениеМонтаж труб, погрузка
+
ШассиКамАЗ повышенной проходимости
+
+
+
+ + +
+
+ Самосвал Howo +
Howo
+
+
+

Самосвал Howo

+
Не старше 5 лет
+
+
Грузоподъёмностьдо 20 тонн
+
Объём кузовадо 20 м³
+
ПрименениеВывоз грунта, доставка материалов
+
Колёсная формула6×4
+
+
+
+ + +
+
+ Самосвал КамАЗ 6520 +
КамАЗ
+
+
+

Самосвал КамАЗ 6520

+
Не старше 5 лет
+
+
Грузоподъёмностьдо 20 тонн
+
Объём кузовадо 20 м³
+
ПрименениеВывоз грунта, доставка материалов
+
Колёсная формула6×4 / 8×4
+
+
+
+ + +
+
+ Трал с экскаватором +
Тралы / Негабарит
+
+
+

Тралы для перевозки негабарита

+
Не старше 5 лет
+
+
Грузоподъёмностьдо 100 тонн
+
ГеографияВ любую точку РФ
+
ПрименениеПеревозка труб, техники, конструкций
+
Длина платформыдо 16 м
+
+
+
+ + +
+
+ Трал с трубами +
Тралы / Трубоукладка
+
+
+

Тралы для перевозки труб большого диаметра

+
Не старше 5 лет
+
+
Грузоподъёмностьдо 80 тонн
+
Диаметр трубдо 1420 мм
+
ПрименениеДоставка трубных секций на объекты
+
КрепёжСпециальные ложементы
+
+
+
+ +
+
+
+ + +
+
+
+

География присутствия

+

Работаем во всех федеральных округах Российской Федерации. Особые условия для труднодоступных районов Крайнего Севера и заболоченных территорий.

+
+
+
+
+
УрФО
+
СФО
+
ПФО
+
СЗФО
+
ДФО
+
ЮФО
+
+
+

🔧 Труднодоступные районы

+

Мы располагаем специализированной техникой для работы в болотах ХМАО-Югры, ЯНАО, на севере Красноярского края, в Иркутской области. Гусеничная техника и лежневые настилы обеспечивают проходимость даже в самых сложных условиях.

+
+
+
+
+ География присутствия СТС-Авто +
+
+
+
+
+ + +
+
+
+

Лицензии и разрешения

+

Все необходимые допуски и сертификаты для выполнения работ на опасных производственных объектах. Полная прозрачность и соответствие требованиям законодательства РФ.

+
+
+
+
+

СРО — допуск к работам на опасных объектах

Свидетельство о допуске к работам на опасных производственных объектах нефтегазового комплекса.

+
+
+
+

Членство в НОСТРОЙ

Действующее членство в Национальном объединении строителей — допуск к строительным работам.

+
+
+
+

Сертификат ISO 9001 (качество)

Международный стандарт системы менеджмента качества.

+
+
+
+

Сертификат OHSAS 18001 (охрана труда)

Система менеджмента охраны труда и промышленной безопасности.

+
+
+
+

Договор ДМС для сотрудников

Добровольное медицинское страхование всех сотрудников.

+
+
+
+

Лицензия на заготовку и переработку лома

Лицензия на заготовку, хранение и переработку лома черных металлов.

+
+
+ +
+
+ + + + + +
+
+
+

Свяжитесь с нами

+

Оставьте заявку или позвоните — мы оперативно ответим на ваши вопросы и рассчитаем стоимость работ.

+
+
+
+
+ +
+
+ +
+
+
+

Адрес

г. Екатеринбург, ул. Московская, 11, оф. 702

+
+
+
+

Режим работы

Пн–Пт: 9:00 – 18:00
Сб: 10:00 – 15:00

+
+
+
+ Контакты СТС-Авто +
+
+
+
+

Оставить заявку

+

Заполните форму и мы свяжемся с вами в ближайшее время

+
+
+ + +
+
+ + +
+
+ + +
+ +

Нажимая кнопку, вы соглашаетесь на обработку персональных данных

+
+
+ +

Заявка отправлена!

+

Мы свяжемся с вами в ближайшее время

+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/server.js b/server.js new file mode 100644 index 0000000..479ac61 --- /dev/null +++ b/server.js @@ -0,0 +1,141 @@ +const express = require('express'); +const path = require('path'); +const fs = require('fs'); +const sqlite3 = require('sqlite3').verbose(); +const sharp = require('sharp'); +require('dotenv').config(); + +const app = express(); +const PORT = process.env.PORT || 3000; +const API_KEY = process.env.HOTEL777KEY; +if (!API_KEY) { + console.error('FATAL: HOTEL777KEY environment variable not set'); + process.exit(1); +} + +const imgDir = path.join(__dirname, 'public', 'img'); +const supportedFormats = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff']; + +async function convertImagesToWebp() { + if (!fs.existsSync(imgDir)) { + console.log('📁 Папка img не найдена, пропускаем конвертацию'); + return; + } + + const files = fs.readdirSync(imgDir); + const toConvert = files.filter(f => { + const ext = path.extname(f).toLowerCase(); + return supportedFormats.includes(ext) && !f.endsWith('.webp'); + }); + + if (toConvert.length === 0) { + console.log('✅ Все изображения уже в формате WebP'); + return; + } + + console.log(`🔄 Конвертация ${toConvert.length} изображений в WebP...`); + + for (const file of toConvert) { + const inputPath = path.join(imgDir, file); + const outputPath = path.join(imgDir, path.basename(file, path.extname(file)) + '.webp'); + + try { + await sharp(inputPath) + .webp({ quality: 85 }) + .toFile(outputPath); + fs.unlinkSync(inputPath); + console.log(` ✅ ${file} → ${path.basename(outputPath)}`); + } catch (err) { + console.error(` ❌ Ошибка конвертации ${file}:`, err.message); + } + } + + console.log('✅ Конвертация завершена'); +} + +// Middleware +app.use(express.json()); +app.use(express.static(path.join(__dirname, 'public'))); + +// Ensure data directory and database +const dataDir = path.join(__dirname, 'data'); +if (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir); +const dbPath = path.join(dataDir, 'bookings.db'); +const db = new sqlite3.Database(dbPath); + +db.run(`CREATE TABLE IF NOT EXISTS leads ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + phone TEXT NOT NULL, + message TEXT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP +)`); + +// API: POST /api/leads – сохранить новую заявку (публичный) +app.post('/api/leads', (req, res) => { + const { name, phone, message } = req.body; + if (!name || !phone) { + return res.status(400).json({ error: 'Missing required fields: name, phone' }); + } + const stmt = db.prepare(`INSERT INTO leads (name, phone, message) VALUES (?, ?, ?)`); + stmt.run(name.trim(), phone.trim(), (message || '').trim(), function(err) { + if (err) { + console.error(err); + return res.status(500).json({ error: 'Database error' }); + } + console.log(`✅ Новая заявка #${this.lastID}: ${name} | ${phone}`); + res.status(201).json({ id: this.lastID, message: 'Lead saved' }); + }); + stmt.finalize(); +}); + +// API: GET /api/leads – получить список всех заявок (требуется API-ключ) +app.get('/api/leads', (req, res) => { + const providedKey = req.headers['x-api-key']; + if (!providedKey || providedKey !== API_KEY) { + return res.status(401).json({ error: 'Invalid or missing API key' }); + } + db.all(`SELECT id, name, phone, message, created_at FROM leads ORDER BY created_at DESC`, (err, rows) => { + if (err) { + console.error(err); + return res.status(500).json({ error: 'Database error' }); + } + res.json(rows); + }); +}); + +// API: DELETE /api/leads/:id – удалить заявку (требуется API-ключ) +app.delete('/api/leads/:id', (req, res) => { + const providedKey = req.headers['x-api-key']; + if (!providedKey || providedKey !== API_KEY) { + return res.status(401).json({ error: 'Invalid or missing API key' }); + } + const id = parseInt(req.params.id); + if (isNaN(id)) { + return res.status(400).json({ error: 'Invalid ID' }); + } + const stmt = db.prepare(`DELETE FROM leads WHERE id = ?`); + stmt.run(id, function(err) { + if (err) { + console.error(err); + return res.status(500).json({ error: 'Database error' }); + } + if (this.changes === 0) { + return res.status(404).json({ error: 'Lead not found' }); + } + console.log(`🗑️ Удалена заявка #${id}`); + res.json({ message: 'Lead deleted' }); + }); + stmt.finalize(); +}); + +// Serve frontend +app.get('/', (req, res) => { + res.sendFile(path.join(__dirname, 'public', 'index.html')); +}); + +app.listen(PORT, async () => { + await convertImagesToWebp(); + console.log(`✅ server running on http://localhost:${PORT}`); + console.log(`🔑 API Key: ${API_KEY}`); +}); \ No newline at end of file