chore: home page and site config seeding scripts

This commit is contained in:
Zotov Ivan Yuryevich
2026-06-22 22:14:40 +03:00
parent 460998aa6e
commit c630235176
6 changed files with 727 additions and 3 deletions

View File

@@ -1,5 +1,36 @@
import { defineCollection, z } from 'astro:content'
import { glob } from 'astro/loaders'
import { file, glob } from 'astro/loaders'
const iconValue = z.enum([
'cloud',
'shield',
'cpu',
'database',
'server',
'settings',
'building',
'shopping_cart',
'factory',
'heart',
'graduation_cap',
'landmark',
'rocket',
'zap',
'award',
'users',
'check_circle',
'package',
])
const colorValue = z.enum([
'blue',
'violet',
'emerald',
'orange',
'pink',
'indigo',
'cyan',
])
const vendorSchema = z.object({
name: z.string(),
@@ -18,4 +49,115 @@ const categories = defineCollection({
}),
})
export const collections = { categories }
const heroSection = z.object({
type: z.literal('hero'),
title: z.string(),
description: z.string(),
anchor: z.string().nullable(),
badge: z.string(),
stats: z.array(z.object({ key: z.string(), value: z.string() })),
})
const servicesSection = z.object({
type: z.literal('services'),
title: z.string(),
description: z.string(),
anchor: z.string().nullable(),
cards: z.array(
z.object({
title: z.string(),
description: z.string(),
icon: iconValue,
color: colorValue,
category: z.string(),
}),
),
})
const solutionsSection = z.object({
type: z.literal('solutions'),
title: z.string(),
description: z.string(),
anchor: z.string().nullable(),
cards: z.array(
z.object({
title: z.string(),
description: z.string(),
footnote: z.string(),
icon: iconValue,
category: z.string(),
}),
),
})
const casesSection = z.object({
type: z.literal('cases'),
title: z.string(),
description: z.string(),
anchor: z.string().nullable(),
cards: z.array(
z.object({
title: z.string(),
description: z.string(),
pretitle: z.string(),
badge: z.string(),
footnote: z.string(),
color: colorValue,
icon: iconValue,
}),
),
})
const aboutSection = z.object({
type: z.literal('about'),
title: z.string(),
description: z.string(),
anchor: z.string().nullable(),
partners: z.array(z.string()),
cards: z.array(
z.object({
title: z.string(),
description: z.string(),
color: colorValue,
icon: iconValue,
}),
),
})
const homePage = defineCollection({
loader: file('./src/content/home-page.json', {
parser: (text) => ({ 'home-page': JSON.parse(text) }),
}),
schema: z.object({
sections: z.array(
z.discriminatedUnion('type', [
heroSection,
servicesSection,
solutionsSection,
casesSection,
aboutSection,
]),
),
}),
})
const contactSchema = z.object({
type: z.enum(['phone', 'working_hours', 'email', 'address']),
value: z.string(),
displayValue: z.string(),
})
const siteConfig = defineCollection({
loader: file('./src/content/site-config.json', {
parser: (text) => ({ 'site-config': JSON.parse(text) }),
}),
schema: z.object({
title: z.string(),
description: z.string().nullable(),
contacts: z.array(contactSchema),
privacyPolicy: z.object({ url: z.string() }).nullable(),
termsOfUse: z.object({ url: z.string() }).nullable(),
}),
})
export const collections = { categories, homePage, siteConfig }

196
src/content/home-page.json Normal file
View File

