Commit graph

245 commits

Author SHA1 Message Date
Vadym Samoilenko
12dfe6dacb chore: remove backups from git, add to .gitignore
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-11 10:45:30 +01:00
Vadym Samoilenko
03a0af4080 feat(routing): move /kvytky → /payments, rename checkout → /checkout
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
- /payments now serves the main ticket catalog (was /kvytky)
- /checkout serves the legacy single-tariff checkout form
- All /kvytky references updated across components, layout, lib, seed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 10:44:34 +01:00
Vadym Samoilenko
a32303fdf6 feat(routing): rename checkout and thanks pages to /payments and /thanks
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-11 10:35:06 +01:00
Vadym Samoilenko
7836d4c65f fix(dynozavry): cap video card height to 520px to align with accordion
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-10 18:07:19 +01:00
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
610f3f6327 fix(locations): switch mobile card stack to flat single-card slider
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
On mobile (< 768px) the stacked cards had rotated/offset transforms
that were clipped by the overflow-hidden container. Now mid/back cards
are hidden (opacity 0) and the front card renders flat — no clipping.
Desktop stack layout is unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 16:40:39 +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
bf5ea16394 fix(dino): add mobile readability scrim over hero background
On narrow screens the cover-cropped hero photo lands under the
heading text, making it unreadable. Add a light gradient overlay
behind the text at <=640px.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 14:58:50 +01:00
Vadym Samoilenko
9e1d0d9bb4 fix(locations): fix CardStack overflow on mobile
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
Container now full-width with overflow-hidden on mobile; cards fill container.
Fixed w-[520px] was overflowing 360px viewport by 160px.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 14:02:02 +01:00
Vadym Samoilenko
ffe76e9e2b feat(hero): change HeroSlider transition from vertical to horizontal
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
Track now translates on X axis; nav dots unified to bottom row on all breakpoints.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 14:01:00 +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
4bb321366c fix(header): fix Дзеркальний Лабіринт nav link to use /lokatsii/maze instead of anchor
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-06-09 10:32:06 +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
b86581cc4d fix(tariffs): fix SyncEzyButton path — use /src/ prefix for Payload component resolution
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:13:18 +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
6ed4b631ab fix(tariffs): allow admin to clear ezy_id for manual 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
Field was readOnly in UI but protected by access control already.
Removing readOnly lets admins clear ezy_id when a tariff isn't in ezy yet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 15:00:03 +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
12cd941da5 fix(kvytky): client-side tariff fallback when static build has no server
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
At Docker build time Next.js renders /kvytky statically before the server
starts, so getTariffs() gets empty array. KvytkyTicketsClient now fetches
/api/tickets/tariffs on mount when serverTariffs is empty.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:50:21 +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
00612e7d69 fix: logo absolute URL, dyvolis tickets priority, why-section layout, birthday extra CMS 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
- Header: strip hostname from Payload media URL in resolveLogoUrl (was showing IP)
- DyvoLisTickets: prefer 'dyvolis' category over 'dyno' for single tickets
- DyvoLisWhyVisit: narrow accordion (628→480px), remove video max-w cap
- migration 0017: seed 3 extra birthday package items (rows 4-6) so CMS block is editable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:38:41 +01:00
Vadym Samoilenko
fc73909ea4 fix(migration): add section_titles_google_review_url column to home_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
ALTER TABLE home_page + _home_page_v to add the new varchar column
for the Google review URL field added to sectionTitles group.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:26:53 +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
ab820f7c99 feat(docker): add Caddyfile for self-signed TLS proxy
Terminates HTTPS on port 443 with self-signed cert, redirects :80 to HTTPS.
Required for Payload admin CSRF (browsers only send Sec-Fetch-Site in secure context).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:14:01 +01:00
Vadym Samoilenko
683ed47795 chore: regenerate payload-types + next-env.d.ts after schema changes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:13:48 +01:00
Vadym Samoilenko
a226d3a7f8 fix(ui): bump next/image quality to 90, clean up DyvoLis comment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:13:43 +01:00
Vadym Samoilenko
8b4a9262e2 feat(home-why): support CMS side gallery images in WhyParents
Replace hardcoded video-only VideoSlider with SideSlider that accepts
any images array. If CMS sideGallery images exist, show them without
the play button; otherwise fall back to static video thumbnail with
play button as before.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:13:38 +01:00
Vadym Samoilenko
af4bd74d67 feat(home): add patternGreen/patternOrange CMS upload fields to birthdayIntro
Allow editors to upload custom background pattern images for the birthday
section cards (green cards and featured orange card) from the CMS admin.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:13:31 +01:00
Vadym Samoilenko
dfc7cc49b0 feat(docker): add Caddy TLS proxy with self-signed cert, remove traefik
Switch prod setup from traefik (external network) to self-contained
Caddy container that terminates HTTPS at the IP. Self-signed cert is
needed so browsers send Sec-Fetch-Site (only in secure contexts) and
Payload admin cookie auth works over http-by-IP won't.

- Add caddy:2-alpine service with ports 80/443 and Caddyfile mount
- Mount ./certs volume to app (NODE_EXTRA_CA_CERTS) so next/image can
  optimise absolute https://IP media URLs without cert rejection
- Remove traefik-public external network + labels
- Update build arg NEXT_PUBLIC_SITE_URL to https://147.135.209.100
- Add postgres-data/backups/certs to .dockerignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 14:13:26 +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
3a44b986bc fix(images): add dynamic remotePattern from NEXT_PUBLIC_SITE_URL
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
Payload media served from the deployment host (e.g. http://147.135.209.100)
was blocked by Next.js image optimiser with 400 because the host was absent
from remotePatterns. Now parsed at build time from NEXT_PUBLIC_SITE_URL so
it works for any environment (localhost, IP, or domain) without hardcoding.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 21:18:40 +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
b2e03d1311 feat(media): auto-compress uploaded videos via FFmpeg H.264 CRF 28
On video upload, fires FFmpeg in the background to re-encode to
H.264/AAC with CRF 28 (50-80% size reduction vs phone recordings).
Adds FFmpeg to runner Docker image. Original file is replaced
in-place so URL never changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 13:12:45 +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
7371462eab fix(migration): add _home_page_v_version_sections table for versions 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
2026-06-05 12:31:41 +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
917678e363 fix(admin): fallback adminThumbnail to original URL when tablet size missing
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:14:26 +01:00
Vadym Samoilenko
7080b9ba2d feat(admin): use filename as title in Media list to show built-in thumbnail
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:06:53 +01:00