- Use submitContactForm() from api.ts instead of raw fetch to /api/contact
- Extract formId from block.form relationship (CMS-configurable)
- Use configurable successMessage from block data
- Add pnpm-workspace.yaml for onlyBuiltDependencies
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolves all 6 Dependabot alerts (2 high, 4 moderate):
- HTTP request deserialization DoS (CVE via insecure RSC)
- Unbounded memory consumption via PPR resume endpoint
- DoS via Image Optimizer remotePatterns configuration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Installs lucide-react and creates DynamicIcon component that maps
icon name strings to rendered Lucide icons. CardGridBlock now supports
mediaType (none/image/icon) and iconPosition (top/left).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Tailwind v4 theme config with Definity colors (accent #2CAADF, dark #111)
- Montserrat + Open Sans font setup via next/font/google
- UI components: Button (6 variants), Container, SectionHeader
- Navigation with transparent-to-solid scroll behavior
- Footer with social links, widgets, copyright bar
- Block components: Hero, Text, CardGrid, Quote, ImageText, CTA,
ContactForm, Timeline, Divider
- Typography system with prose styles for rich text
- Animation library with framer-motion variants
- Page transitions via template.tsx
- cn() utility (clsx + tailwind-merge)
- Updated API layer with getSocialLinks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>