Commit graph

39 commits

Author SHA1 Message Date
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
2a2ca8c459 chore: canonical static fallback assets for sliders and page-hero
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 13:09:38 +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
8c3e28e507 feat: transcode ShumiLand reels to web-optimized MP4+WebM for autoplay
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 13:06:43 +01:00
Vadym Samoilenko
75f0d6897a perf: clean up extensionless duplicates in public/images/figma
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 13:04:17 +01:00
Vadym Samoilenko
63af1f86e3 perf: add AVIF/WebP next image config and image optimization script
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 13:04:04 +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
Vadym Samoilenko
96dc23b74b perf: compress images to WebP (-97%) and fix slider/performance issues
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
- Convert all 40+ public/images/figma assets from raw PNG/JPG to WebP at
  max 1920px, 82% quality: 397 MB → 13 MB total (96.7% reduction)
- Update all component image references to .webp
- Add 1-year Cache-Control headers for /images/* and /_next/static/*
- Fix GallerySlider initial scroll offset (first card no longer clipped by mask)
- Fix arrow2.svg missing explicit width/height (Lighthouse unsized-images)
- Hero, LocationsSlider: aspect-ratio height + seamless infinite loop (prior session)
- Add drizzle-kit to dependencies for production schema push (prior session)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 22:49:46 +01:00
Vadym Samoilenko
a5a9410c07 fix: enable Drizzle push:true to auto-create tables on startup
Fresh production DB has no migration files; push:true bootstraps the
schema without needing the payload migrate CLI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 22:18:45 +01:00
Vadym Samoilenko
78abd0382c fix: make EZY/Binotel/Resend env vars optional — app works without integrations
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-10 22:04:25 +01:00
Vadym Samoilenko
2b9a5cf640 fix: lazy-initialize Resend client to avoid missing API key error at build time
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-10 22:01:19 +01:00
Vadym Samoilenko
69a3e48dda fix: add type declaration for @payloadcms/next/css side-effect import
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-10 21:57:41 +01:00
Vadym Samoilenko
557bf5a1b5 feat: forms, analytics, footer, LocationsSlider 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
- GroupRequestForm: full form with group type/size/date, POST /api/leads
- BirthdayBookingForm: birthday booking with package preselect from ?package=, POST /api/leads
- Leads collection: added message, groupSize, preferredDate, packageSlug fields
- GoogleAnalytics + BinotelWidget: Script-based, loaded from SiteSettings global
- layout.tsx: generateMetadata from SiteSettings, GA4 + Binotel wired
- Footer: full render — logo, nav links, contacts, socials from CMS
- LocationsSlider: BtnGradient href fixed to /kvytky?category=slug
- utm.ts: added getUtmParams() client helper

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 21:50:06 +01:00
Vadym Samoilenko
d5f880d631 fix: replace npx with pnpm exec in husky hook, clear shamefully-hoist from .npmrc
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-10 21:40:30 +01:00
Vadym Samoilenko
1cd20291d0 feat: wire all sections to Payload CMS + header dropdown + deploy config
- New collections: Locations, Reviews, BirthdayPackages
- New lib: getHomeData() — single cache-wrapped data fetch for homepage
- All sections now read from CMS with static fallbacks
- Header dropdown auto-populates 5 locations from Locations collection
- Seed API at /api/admin/seed creates all collections + uploads media
- docker-compose.prod.yml: replaced nginx/certbot with Traefik labels (shumi.ai-impress.com)
- Fixed image assignments: Locations 3-5 use gallery images (not news-bg)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 21:39:29 +01:00
Vadym Samoilenko
3226789bd1 feat: refactor frontend components and add PageHero
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
Refactored slider components (Gallery, Locations), Hero section with data-driven approach, WhyParents layout, and frontend page layouts. Added PageHero reusable component and ignored debug screenshots/playwright runtime in .gitignore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 18:41:46 +01:00
Vadym Samoilenko
86debfcdb1 fix: resolve admin crash, Hero data-driven, TS errors, lint script
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)/layout.tsx: add RootLayout + handleServerFunctions to fix
  Payload CMS admin 500 (PageConfigProvider missing outer ConfigProvider)
- Hero.tsx: make fully data-driven (null guard, dynamic title/subtitle/cta,
  backgroundImage/backgroundVideo support, javascript: href sanitization)
- Hero.test.tsx: use getAllByText for dual-layout subtitle assertions
- BtnPrimary.figma.ts, NavLink.figma.ts: fix TS2339 (TextHandle|ErrorHandle)
- package.json: replace next lint with eslint src/ (next lint removed in v16),
  add --webpack flag to dev script to avoid Turbopack instability

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:27:10 +01:00
Vadym Samoilenko
e644ee899a feat: update components and add useAutoScroll 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
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:58:34 +01:00
Vadym Samoilenko
cca4ea1d55 feat: implement full frontend — all sections, components, Figma Code Connect
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
- All 8 home page sections: Hero, Locations slider, WhyParents accordion,
  Birthday pricing cards, Video, Gallery, Reviews slider, News
- UI components: NavLink, BtnPrimary, BtnGradient, BtnDetails, AccordionItem
- Layout: sticky Header (NavLink + BtnPrimary), Footer with logo
- Figma Code Connect: 5 components published (.figma.tsx + figma.config.json)
- Public assets: all Figma images and SVGs exported
- Pages: /kvytky, /lokatsii, /blog, /dni-narodzhennia, /grupovi-vidviduvannia
- Tests: Vitest unit/api suites, Playwright e2e screenshots
- Payload CMS: blocks, collections, seed data updates
- Hero negative-margin to extend behind sticky header
- Custom Tailwind breakpoints: lg=1440px, xl=1920px
- Fix ESLint config: drop FlatCompat, use eslint-config-next flat export
- Add tsconfig.tsbuildinfo, test-results/, agentdb.rvf* to .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:40:56 +01:00
Vadym Samoilenko
4fc2ab88dd fix: read POSTGRES_PASSWORD from .env in docker-compose.yml
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-09 20:24:12 +01:00
Vadym Samoilenko
e2e9ce1591 fix: add missing @tailwindcss/postcss dependency (required for Tailwind v4)
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-09 20:17:38 +01:00
Vadym Samoilenko
eaa200fb68 chore: add .env with project credentials (private repo)
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-09 19:27:37 +01:00
Vadym Samoilenko
d14d7a2cb3 chore: add create-env.sh script for dev/prod env generation
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-09 19:27:17 +01:00
Vadym Samoilenko
ae9a7cff11 chore: add env files to repo (private repo)
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-09 19:21:24 +01:00
Vadym Samoilenko
9b41fa447a feat: complete backend B1-B7 — Payload CMS, ezy payments, leads, deploy
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
- B1: Next.js 15 + Payload CMS 3.0 + Postgres 16, ESLint, Prettier, Husky, Vitest
- B2: 9 collections, 6 globals, 12 Page Builder blocks, access control, slugify/revalidate hooks
- B3: ezy.com.ua payments, Binotel HMAC webhook, leads API, Telegram bot, Resend email, rate limiting
- B4: Tariffs collection with ezy API sync (cron + manual), dynamic pricing source-of-truth
- B5: 13 test files covering unit libs and all API routes
- B6: Dockerfile multi-stage, docker-compose.prod.yml, nginx.conf SSL, GitHub Actions CI/CD, health endpoint
- B7: docs/admin-guide-ua.md (marketer guide), docs/deploy.md (VPS instructions), README quickstart

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 19:14:54 +01:00
Vadym Samoilenko
83fad62732 chore: remove AI tooling files from repository
Exclude .claude/, .claude-flow/, .mcp.json, CLAUDE.md from tracking.
These are local Claude Code / Ruflo configuration files and should
not be part of the project source.

Updated .gitignore to permanently ignore all AI tooling directories.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 17:31:41 +01:00
Vadym Samoilenko
32f844599e Merge remote README 2026-05-09 17:30:07 +01:00
Vadym Samoilenko
fd70c79421 Init: ruflo project setup with Claude Code configuration
- Add .gitignore (DB, secrets, runtime data excluded)
- Add CLAUDE.md with ruflo agent orchestration rules
- Add .mcp.json with ruflo MCP server config
- Add .claude/ with agents, commands, hooks, helpers, skills
- Add .claude-flow/ with swarm config, coordination store, metrics

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 17:29:47 +01:00
e65b37f720 Initial commit 2026-05-09 16:27:53 +00:00