@@ -0,0 +1,196 @@
{
"sections": [
{
"type": "hero",
"title": "IT-решения для роста вашего бизнеса",
"description": "Проектируем, внедряем и сопровождаем корпоративные IT-системы. Облачная инфраструктура, безопасность, автоматизация процессов.",
"anchor": null,
"badge": "Надежный партнер с 2021 года",
"stats": [
{ "key": "клиентов", "value": "300+" },
{ "key": "партнерств", "value": "50+" },
{ "key": "повторных обращений", "value": "95%" }
]
},
{
"type": "services",
"title": "Комплексные IT-решения для вашего бизнеса",
"description": "Полный цикл: от стратегии до технической поддержки",
"anchor": null,
"cards": [
{
"title": "Облачные решения",
"description": "Миграция и управление инфраструктурой на базе Яндекс.Облако и VK Cloud",
"icon": "cloud",
"color": "blue",
"category": "cloud"
},
{
"title": "Кибербезопасность",
"description": "Комплексная защита периметра и данных с решениями Kaspersky",
"icon": "shield",
"color": "violet",
"category": "cybersecurity"
},
{
"title": "Цифровая трансформация",
"description": "Автоматизация процессов на платформах 1С и Галактика",
"icon": "cpu",
"color": "emerald",
"category": "implementation"
},
{
"title": "Управление данными",
"description": "Развертывание и поддержка СУБД Postgres Pro",
"icon": "database",
"color": "orange",
"category": "integration"
},
{
"title": "Серверная инфраструктура",
"description": "Поставка и настройка оборудования Kraftway",
"icon": "server",
"color": "pink",
"category": "cloud"
},
{
"title": "Системная интеграция",
"description": "Построение корпоративной ИТ-архитектуры на Astra Linux",
"icon": "settings",
"color": "indigo",
"category": "industrial-solutions"
}
]
},
{
"type": "solutions",
"title": "Решения под ключ для разных отраслей",
"description": "Глубокое понимание специфики бизнеса в каждой отрасли",
"anchor": null,
"cards": [
{
"title": "Корпоративный сектор",
"description": "ERP, CRM, автоматизация документооборота",
"footnote": "1200+ проектов",
"icon": "building",
"category": "business"
},
{
"title": "Ритейл и e-commerce",
"description": "Омниканальные платформы продаж",
"footnote": "850+ проектов",
"icon": "shopping_cart",
"category": "business"
},
{
"title": "Производство",
"description": "IoT, системы управления производством",
"footnote": "650+ проектов",
"icon": "factory",
"category": "specialized-services"
},
{
"title": "Здравоохранение",
"description": "Медицинские информационные системы",
"footnote": "420+ проектов",
"icon": "heart",
"category": "implementation"
},
{
"title": "Образование",
"description": "Платформы дистанционного обучения",
"footnote": "380+ проектов",
"icon": "graduation_cap",
"category": "specialized-services"
},
{
"title": "Государственный сектор",
"description": "Цифровизация госуслуг",
"footnote": "500+ проектов",
"icon": "landmark",
"category": "government"
}
]
},
{
"type": "cases",
"title": "Реализованные проекты",
"description": "Примеры успешного внедрения с конкретными результатами",
"anchor": null,
"cards": [
{
"title": "Миграция в Яндекс.Облако",
"description": "Перенос корпоративной инфраструктуры 500+ серверов с нулевым простоем",
"pretitle": "Торговая сеть",
"badge": "Облако",
"footnote": "−40% TCO",
"color": "blue",
"icon": "cloud"
},
{
"title": "Внедрение 1С:ERP",
"description": "Автоматизация производственного и финансового учета для 15 предприятий",
"pretitle": "Производственный холдинг",
"badge": "Автоматизация",
"footnote": "+25% эффективность",
"color": "emerald",
"icon": "cpu"
},
{
"title": "Защита периметра Kaspersky",
"description": "Построение многоуровневой системы защиты критичной инфраструктуры",
"pretitle": "Финансовая группа",
"badge": "Безопасность",
"footnote": "99.9% uptime",
"color": "violet",
"icon": "shield"
}
]
},
{
"type": "about",
"title": "Сотрудничаем с",
"description": "Комплексные решения для цифровой трансформации бизнеса. Работаем с 2021 года.",
"anchor": null,
"partners": ["Видеомост", "Jazz Telecom", "СКБ Контур"],
"cards": [
{
"title": "Поставка оборудования",
"description": "Комплексные поставки серверов, СХД и сетевого оборудования от российских производителей.",
"color": "blue",
"icon": "package"
},
{
"title": "Официальное партнерство",
"description": "Статус золотого партнера ведущих российских вендоров. Прямые контракты и поддержка.",
"color": "emerald",
"icon": "award"
},
{
"title": "Сертифицированные специалисты",
"description": "Инженеры с подтвержденной квалификацией по всем внедряемым решениям и платформам.",
"color": "violet",
"icon": "check_circle"
},
{
"title": "Оперативный отклик",
"description": "Быстрое реагирование на запросы клиента. Четкие сроки решения задач и прозрачная коммуникация.",
"color": "orange",
"icon": "zap"
},
{
"title": "Выделенная команда",
"description": "Персональный менеджер проекта и команда сертифицированных специалистов.",
"color": "cyan",
"icon": "users"
},
{
"title": "Быстрый старт",
"description": "Запуск типовых проектов за 2 недели. Пилотное внедрение перед полным развертываием.",
"color": "pink",
"icon": "rocket"
}
]
}
]
}

View File

@@ -0,0 +1,28 @@
{
"title": "СОФТКЛИК",
"description": null,
"contacts": [
{
"type": "phone",
"value": "+74951234567",
"displayValue": "+7 (495) 123-45-67"
},
{
"type": "working_hours",
"value": "Пн-Пт 9:00-18:00",
"displayValue": "Пн-Пт 9:00-18:00"
},
{
"type": "email",
"value": "mailto:info@softclick.ru",
"displayValue": "info@softclick.ru"
},
{
"type": "address",
"value": "Москва, Пресненская наб., 12",
"displayValue": "Москва, Пресненская наб., 12"
}
],
"privacyPolicy": null,
"termsOfUse": null
}