Vadym Samoilenko
67140a9ec4
feat: Phase 5 — Lead API, Binotel, Twenty CRM
...
- src/app/api/leads/route.ts — POST /api/leads with Zod validation,
UTM + GA Client ID from cookies, rate limiting (5 req/min/IP),
async Twenty CRM sync (fire-and-forget)
- src/app/api/binotel/webhook/route.ts — HMAC-SHA256 verification,
matches call to most recent lead by phone, saves binotelCallId
- src/lib/twenty.ts — GraphQL mutation to create Person in Twenty CRM
- src/lib/binotel.ts — HMAC verify, phone normalizer, payload parser
- src/lib/gtm.ts — pushGTMEvent() client helper
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 17:23:17 +01:00
Vadym Samoilenko
6451ffe292
feat: Phase 4 complete — public pages, block components, layout
...
Layout:
- Header (sticky, dropdown nav, mobile hamburger)
- Footer (columns from CMS, social links, phone)
- MobileNav (Framer Motion slide-out)
- GTMScript, GA4Script, UmamiScript, BinotelWidget
Block components (all 11):
- HeroBlockComponent — video/image/gradient bg, CTA, scroll indicator
- TextBlockComponent — richtext with prose styles
- FeaturesBlockComponent — Lucide icons or images, 2/3/4 cols
- LocationCardBlockComponent — cards with image, badge, price
- PricingBlockComponent — TicketsConfig table or custom table
- GalleryBlockComponent — grid/masonry/carousel + lightbox
- FormBlockComponent — 4 form types (birthday/group/callback/generic), RHF+Zod
- CTABlockComponent — gradient/image/solid backgrounds, multi-button
- CountdownBlockComponent — client-side live timer
- BlogPreviewBlockComponent — fetches blog/events, 3 layouts
- MapBlockComponent — iframe embed, working hours, transport info
Pages & SEO:
- Home page, [slug] catch-all, 404
- /blog, /blog/[slug] with Article structured data
- /events, /events/[slug]
- /landing/[slug] with sticky CTA bar
- sitemap.ts, robots.ts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 17:20:52 +01:00