Vadym Samoilenko
f8421ed42d
feat: blog posts, redesigned sections, video full-width, reviews hover pause
...
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
...
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
...
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
...
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
...
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
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