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
...
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
...
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
...
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
...
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
...
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
...
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
...
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
...
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
...
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
...
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
...
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
...
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
...
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)
...
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)
...
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
...
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)
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
...
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