Commit graph

61 commits

Author SHA1 Message Date
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
cff1baa871 fix(cms): add SEO plugin components to importMap, remove broken generate:importmap step
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
tsx@4.21.0 + Node.js v22 ESM/CJS interop bug prevents running `payload generate:importmap`
at Docker build time. Removed the failing RUN step and manually added the 5 SEO plugin
client components using the correct MD5-hashed identifier format.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 19:51:58 +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
d5977e3215 feat(cms): add email-resend adapter, add defaultValues to checkout/thank-you globals
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 18:23:25 +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
50c58674fb fix(orders): store name & phone in Order for complete checkout record
Previously name/phone were only in Lead, email only in Order — two
unlinked records. Now Order has all contact fields, enabling standalone
CRM view per purchase.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 17:12:56 +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
277a240359 feat(kvytky): add birthday & group visit sections with enquiry CTA
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
Combo bundle tariffs moved to their own 'combo' category via DB.
Static sections for Дні народження (3 packages) and Групові відвідування
(3 types) added at the bottom with "Дізнатися ціну" buttons linking to
the respective booking forms.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:48:43 +01:00
Vadym Samoilenko
380776fb03 fix(tariffs): include DB-only visible tariffs missing from ezy API
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
Dyvolis tariffs (ezy_id 2001/2002) exist in DB but ezy returns only
the "Online" 3xxx-series tariffs from its activity endpoint. The merge
loop silently dropped anything not in the ezy response, leaving the
DyvoLis ticket section empty.

Now after building the ezy-merged list, DB-visible tariffs absent from
ezy are appended so every visible tariff shows up regardless of which
ezy activity it belongs to.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:32: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
1dab458ef9 fix(dyvolis): revert page wrapper bg to #f1fbeb (matches main 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
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 12:08:37 +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
Vadym Samoilenko
55d25cacac fix(locations): per-slug image fallback — prevents all cards showing dinopark photo
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
When CMS locations exist but have no media (e.g. after volume rebuild), the
component now falls back to the correct figma image per slug instead of
hardcoding loc-dinopark.webp for all cards.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:31:16 +01:00
Vadym Samoilenko
2fa4040114 fix: media uploads 500 error + add video review card to Reviews
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: create /app/media dir with nextjs ownership before USER switch
- docker-compose.prod.yml: mount named volume shumiland-media-uploads → /app/media
- Reviews: add VideoReviewCard component with 9:16 portrait inline player
- Add review-video.mp4 (93s, 720×1280, 15MB) + poster from IMG_8336.MOV

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:17:05 +01:00
Vadym Samoilenko
9562db84e3 feat(blog): add 3 real articles + blog image placeholders to seed
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 seed data for 3 Shumiland articles (Сезон пригод, Капсула часу, Травень)
- Create public/images/blog/ with placeholder hero images
- Full Lexical body content for each post
- Add makeLexical() helper for paragraph formatting in seed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:08:37 +01:00
Vadym Samoilenko
574b125626 fix: production UI fixes + brand color #396817 + new page backgrounds
- Replace all #223e0d → #396817 across 24 files
- Page bg: #f1fbeb (lightest green tint), BirthdayPricing: #fefaf6 (warm cream)
- Hero: raise text to z-[25] above T-Rex, reduce font clamp, narrow max-w
- PageHero: remove negative z-index that hid photo background
- GallerySlider: replace setInterval+state with rAF+pauseRef, seamless half-wrap reset
- Reviews: fix sub-pixel scroll (speed 0.3 → 1, intervalMs 16 → 20)
- BtnPrimary: gradient background orange→yellow→orange with hover scale
- Footer: add static fallback contacts (phone, address, metro, hours, Instagram, Facebook)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:04:43 +01:00
Vadym Samoilenko
d015c07f7f fix: TS non-null assertion in seed + formatting cleanup across components
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
Fixes Object possibly undefined TS2532 in findOrUploadMedia (seed/route.ts:50)
that was blocking production build. All other changes are whitespace/ordering
only (Tailwind class order, SVG attribute expansion).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:40:23 +01:00
Vadym Samoilenko
0895f25434 feat(layout): wire CMS logo to Header and Footer with SVG fallback 2026-05-11 13:19:57 +01:00
Vadym Samoilenko
bcdd2a3a2d feat(page-hero): photo bg + overlay for liquid-glass header consistency on inner pages 2026-05-11 13:18:48 +01:00
Vadym Samoilenko
477d50fb60 fix(hero): reduce title clamp and narrow container to prevent T-Rex overlap 2026-05-11 13:18:29 +01:00
Vadym Samoilenko
8ca741bee7 feat(video): autoplay muted loop for local reels, keep YouTube click-to-play 2026-05-11 13:17:09 +01:00
Vadym Samoilenko
5b84bd9cfa fix(whyparents): grid-rows accordion (no page shift) + horizontal gallery per Figma
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 13:15:48 +01:00
Vadym Samoilenko
125dbc01d7 feat(locations): rebuild LocationsSlider per Figma — 694px cards, rAF scroll, ДЕТАЛЬНІШЕ button
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 13:14:09 +01:00
Vadym Samoilenko
0afa76132a feat(reviews): StarRating component replacing static star image 2026-05-11 13:12:28 +01:00
Vadym Samoilenko
6e3d8c0ad0 fix(useAutoScroll): seamless infinite loop via half-width reset 2026-05-11 13:12:25 +01:00
Vadym Samoilenko
809601adad feat(seed): wire new CMS fields — pageHero bg, gallery, whyParents gallery, unique location images
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 13:11:10 +01:00
Vadym Samoilenko
8b018ffa47 feat(cms): add hero overlays, pageHero bg, news subtitle, map group to HomePage global 2026-05-11 13:08:24 +01:00
Vadym Samoilenko
a0cde76789 chore: commit session-2 leftover formatting + expanded seed route
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:02:30 +01:00
Vadym Samoilenko
dc726c5135 feat: hero dino overlay, WhyParents auto-cycle, YouTube video support
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: T-Rex (hero-bg1) and family moved to z-[20/30], rendered after
  text so dinosaur visually overlaps the title text on desktop
- WhyParents: auto-cycle accordion items every 4s; manual click resets timer
- VideoSection: detect YouTube URLs → render iframe; mp4 uses video tag
- Webp filename cleanup across section components

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 23:29:16 +01:00
Vadym Samoilenko
237bdcaf7d fix: correct location photos from Figma map and add admin reset endpoint
- Crop loc-maze/tir/playground.webp from park map illustration (correct
  Figma source for those 3 location cards; were using wrong gallery photos)
- Update seed to use new filenames + add webp MIME support
- Add ?force=locations seed param to replace existing location records
- Add /api/admin/reset-admin endpoint (requires SYNC_SECRET) to recover
  admin password without manual DB access

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 23:24:05 +01:00
Vadym Samoilenko
ab19c57d09 fix: EZY params nullish + DB migration for new collections
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
- Fix ZodError: EZY API returns params=null, use .nullish() instead of .optional()
- Add manual SQL migration for new collections (locations, reviews,
  birthday_packages) and schema changes (header ctaLabel/ctaHref,
  navLinks autoChildrenFrom/children, homepage sectionTitles/whyParents/
  gallery/video/birthdayIntro groups)
- Note: push:true doesn't run CLI drizzle-kit in standalone build;
  run migrations/0001_new_collections.sql manually on new environments

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