Shumiland/src/lib/structuredData.ts
Vadym Samoilenko f2a560f9e6 feat: kvytky 1:1 redesign, CMS-driven pages, blog/group/birthday updates, green-wave pattern, image optimization
- /kvytky: combo grid (cart add), tabbed catalog with Figma chips/photos, CMS-editable (TicketsPage global)
- Tariffs collection: infoChips, badgeLabel, category zone/attraction/program, manual tickets
- Birthday & Group pages: Figma design + real photos, pricing sections removed (form-only), unified form style
- Thank-you page (pidtverdzhennya) from Figma; combo cards redesigned (4-up grid)
- Reviews coverflow slider; blog photos fixed (relative media URLs for next/image)
- JSON-LD (WebPage/LocalBusiness/CollectionPage/Service) on home/lokatsii/birthday/group
- Footer: photo bg + AImpress credit link; green wave pattern on green sections; consistent footer
- Imported 3 real blog posts from staging; fixed text artifacts
- Optimized 118 images 563MB -> 72MB (resize 1920px + re-encode)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 16:46:52 +01:00

142 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const SITE = 'https://shumiland.com.ua'
const PHONE = '+380671443635'
const ADDRESS = {
'@type': 'PostalAddress',
streetAddress: 'проспект Академіка Глушкова 1',
addressLocality: 'Kyiv',
postalCode: '03127',
addressCountry: 'UA',
} as const
const GEO = {
'@type': 'GeoCoordinates',
latitude: '50.37643634125753',
longitude: '30.481764113469257',
} as const
const SAME_AS = [
'https://www.instagram.com/shumiland_park',
'https://www.facebook.com/people/%D0%A8%D1%83%D0%BC%D1%96%D0%BB%D0%B5%D0%BD%D0%B4/61575845978823/',
'https://www.tiktok.com/@shumiland_park',
]
const ALL_ATTRACTIONS = [
{ name: 'Динопарк', description: 'Найбільші динозаври України у Шуміленді.' },
{
name: 'Диволіс із казковими фігурами',
description: 'Казковий ліс із чарівними фігурами для дітей.',
},
{ name: 'Дзеркальний лабіринт', description: 'Захоплюючий лабіринт із дзеркалами.' },
{ name: 'Тир з призами', description: 'Розважальний тир із можливістю виграти призи.' },
{ name: 'Дитячий майданчик', description: 'Ігрова зона для найменших відвідувачів.' },
{
name: 'Програми з аніматорами',
description: 'Веселі шоу та інтерактивні програми з аніматорами.',
},
]
function attractions(isPartOf: string, count = ALL_ATTRACTIONS.length) {
return ALL_ATTRACTIONS.slice(0, count).map((a) => ({
'@type': 'TouristAttraction',
name: a.name,
description: a.description,
isPartOf,
}))
}
const BUSINESS = {
'@type': 'LocalBusiness',
name: 'Парк Розваг «Шуміленд»',
alternateName: 'Shumiland',
url: `${SITE}/`,
telephone: PHONE,
address: ADDRESS,
geo: GEO,
openingHours: 'Mo-Su 10:00-20:00',
sameAs: SAME_AS,
} as const
// 1. Home — https://shumiland.com.ua/
export const homePageJsonLd: Record<string, unknown> = {
'@context': 'https://schema.org',
'@type': 'WebPage',
name: 'Парк Розваг «Шуміленд»',
url: `${SITE}/`,
description:
'Сімейний парк розваг у Києві: динопарк, диволіс із казковими фігурами, дзеркальний лабіринт, тир з призами, дитячий майданчик, програми з аніматорами. Найбільші динозаври України.',
mainEntity: {
...BUSINESS,
offers: {
'@type': 'Offer',
url: `${SITE}/kvytky`,
priceCurrency: 'UAH',
availability: 'https://schema.org/InStock',
},
containsPlace: attractions(`${SITE}/`),
},
}
// 2. Locations — /lokatsii
export const locationsPageJsonLd: Record<string, unknown> = {
'@context': 'https://schema.org',
'@type': 'CollectionPage',
name: 'Локації у Парку Розваг «Шуміленд»',
url: `${SITE}/lokatsii`,
description:
'Перелік локацій у парку розваг «Шуміленд»: динопарк, диволіс із казковими фігурами, дзеркальний лабіринт, тир з призами, дитячий майданчик, програми з аніматорами.',
mainEntity: {
...BUSINESS,
offers: {
'@type': 'Offer',
url: `${SITE}/kvytky`,
priceCurrency: 'UAH',
availability: 'https://schema.org/InStock',
},
containsPlace: attractions(`${SITE}/lokatsii`),
},
}
// 3. Birthdays — /dni-narodzhennia
export const birthdayPageJsonLd: Record<string, unknown> = {
'@context': 'https://schema.org',
'@type': 'WebPage',
name: 'Дні народження у Парку Розваг «Шуміленд»',
url: `${SITE}/dni-narodzhennia`,
description:
'Організація дитячих та сімейних днів народження у парку розваг «Шуміленд» у Києві. Атракціони, динопарк, диволіс, дзеркальний лабіринт, тир з призами, дитячий майданчик та програми з аніматорами.',
mainEntity: {
'@type': 'Service',
serviceType: 'Організація святкування днів народження',
provider: BUSINESS,
offers: {
'@type': 'Offer',
url: `${SITE}/dni-narodzhennia#order-form`,
priceCurrency: 'UAH',
availability: 'https://schema.org/InStock',
},
containsPlace: attractions(`${SITE}/dni-narodzhennia`),
},
}
// 4. Group visits — /grupovi-vidviduvannia
export const groupVisitsPageJsonLd: Record<string, unknown> = {
'@context': 'https://schema.org',
'@type': 'WebPage',
name: 'Групові відвідування у Парку Розваг «Шуміленд»',
url: `${SITE}/grupovi-vidviduvannia`,
description:
'Організація групових відвідувань у парку розваг «Шуміленд» у Києві. Доступні локації: динопарк та диволіс із казковими фігурами.',
mainEntity: {
'@type': 'Service',
serviceType: 'Групові відвідування та екскурсії',
provider: BUSINESS,
offers: {
'@type': 'Offer',
url: `${SITE}/grupovi-vidviduvannia#order-form`,
priceCurrency: 'UAH',
availability: 'https://schema.org/InStock',
},
containsPlace: attractions(`${SITE}/grupovi-vidviduvannia`, 2),
},
}