Commit graph

72 commits

Author SHA1 Message Date
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
Vadym Samoilenko
00a3ae163a Merge remote-tracking branch 'origin/main'
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
2026-06-01 21:36:07 +01:00
Vadym Samoilenko
a3618448a8 feat(dynopark): hero banner, 5-dino wheel, silhouette dinos + deploy assets
- DinoPageContent: wheel shows exactly 5 dinos in the bottom bowl (fixed 30°
  slot, decoupled from CMS dino count; far nodes parked off-screen)
- non-active dinos darkened to silhouettes, active stays full color
- hero banner swapped to blue T-Rex, height 1096px, 12px gap below header
- optimize heavy CMS images (61MB -> 9MB) and commit media + public assets
  so git holds everything needed for deploy

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 21:33:40 +01:00
Vadym Samoilenko
4575717c73 fix: DinoWheel — bigger wheel, correct initial angle (active top), 4-photo gallery, orange segments
- Wheel size increased: 1500px at 1440vw, overflows and clips correctly
- Fixed initial wheelAngle from 270 → -(180/n) so item[0] is at top on load
- Segment colors: unified warm orange, only active+adjacent highlighted
- Removed pagination dots/arrows (not in Figma)
- Gallery: 4 photos in grid, no border, rounded corners
- page.tsx: use FALLBACK when CMS has < 20 dinos (maps epoch→latinName, weight→height)
2026-05-31 13:43:04 +01:00
Vadym Samoilenko
ab4ca5ea64 fix: DinoWheel — sync 25 dino FALLBACK data with Figma + add Quetzalcoatlus asset
- Fixed subtitles for all 25 dinosaurs per Figma dino_slider variants
- Added missing latinNames (Baryonyx, Oviraptor, Spinosaurus, Carnotaurus, etc.)
- Fixed Quetzalcoatlus: real Figma asset downloaded, length 6.5m
- Fixed Карнотавр ДиноРодео imageUrl to carnotaurus_1.jpg
- Fixed Тиранозавр що прогулюються парком imageUrl
- Removed duplicate brackets from subtitle display (data carries brackets)
- Added all 35 dynopark image assets to public/dynopark/
2026-05-31 13:30:12 +01:00
Vadym Samoilenko
2d82e39e25 feat: DinoWheel — arc segments with active highlight, gradient yellow→dark, colored active dino photo
- Replaced flat gradient circle with individual arc segments using arcPath SVG helper
- Active segment: bright yellow #F5D169, fades to dark brown at edges (6-level palette)
- Active dino icon: 12% wheelSize (was 10%), uses DINO_ACTIVE_RADIUS for positioning
- segFill() computes color by distance from active index (circular wrap)
- Fixed angleForItem() → -((i+0.5)*360/n) so active segment always at 12 o'clock
- naturalDeg for icons = (i+0.5)*step to center icon within segment
- Added Baryonyx and Kosmoceratops real photo imageUrls
2026-05-31 13:14:19 +01:00
Vadym Samoilenko
abdef5e0bb fix: DinoHero — correct bg #F2F5E8, dark text, green pills, T-Rex right col only 2026-05-31 12:53:41 +01:00
Vadym Samoilenko
b02954ef77 feat(dynopark): pixel-perfect Figma redesign of all 6 DinoXxx sections
Some checks failed
CI / Type Check (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
Deploy / Build & Push Image (push) Has been cancelled
Deploy / Deploy to VPS (push) Has been cancelled
- DinoHero: dark bg (#1e1e1e), white text, T-Rex from /dynopark/, orange-amber circle
- DinoWheel: vertical layout (info → arch → photos), 25 dinos with real /dynopark/ images,
  orange-framed photo gallery at bottom, responsive wheel size via useRef
- DinoGallery: updated fallback images to /dynopark/ real park photos
- DinoActivities: photo-overlay portrait cards, gradient, price badges, exact UA text;
  sm:grid-cols-2 md:grid-cols-3 (project uses --breakpoint-lg: 1440px)
- DinoWhyVisit: photo carousel (Gemini park photos) replaces video default,
  "ЗАРАЗ МИ ДІЗНАЄМОСЯ..." label overlay, exact accordion text from Figma
- DinoTickets: dark green #396817 + wave bg pattern, large price typography (64px/900),
  "Забронювати пригоду" CTA, working hours banner, keeps cart functionality

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 12:39:41 +01:00
Vadym Samoilenko
7a26ace8e4 feat(dynopark): pixel-perfect Figma redesign of all 6 DinoXxx sections
- DinoHero: dark bg (#1e1e1e), white text, T-Rex from /dynopark/, orange-amber circle
- DinoWheel: vertical layout (info → arch → photos), 25 dinos with real /dynopark/ images,
  orange-framed photo gallery at bottom, responsive wheel size via useRef
- DinoGallery: updated fallback images to /dynopark/ real park photos
- DinoActivities: photo-overlay portrait cards, gradient, price badges, exact UA text;
  sm:grid-cols-2 md:grid-cols-3 (project uses --breakpoint-lg: 1440px)
- DinoWhyVisit: photo carousel (Gemini park photos) replaces video default,
  "ЗАРАЗ МИ ДІЗНАЄМОСЯ..." label overlay, exact accordion text from Figma
- DinoTickets: dark green #396817 + wave bg pattern, large price typography (64px/900),
  "Забронювати пригоду" CTA, working hours banner, keeps cart functionality

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 12:33:53 +01:00
Vadym Samoilenko
83d274f0ba feat(pages): implement all 6 pages from Figma + fix nav dropdown
Pages implemented:
- grupovi-vidviduvannia: tilted polaroid banners, amenity grid, wave pricing, correct Figma tile pattern
- dni-narodzhennia: hero, package cards, pricing, order form
- kvytky: horizontal ticket rows with photos, tabs, combo, benefits accordion
- kvytky/dyakuiemo: SVG ticket shape with perforations
- dynozavry: DinoWheel 25 dinosaurs with real images + gallery (node 2004:560/568)
- HeroSlider: vertical slider with 6 slides

Components:
- DinoWheel: complete 25-dino dataset from Figma, orange semicircle SVG rotation, gallery below
- KvytkyTicketsClient: rewritten to horizontal row layout matching Figma
- HeaderClient: remove overflow-hidden clipping dropdown; add chevron indicator
- Header: inherit DEFAULT_NAV children when CMS has no children for that item

Fixes:
- Nav dropdown: CMS was overriding DEFAULT_NAV without children — now inherits
- Wave pattern: use correct Figma wave tile (wave-tile-correct.png, 657x868px) for .wave-bg-pricing
- Lokatsii nav links: ДиноПарк → /lokatsii/dynozavry, ДивоЛіс → /lokatsii/dyvolis

Assets: 35+ new images (dino-*, group-*, birthday-*, ticket-*, gallery)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 20:02:50 +01:00
Vadym Samoilenko
f317de7b0f feat(assets): connect static images as fallbacks; fix location slug mapping
Some checks failed
CI / Type Check (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
Deploy / Build & Push Image (push) Has been cancelled
Deploy / Deploy to VPS (push) Has been cancelled
- DinoGallery: add real park photos as static fallback (T-Rex, aerial, arch)
- DinoHero: use T-Rex PNG as fallback when no CMS heroImage uploaded
- Locations/lokatsii: add DB slug aliases (dzerkalnyi-labiryt→maze, tyr→tir,
  maiydanchyk→playground) so all 5 locations get correct images

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 17:04:57 +01:00
Vadym Samoilenko
ef693589bc fix(header,accordion): liquid-glass header + progress bar animation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 16:51:24 +01:00
Vadym Samoilenko
32e0f688d1 fix(header,sliders): solid green header + fix coverflow overflow clipping
- Header: remove liquid-glass transparency; solid #396817 background so header
  no longer bleeds orange from the hero background
- GallerySlider/DinoGallery/DyvoLisGallery: change overflow-hidden to
  overflowX:clip so side cards in 3D coverflow are visible

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 16:35:15 +01:00
Vadym Samoilenko
6863f5022d feat(pages): redesign all 6 pages to match Figma designs with full CMS coverage
- Birthday: new pricing structure (component breakdown instead of packages),
  packageItems with image upload per card, why/accordion CMS fields
- GroupVisits: all text/prices/images CMS-editable (heroDescription, amenities,
  featureImages, workingHours, price, bottomImages, etc.)
- DyvoLis: fixed 404 (seed location record), combo tickets now show (600/1500/1800/2000)
- ThankYou: DyvoLis topiary background, 'Купити квиток' button text
- Tariffs: updated to match Figma (300/150/300/50 dyno + 4 combo variants)
- Seed: add DyvoLis location, correct hero text and section titles for home

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 16:27:24 +01:00
Vadym Samoilenko
095beb0303 fix(assets): rename assets to v2 to bust immutable browser cache; fix /images/ cache header
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Rename all new Figma 2026 assets to *-v2.webp so browsers load fresh
  copies instead of serving year-old cached originals
- Change Cache-Control for /images/ from immutable (1 year) to
  must-revalidate (1 day) — public/ files are mutable, not hashed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 15:13:44 +01:00
Vadym Samoilenko
0e732bfbd5 feat(home): apply Figma design — new hero + location photos, WhyParents gallery
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Hero: "Започаткуйте традицію:" title at 96px, subtitle 48px/Black
  (щороку фотографуйтесь біля улюбленого динозавра); removed separate
  T-Rex/family overlays — T-Rex now baked into hero-bg2
- WhyParents: replaced desktop auto-scroll photo gallery with 3 static
  video thumbnail cards with play buttons (Figma Gallery_holder layout)
- Assets: replace hero + 5 location images with real 2026 park photos
  from Figma; add why-parents-video.webp thumbnail

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 15:01:19 +01:00
Vadym Samoilenko
492f7934b6 feat(home): update hero typography + locations slider layout
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Hero: larger title (clamp to 120px), wider text block, adjusted padding
- LocationsSlider: overlay moved to left side, white text color, larger description

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 14:33:06 +01:00
Vadym Samoilenko
4cc6586366 fix(gallery): replace CSS scroll with 3D coverflow slider everywhere; fix migration SEO columns
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- GallerySlider: rewrite to 3D coverflow (rotateY perspective, 3.5s auto-rotate,
  dots + arrows, lightbox on center click) — matches DyvoLisGallery style
- migration 0006: add meta_title/description/image_id columns for seoPlugin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 14:17:12 +01:00
Vadym Samoilenko
ef629dbdbe feat(pages): add dinosaur park page + redesign birthday, group visits, thank-you
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
New pages:
- /lokatsii/dynozavry — DinosaurPage (static ISR): DinoHero, DinoWheel (interactive
  8-species arc selector, auto-rotate 4s), DinoGallery, DinoActivities, DinoWhyVisit,
  DinoTickets (ezy API dyno+combo categories)
- /kvytky/dyakuiemo — thank-you page with ticket-shaped card design

Redesigned pages:
- /dni-narodzhennia — new hero, "Що входить" 6-card section, WhyVisit accordion,
  pricing grid from BirthdayPackages CMS, form preserved
- /grupovi-vidviduvannia — new hero overlay, description band, amenity 2x2 grid,
  350 грн ticket card, bottom CTA section, form preserved

New CMS:
- DinosaurPage global (slug: dinosaur-page) with 7 array sub-tables
- migration 0006_dinosaur_page.sql — idempotent, creates all tables + dynozavry location
- seed/route.ts — seeds DinosaurPage global with 8 dino species defaults
- payload.config.ts — registers DinosaurPage in globals, seoPlugin, livePreview

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 13:28:52 +01:00
Vadym Samoilenko
85d2f7d16e fix(forms): fix message render, confirmation text, radio disabled, placeholder, replyTo
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Replace dangerouslySetInnerHTML with extractLexicalText helper for message blocks
- Show CMS confirmationMessage text on success instead of hardcoded string
- Disable radio field in plugin config (not rendered in FormBlock)
- Remove placeholder from text/number/textarea/date seed fields (plugin ignores them)
- Replace {{email}} replyTo template with static manager email fallback

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 12:13:22 +01:00
Vadym Samoilenko
42cb554de4 feat(forms): use FormBlock when form is set in CMS, fallback to hardcoded
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 12:07:04 +01:00
Vadym Samoilenko
32ca1dcd2a fix(forms): use ternary className to preserve md:col-span-2 for full-width fields 2026-05-18 12:05:41 +01:00
Vadym Samoilenko
6e5e624345 feat(forms): add FormBlock component for form-builder rendering 2026-05-18 12:05:17 +01:00
Vadym Samoilenko
965ffc2084 fix(live-preview): fallback serverURL to localhost instead of empty string
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
postMessage with empty string origin throws "Invalid target origin ''"
Use same fallback as payload.config.ts — http://localhost:3000.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 18:46:55 +01:00
Vadym Samoilenko
f808ad6b42 feat(cms): add Live Preview RefreshRouteOnSave to key pages
Install @payloadcms/live-preview-react and add RefreshRouteOnSave
component to home, lokatsii/[slug], dni-narodzhennia, grupovi-vidviduvannia,
kvytky — Payload Admin live preview now triggers client router.refresh().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 16:55:41 +01:00
Vadym Samoilenko
2a535671b6 fix(widget): move Binotel button to bottom-left
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 11:20:20 +01:00
Vadym Samoilenko
1378b9a809 feat(widget): replace Binotel smart-button with styled GetCall widget
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Switch to getcall widget script, position button bottom-right, apply
Shumiland brand colors (green #396817 / orange #f28b4a), and use
Shumi mascot photo as button icon.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 11:12:50 +01:00
Vadym Samoilenko
1c08076963 feat(video): add video reviews to DyvoLis + homepage, fix importMap & ISR
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Dockerfile: run generate:importmap before next build (fixes admin "Nothing found" and SEO fields)
- lokatsii/page.tsx: revalidate 3600→60 (fixes empty page after deploy)
- DyvoLisWhyVisit: replace 5 static image posters with 7 actual clickable videos; accept reviewVideos prop from CMS
- DyvoLisPage global: add reviewVideos array (text src/poster/label fields, CMS-editable)
- Reviews collection: add videoUrl + videoPoster text fields
- Reviews component: VideoReviewCard accepts src/poster props, renders dynamically from CMS reviews with videoUrl
- types/globals.ts: add videoUrl/videoPoster to ReviewCMS interface
- public/videos/dyvolis/: 7 converted MP4s (720p crf28) + 7 poster JPGs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 18:53:23 +01:00
Vadym Samoilenko
7c5b5979bd feat(cms): wire DyvoLis gallery to CMS, fix eslint config
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Add galleryImages array field to DyvoLisPage global so the photo gallery
is editable from Payload admin. Component falls back to 24 static images
when no CMS images are uploaded. Fix eslint flat-config error caused by
referencing @typescript-eslint plugin without an explicit import.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 18:01:45 +01:00
Vadym Samoilenko
d0434dda9b feat(cms): upgrade Payload 3.33→3.84, add SEO plugin, connect hardcoded pages to CMS
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Upgrade payload + all @payloadcms/* packages to 3.84.1
- Update minor/patch deps: drizzle-kit, tailwind-merge, vitest, playwright, etc.
- Fix eslint config: remove duplicate @typescript-eslint plugin registration
- Add @payloadcms/plugin-seo for pages, blog-posts, locations collections
- Remove manual meta fields from Pages (replaced by SEO plugin)
- Add DyvoLisPage global: hero, gallery quote, working hours, whyVisit items
- Add GroupVisitsPage global: hero, form texts, group types with discounts
- Connect /dni-narodzhennia to birthday-packages collection (was hardcoded)
- Connect /lokatsii/dyvolis to dyvolis-page global (was hardcoded)
- Connect /grupovi-vidviduvannia to group-visits-page global (was hardcoded)
- Remove STATIC_LOCATIONS fallback from /lokatsii (use DB or empty state)
- Refactor DyvoLisHero/Gallery/WhyVisit/Tickets to accept CMS props w/ fallbacks

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 16:36:18 +01:00
Vadym Samoilenko
e4b259afdc feat(cart): add persistent cart flow with /korzyna checkout page
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- CartContext + localStorage persistence across page navigation
- CartIcon with badge count in header (desktop + mobile)
- TariffCardClient: −/+ counter + "До кошика" on /kvytky
- DyvoLisTickets: fetch live tariffs, each card adds to cart
- PricingBlockComponent: split server/client, addToCart button
- /korzyna page: items, total, name/phone/email form, terms checkbox,
  "Оплатити N ₴" button — parallel POST to /api/leads + /api/tickets/checkout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:22:05 +01:00
Vadym Samoilenko
5035370cb2 fix(locations): always route dyvolis slug to /lokatsii/dyvolis page
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
CMS stores old href /lokatsii#dyvolis — override at component level for dyvolis slug.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:38:08 +01:00
Vadym Samoilenko
d97a75882e feat(dyvolis): add Dyvo Lis 250 UAH ticket first, set hours to щодня
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:09:03 +01:00
Vadym Samoilenko
1cd26c1749 feat(dyvolis): shift cat right, 60+ badge, real photos, colorful logo
- Hero: move cat panel right (left 15%, ellipse 20%) so it doesn't
  cover the left text column; adjust badge text Х→60+ with proper
  font size (50px) for 3-character label
- Gallery: replace 4 placeholder images with 24 real Dyvolis park
  photos (March 2026 shoot)
- WhyVisit carousel: use 5 real park photos as posters, increase
  card size from 505px to 600px with 4:3 aspect ratio
- Header: replace 3-SVG fallback logo with full-color brand PNG

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 13:36:22 +01:00
Vadym Samoilenko
722db0bb76 style: prettier class order in DyvoLisWhyVisit
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 13:00:15 +01:00
Vadym Samoilenko
9497cf6187 fix(dyvolis): fix X badge clamp values + add colorful favicon
- Fix negative clamp for marginRight: was returning -40px at 1440px
  instead of -101px (min/max were backwards for CSS negative clamp)
- Fix badge size: 11.11vw now hits 160px at lg (1440px)
- Fix font: 6.67vw now hits 96px at lg (was 86px)
- Fix paddingLeft of tip box: 10.28vw hits 148px at lg (was 137px)
- Add favicon.ico (multi-size 16/32/48/64) and icon.png (512x512)
  from the colorful Shumiland Ш brand mark (cropped from Figma asset)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 13:00:02 +01:00
Vadym Samoilenko
098339e23e feat(dyvolis): pixel-perfect update from Figma — video reviews, quote block, ticket redesign
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Hero: bg #fdf2e8 → #f1fbeb (matches Figma page root)
- WhyVisit: replace auto-scroll photo gallery with single-card video-review
  carousel (poster + play btn, prev/next + dots, 5s auto-advance); add
  closing quote block per Figma node 4:202
- Tickets: first ticket relabelled "Вхід до ДиноПарку" per Figma; card bg
  #f1fbeb → #fdf2e8 (cream); combo subtitle order matches Figma node 4:160

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 12:35:46 +01:00
Vadym Samoilenko
f9b122ed16 feat(dyvolis): pixel-perfect hero — cream bg, Figma-proportioned cat + orange ellipse
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Positions derived from Figma node 3-546 (1920px frame): right panel=64vw,
cat at left=-20.1% top=-20.7% w=126.9%, ellipse container at left=-12.5% top=8% size=184.6%.
Adds ellipse-orange.svg gradient asset.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 12:04:59 +01:00
Vadym Samoilenko
3ae7ff4bad feat(dyvolis): visual overhaul — bg color, 3D gallery, why-visit, compact tickets
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Change all #fdf2e8 → #f1fbeb (matches homepage light-green background)
- Hero: fix badge border color, add orange decorative glow ellipse behind cat
- Gallery: replace static grid with 3D coverflow carousel (auto-rotate + nav arrows)
- WhyVisit: redesign to match WhyParents layout (auto-rotate accordion + RAF scroll gallery)
- Tickets: compact cards with flex justify-between so CTA button is always at card bottom

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 11:18:18 +01:00
Vadym Samoilenko
91d11c1009 fix(nav): fix dropdown hover gap + add location page buttons
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- HeaderClient: wrap dropdown in pt-2 bridge div so hover never lost
  when moving mouse from nav item to dropdown list
- Locations, Header: dyvolis href → /lokatsii/dyvolis (dedicated page)
- lokatsii page: add "Детальніше" button for locations with own page

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 11:03:13 +01:00
Vadym Samoilenko
d8a443fe7f feat(dyvolis): add DyvoLis location page with sections
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- New page route /lokatsii/dyvolis
- DyvoLisHero: title, subtitle, CTA, X-badge + 3 green info tips, topiary cat image
- DyvoLisGallery: quote banner + 4 Figma gallery photos
- DyvoLisWhyVisit: interactive accordion (3 items) + video cards + description
- DyvoLisTickets: working hours banner, 4 ticket cards, 4 combo cards
- Downloaded Figma assets to public/images/dyvolis/
- Fix .gitignore: scope *.png/jpg/jpeg to root-level only (was blocking public/)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 10:57:24 +01:00
Vadym Samoilenko
f01f2d2698 fix(whyparents): remove left-edge fade from gallery mask
Some checks failed
CI / Type Check (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
Deploy / Build & Push Image (push) Has been cancelled
Deploy / Deploy to VPS (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:48:09 +01:00
Vadym Samoilenko
ce064bce7a fix(whyparents): remove right-edge fade from gallery mask
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:41:19 +01:00
Vadym Samoilenko
683f06caae feat(video): add mute/unmute toggle button
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:35:44 +01:00
Vadym Samoilenko
b628a2bfb9 fix: set #f1fbeb background everywhere except hero and footer
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:33:04 +01:00
Vadym Samoilenko
b93317e5ff fix(whyparents): revert section bg to transparent, keep card fill #fffdfa
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
2026-05-11 16:19:39 +01:00
Vadym Samoilenko
d620ad45a4 fix: section bg #FFFDFA, revert birthday card fills to green/orange
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:16:02 +01:00
Vadym Samoilenko
68b98639f3 feat: card colors #FFFDFA + gallery fallback fix
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- BirthdayPricing: cream cards (#fffdfa) with dark text, orange/green titled
- WhyParents: accordion cards cream (#fffdfa)
- Gallery: per-index static fallback for null/corrupt media slots

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:11:23 +01:00
Vadym Samoilenko
54d00080ff fix: lokatsii page unique images + video gallery-width container
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- lokatsii/page.tsx: per-slug FALLBACK_IMAGES map prevents all cards showing dinopark photo
- VideoSection: constrain to max-w-[1204px] gallery-width container

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:57:20 +01:00
Vadym Samoilenko
f8421ed42d feat: blog posts, redesigned sections, video full-width, reviews hover pause
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Blog listing: force-dynamic SSR, new photo cards with date badge + hover animation
- Blog article: custom typography (h1-h3 styling, lists, blockquotes) without plugin
- News.tsx: fix hero image mapping (direct upload, not .image sub-field)
- Reviews.tsx: hover pauses auto-scroll, resumes on mouse leave; fix poster 404
- VideoSection: full viewport width, no container constraint
- next.config.ts: add shumi.ai-impress.com to remotePatterns (fixes 400 on blog images)
- Seed: add _status published for Payload drafts; force-posts flag; real blog photos
- Locations.tsx: per-slug fallback images (fixes all cards showing dinopark photo)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:52:08 +01:00