Commit graph

97 commits

Author SHA1 Message Date
Vadym Samoilenko
fb11ccb4f8 fix(dynozavry): fix video playback, expand card, fix cross-domain media URL
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
- Hide img overlay on .playing so video is visible when playing
- Add controls on play click
- When no poster: show video directly with preload=metadata (native first frame)
- why-grid left col 704px → minmax(0,500px) so video column gets more space
- video-card: flex fills available width, absolute positioning for img/video stack
- aspect-ratio 9:16 for portrait video
- Strip absolute origin from video/poster src (fixes cert error from shumi.ai-impress.com)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:54:43 +01:00
Vadym Samoilenko
e2067e2398 fix(locations): unify card color to #396817 — consistent pattern across all cards
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-06-10 17:42:52 +01:00
Vadym Samoilenko
be65c38ca5 fix(locations): switch card pattern to dyno-pattern.svg (660px, topographic)
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
Same pattern as VideoSection / wave-pattern CSS class.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:39:30 +01:00
Vadym Samoilenko
6c1471125c fix(locations): use card-pattern-arcs.svg as direct background-image
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
Background-image on the element is always behind content — no overlay div
needed. card-pattern-arcs.svg (360×360 arc circles, #70b030 strokes)
is visible on dark green without opacity tricks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:35:21 +01:00
Vadym Samoilenko
cacdb4a2db fix(locations): fix pattern overlay z-index and increase opacity
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
Overlay was painting above static content (buttons, text).
Fix: z-0 on overlay + z-10 on content wrapper, opacity 0.18→0.28.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:32:56 +01:00
Vadym Samoilenko
0cb4f9e5dc fix(locations): use overlay div for wave pattern (opacity 0.18) like DinoTickets
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
backgroundImage on inline style rendered same-color paths invisible;
absolute overlay div with opacity matches proven DinoTickets pattern.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:22:23 +01:00
Vadym Samoilenko
85cdad2e45 fix(locations): replace solid green overlay with pattern cards + neutral hero scrim
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
- PageHero: swap opaque green fill for subtle black gradient so hero photo shows through
- Locations cards: add card-wave-green.svg pattern on top of solid green bg

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 17:06:14 +01:00
Vadym Samoilenko
3b39f3d3b0 feat(group-visits): hero typography controls + bottom-aligned title plate
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
- Move hero title plate to the bottom of the photo so faces stay visible
- Admin can now set hero title/subtitle size (px) and font
  (Montserrat/Poppins/Inter); mobile scales via clamp()

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 15:31:24 +01:00
Vadym Samoilenko
8c6ef3063f perf(images): convert heavy static images to webp
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
PNG sources re-encoded losslessly, oversized JPGs at q92:
22 files, 13.6MB -> 4.5MB. JPGs that would grow after
re-encoding are kept as-is. References updated; originals
kept on disk since CMS rows may still point at them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 14:59:13 +01:00
Vadym Samoilenko
0ab98cdd3a feat(locations): add showOnLokatsii visibility flag + page filter
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 checkbox field to control whether a location card appears on /lokatsii.
Default true so existing entries remain visible. Filter added to getLocations query.
Migration 20260610_140000 adds show_on_lokatsii boolean column with DEFAULT true.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 13:52:27 +01:00
Vadym Samoilenko
55071543e9 fix(tariffs): register SyncEzyButton in importMap, fix @payloadcms/ui import, guard beforeChange hook
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-08 15:39:59 +01:00
Vadym Samoilenko
c7b846f6b2 feat(tariffs): add ezy auto-sync on ezy_id save + manual sync button in admin
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
- beforeChange hook: when ezy_id changes, fetch tariff from ezy API,
  populate last_synced_name/price/at; throw if ezy_id not found
- POST /api/tariffs/[id]/sync-ezy: re-sync a specific tariff on demand
- SyncEzyButton: custom Payload UI field component with loading/ok/error states

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 15:06:29 +01:00
Vadym Samoilenko
8ffd6ebaa6 fix(kvytky): combo cards driven by ezy API — no test tariffs, correct prices
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
buildComboCards now uses ezy tariffs as primary source when available.
Static cards are only used for descriptions and as fallback when ezy is down.
This removes test/placeholder cards and fixes mismatched prices from CMS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:56:23 +01:00
Vadym Samoilenko
faff04fab2 fix: use localhost for internal fetches, footer logo hostname, dyvolis 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
- revalidatePath + kvytky page: use http://localhost:3000 for server-to-self
  fetches (was using NEXT_PUBLIC_SITE_URL with self-signed HTTPS → Node rejected cert)
- Footer: strip hostname from Payload media URL (same fix as Header)
- DyvoLisTickets: show zone ticket named 'Диво' for individual dyvolis tickets

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:47:43 +01:00
Vadym Samoilenko
c3274b0bd6 feat(reviews): add CMS field for Google review button URL
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 googleReviewUrl text field to HomePage.sectionTitles group so editors
can update the Google review link without a deploy. Falls back to the
hardcoded URL when the field is empty.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:22:03 +01:00
Vadym Samoilenko
40ced357df fix(dynozavry): serve hero banner from public PNG + raise media quality
- Copy original lossless PNG to public/images/locations/ as hero bg fallback
  (bypasses Payload WebP compression entirely when CMS has no image)
- Fallback heroBgUrl to static PNG so the banner always renders
- Raise Media collection WebP quality: 82→88 (mobile/tablet), 85→92 (original+desktop)
  Future re-uploads will have noticeably better quality

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:20:17 +01:00
Vadym Samoilenko
c3e1edbee7 fix(birthday): reconnect extra items to CMS + fix altanka placeholder
extraItems was simplified to always use FALLBACK_EXTRA_ITEMS in the
previous refactor, breaking CMS editability for Костюмованих ведучих,
Аквагрим, Затишну альтанку. Restore CMS-first logic: use
cmsPackageItems[3+] when available, fallback otherwise.

Replace wrong gallery-shumi-6.webp (DyvoLis topiary arch) with null
so the placeholder SVG shows until a real photo is uploaded via CMS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:13:17 +01:00
Vadym Samoilenko
00c3548272 fix(dynozavry): fetch heroBackground from locations collection
heroBgUrl was never populated — page.tsx queried only the dinosaur-page
global and didn't read the Location's heroBackground upload field.
Now fetches the locations collection in parallel and passes heroBgUrl to
DinoPageContent, which already handles the conditional hero-bg render.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:12:51 +01:00
Vadym Samoilenko
4b064eee65 refactor(birthday): clean up unused CMS fields and dead variable declarations
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
Remove 10 CMS global fields that had data+fallbacks but were never rendered:
workingHours, pricingPackages, entrancePrices, freeInclusions, entertainmentPackages
plus heroCta, packageSectionSubtitle, and their title fields.

In page.tsx: remove TicketCard component, TicketCardData interface, and all
corresponding variable declarations (~80 lines). Simplify extraItems to always
use FALLBACK_EXTRA_ITEMS (removes fragile cmsHasPhotos && length>3 condition).

Fix typo in packageItems defaultValue: 'ДинопаркArk' → 'ДиноПарк'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 13:53:16 +01:00
Vadym Samoilenko
9a2ebd8cc0 fix(dinopage|gallery|birthday): hero bg z-index, gallery padding, altanka image
- DinoPageContent: add isolation:isolate to .hero so z-index:-1 hero-bg
  is visible (was painted behind the page background color)
- Gallery: pad CMS images with static fallbacks when fewer than 9 entries,
  so the slider always shows a full set even if CMS only has 2 photos
- Birthday page: replace null altanka image with gallery-shumi-6.webp placeholder

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 13:45:16 +01:00
Vadym Samoilenko
958de340c1 fix(seed): return numeric IDs from media upload helpers
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
Payload 3 + PostgreSQL rejects string IDs for upload field relationships;
helpers were returning String(doc.id) which caused ValidationError on
every location/post create that referenced an already-existing media record.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 20:44:16 +01:00
Vadym Samoilenko
7e592d3af7 feat(birthday): upload fields for why-section videos
Replace text src/poster in whyVideos with media upload pickers so
admins can upload video files directly from the CMS instead of
entering raw URLs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 13:10:59 +01:00
Vadym Samoilenko
04e13097da fix(birthday): show all CMS extra items, remove hardcoded slice(3,6) limit
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
extraItems now uses slice(3) without end limit — items 4-N all appear
in the "Також можна додатково замовити" grid instead of being silently dropped.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 12:44:10 +01:00
Vadym Samoilenko
83283ed43c feat(home): CMS-managed birthday card background patterns
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
Admins can now upload custom pattern images for green and orange
pricing cards via Home Page → День народження → Паттерн зелених/оранжевої карток.
Falls back to static /images/figma/card-pattern-*.png if not set.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 12:39:05 +01:00
Vadym Samoilenko
b3837fc412 feat(homepage): sections array — add/remove/reorder/show/hide via 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
2026-06-05 12:23:25 +01:00
Vadym Samoilenko
a58ce75f66 fix(news): pass CMS limit to getLatestPosts instead of hardcoded 3
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-06-05 10:25:45 +01:00
Vadym Samoilenko
1b64b79129 feat(home): birthday section, map embed, and CMS-driven news title/subtitle
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 BirthdayPricing section to home page (was missing entirely)
- Add MapSection component rendering Google Maps iframe from CMS embedUrl
- News component now accepts title/subtitle props from CMS sectionTitles

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 10:13:13 +01:00
Vadym Samoilenko
d61d5c87ed fix(cms): remove unused dyvolis-page global, fix docker-compose volume, seed error handling
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
- Remove DyvoLisPage global from Payload config (was not connected to website,
  website reads from locations collection instead)
- Fix docker-compose.prod.yml migrate service volume path:
  /app/migrations -> /migrations to match Dockerfile.migrator WORKDIR
- Wrap seed route in try/catch to return proper error instead of silent 500

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 16:48:29 +01:00
Vadym Samoilenko
b33ec01b16 feat(home): add FAQ section and seed WhyParents items
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 FAQ accordion section (FAQ.tsx) after Reviews on home page
- Add faq group field to HomePage global (title + items array)
- Add HomePageFaq types to types/globals.ts
- Seed whyParents.items with 6 items from static fallback texts
- Seed faq with 6 Q&A items about the park
- Migration 0012: create home_page_faq_items table for Payload array field

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:29:27 +01:00
Vadym Samoilenko
abfc8de91c feat(legal): cookie banner + Ukrainian law references in legal pages
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
- CookieBanner: bottom-fixed, stores consent in localStorage,
  links to privacy policy, green brand colors
- Privacy policy + Data processing: replace GDPR as primary
  reference with ЗУ «Про захист персональних даних» № 2297-VI,
  correct article references (ст. 6, 8, 16, 24 Закону),
  supervisory authority: Уповноважений ВРУ з прав людини

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 13:21:01 +01:00
Vadym Samoilenko
2cf8ec9715 feat(legal): 4 Ukrainian legal pages + footer links + CMS global
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
- LegalPages global in Payload CMS (Юридичні сторінки section)
- /privacy-policy, /terms-of-use, /oferta, /data-processing pages
- Legal text pre-filled with contract data (ТОВ ТЕХНОСМАРТ УКРАЇНА,
  ЄДРПОУ 40166430, contacts from contract №20260422)
- Footer: legal links row above copyright
- All pages editable from CMS admin, fallback to hardcoded defaults

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 13:01:38 +01:00
Vadym Samoilenko
4547d5aacf feat(cms): connect checkout instructions/terms + thank-you page 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
- CheckoutPage: pass instructions and terms from CMS global to frontend;
  instructions shown above form, terms below button
- ThankYouPage: fetch title/message/contactPhone/contactEmail from CMS;
  contact info shown if set, falls back to hardcoded defaults
- Hero: use backgroundImageUrl text field as fallback for media upload
- Add lexicalToText util for plain-text extraction from Payload Lexical JSON

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 12:54:29 +01:00
Vadym Samoilenko
7ee5e8a434 feat(ui): card stack slider, footer redesign, video glow, revalidation 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
UI changes:
- Locations section: replace 3D coverflow with draggable card stack (framer-motion), auto-advance 4s, dot navigation
- Footer: orange gradient matching header, dark green text for readability
- VideoSection: orange box-shadow glow around video block, green wave pattern preserved

Bug fixes:
- fix(revalidate): SECRET empty check was blocking all CMS cache invalidations on prod
- fix(revalidate): location pages now revalidate /lokatsii/{slug} + /lokatsii + layout
- fix(revalidate): blog posts revalidate /blog/{slug} + /blog
- fix(pages): add dynamicParams=true to /[slug] and /lokatsii/[slug] for post-build new entries
- fix(lokatsii): dynamic DETAIL_HREF — new locations with showDetailPage:true auto-get detail button
- fix(combo): cursor:pointer on combo ticket cards
- fix(blog): add EXPERIMENTAL_TableFeature to Lexical editor

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 12:18:01 +01:00
Vadym Samoilenko
04b28e7620 feat(email): Ukrainian source labels, full lead details in email (guests, date, message)
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-03 16:26:56 +01:00
Vadym Samoilenko
f0df7f1026 feat(cms): remove hardcoded images — connect birthday, dyvolis, dino, home gallery to CMS 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
2026-06-03 15:07:27 +01:00
Vadym Samoilenko
d327c841d7 feat(groups): add heroImage field to GroupVisitsPage global + connect to 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
2026-06-03 14:52:44 +01:00
Vadym Samoilenko
69675851f8 fix(groups): connect amenities array to CMS — was hardcoded, now reads label+image from global 2026-06-03 14:49:38 +01:00
Vadym Samoilenko
a2fb01ea11 fix(ui): center CTA buttons (no full-width stretch), move birthday hero title to bottom
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-03 14:33:21 +01:00
Vadym Samoilenko
0ef399c2f5 fix(seed-forms): always run updateGlobal — fixes re-link on partial state
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
Remove early-return guard that skipped global linking when both forms already existed. Per-form idempotency is handled by the '?? await payload.create()' pattern, so we can safely always run updateGlobal to ensure forms are linked to their globals even after re-runs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 14:06:02 +01:00
Vadym Samoilenko
41593c8edc fix(seed-forms): add confirmationMessage to both form creates
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
Payload forms plugin requires a Lexical rich-text confirmationMessage
when confirmationType is 'message'; omitting it caused a 500 on seed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 14:02:28 +01:00
Vadym Samoilenko
b5c34f6f0b fix(seed-forms): tighten auth guard + per-form idempotency to handle partial failures
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 auth bypass when SYNC_SECRET env var is unset: now defaults to empty string
- Change idempotency check from totalDocs >= 2 to per-form existence checks
- Allow reuse of existing forms instead of creating duplicates if one creation fails
- Handles partial seed state gracefully (e.g., birthday form exists but group form missing)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 13:59:06 +01:00
Vadym Samoilenko
65498e2da5 feat(cms): add seed-forms route — creates birthday + group-visits forms and links to globals 2026-06-03 13:56:58 +01:00
Vadym Samoilenko
cd8d5673d1 perf: compress loc- images, fix hero fetchpriority, fix layout broken tag, Binotel SEO links
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-02 21:39:02 +01:00
Vadym Samoilenko
deead80f2a perf: compress all images (-70MB), preload LCP hero, convert PNG→JPEG, remove dead files
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-02 21:32:49 +01:00
Vadym Samoilenko
208e0506e8 fix(telegram): correct Ukrainian grammar (Нове замовлення), show tariff name + customer name/phone in order alert
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-02 20:01:16 +01:00
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
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
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