Initial commit: TopSysOps site + admin panel

Multi-page public site (Next.js), Node/Express backend with Postgres,
and Vite admin/account app, restructured from a single-page layout
into dedicated service, promotions, cases, about, FAQ, and blog pages
for SEO.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013otXCiTZsxdZ4SJKZ9wUky
This commit is contained in:
ogrechkoandClaude Sonnet 5 committed 2026-08-25 23:12:16 +03:00
commit 130c5382cd
108 files changed
+7146

No files matched your search

@@ -0,0 +1,55 @@
-- Обновление прайс-листа: убирает старую заглушку "Разработка сайтов" (от 5 000 ₽)
-- и добавляет новую линейку "Разработка под ключ" + "White-label и партнёрство".
-- Безопасно выполнять повторно - использует WHERE NOT EXISTS, дублей не создаст.
-- Запуск:
-- docker compose exec -T db psql -U topsysops topsysops < backend/scripts/2026-07-update-services.sql
BEGIN;
-- 1) Убираем старую заглушку "Разработка сайтов" (каскадно удалит её позицию "Лендинг")
DELETE FROM service_categories WHERE slug = 'web';
-- 2) Новая категория: Разработка под ключ
INSERT INTO service_categories (slug, title, description, icon, sort_order)
SELECT 'development', 'Разработка под ключ',
'От быстрого MVP до продакшн-разработки и сопровождения', 'Rocket',
(SELECT COALESCE(MAX(sort_order), -1) + 1 FROM service_categories)
WHERE NOT EXISTS (SELECT 1 FROM service_categories WHERE slug = 'development');
INSERT INTO service_items (category_id, name, price_text, period, note, sort_order)
SELECT (SELECT id FROM service_categories WHERE slug = 'development'),
v.name, v.price_text, v.period, v.note, v.sort_order
FROM (VALUES
('MVP «Быстрый старт»', 'от 120 000 ₽', '', 'Посадочная страница, форма/бот для заявок, простая админка - 2-3 недели', 0),
('MVP Pro', 'от 450 000 ₽', '', 'Личный кабинет с авторизацией, оплата, ИИ-ассистент - 4-6 недель', 1),
('Продакшн-разработка', 'от 1 200 000 ₽', '', 'Архитектура, тесты, DevOps, масштабирование - от 2 месяцев, точная смета после дискавери', 2),
('Discovery-воркшоп', 'от 30 000 ₽', '', 'Фиксация ТЗ и оценки перед стартом проекта - 1-2 дня', 3),
('Сопровождение проекта', 'от 40 000 ₽', '/мес', 'Ежемесячные доработки уже готовых продуктов', 4)
) AS v(name, price_text, period, note, sort_order)
WHERE NOT EXISTS (
SELECT 1 FROM service_items
WHERE category_id = (SELECT id FROM service_categories WHERE slug = 'development') AND name = v.name
);
-- 3) Новая категория: White-label и партнёрство
INSERT INTO service_categories (slug, title, description, icon, sort_order)
SELECT 'partners', 'White-label и партнёрство',
'Готовые решения для других компаний и программы сотрудничества', 'Handshake',
(SELECT COALESCE(MAX(sort_order), -1) + 1 FROM service_categories)
WHERE NOT EXISTS (SELECT 1 FROM service_categories WHERE slug = 'partners');
INSERT INTO service_items (category_id, name, price_text, period, note, sort_order)
SELECT (SELECT id FROM service_categories WHERE slug = 'partners'),
v.name, v.price_text, v.period, v.note, v.sort_order
FROM (VALUES
('White-label «Кабинет + ИИ-ассистент»', 'от 500 000 ₽', '', 'Личный кабинет с авторизацией и ИИ-чатом под брендом вашей компании', 0),
('IT-мониторинг сайта', 'от 10 000 ₽', '/мес', 'Аптайм, скорость загрузки, уведомления об инцидентах', 1),
('Реферальная программа', '10%', 'от суммы контракта', 'Бонус вам за рекомендацию нас новому клиенту', 2),
('Партнёрская программа', 'по договорённости', '', 'Комиссия для хостинг-провайдеров и поставщиков оборудования за рекомендации', 3)
) AS v(name, price_text, period, note, sort_order)
WHERE NOT EXISTS (
SELECT 1 FROM service_items
WHERE category_id = (SELECT id FROM service_categories WHERE slug = 'partners') AND name = v.name
);
COMMIT;