Commit graph

35 commits

Author SHA1 Message Date
b9816b9bfd feat: add StatsBlock component for CMS stats-block rendering
- Maps CMS icon values to Lucide icons
- Supports row/grid/cards layouts, all CMS style options
- Count-up animation with IntersectionObserver
- SSR-safe: renders fallback values, no opacity:0 initial state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:44:58 +00:00
6e7292aaf5 fix: correct field name mismatches in ImageTextBlock and QuoteBlock
ImageTextBlock: read CTA from cta group (cta.text/cta.link) instead of
flat ctaLabel/ctaLink fields.

QuoteBlock: read image from "image" field (not "backgroundImage"),
support CMS style values (simple/highlighted/with-image) instead of
the non-existent "parallax" value.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:02:51 +00:00
d236d0e9f1 fix: read card link/linkText as flat fields instead of nested object
The CMS card-grid-block defines link (URL) and linkText (label) as
separate text fields, but the component treated link as a group object
with href/label sub-fields. Also prioritize headline over title to
match the CMS field name.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:51:35 +00:00
802f58ad17 fix: read CTA from cta group field instead of flat ctaLabel/ctaLink
The CMS hero-block sends CTA data as a nested group (cta.text, cta.link)
but the component was reading flat fields (ctaLabel, ctaLink). Falls back
to the old field names for backwards compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:13:43 +00:00
8d5e687a87 fix(security): add minimatch >=10.2.1 override (CVE-2026-26996)
Resolves ReDoS vulnerability in minimatch via eslint dependency chain.
2026-02-22 10:52:01 +00:00
f2d5d4b588 chore(deps): update compatible dependencies
Updated: framer-motion, tailwind-merge, @tailwindcss/postcss, tailwindcss, @types/node, @types/react, eslint
Fixed: TypeScript strict cast in [slug]/page.tsx
2026-02-22 10:41:50 +00:00
390036f090 fix(contact): use direct fetch instead of contracts client for form submission
The @c2s/payload-contracts API client does not load properly in client-side
bundles. Use direct fetch() for the form submission POST request.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 17:23:30 +00:00
582dbfbd12 feat: rewrite ContactFormBlock to use CMS form-builder
- 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>
2026-02-17 16:16:23 +00:00
9ae965452e fix(security): update next.js 16.0.10 → 16.1.6
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>
2026-02-17 11:10:37 +00:00
f288c512dd fix: update navigation fallback items to match current CMS structure
Updated hardcoded fallback navigation in layout.tsx and Footer.tsx to reflect
the current 5-item CMS navigation including Whistleblowing/Unternehmer submenus.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 11:07:48 +00:00
055d427ce8 chore: remove screenshots/debug artifacts and update .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:24:56 +00:00
b906cbb2b1 feat: implement CMS-driven navigation with dropdown submenus
Bypass broken contracts client navigation filter (queries non-existent
'type' field) with direct fetch to /api/navigations. Transform CMS
mainMenu structure (page/custom/submenu types) into NavItem format.
Replace JS-state dropdown (AnimatePresence) with pure CSS group-hover
to fix SSR hydration issues where both dropdowns opened simultaneously.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:22:04 +00:00
3f962c6668 fix: CTABlock field mapping to match Payload CMS schema
Map buttons array (text/link/style), description, and backgroundColor
instead of legacy flat fields (ctaLink, ctaLabel, backgroundImage)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 21:47:34 +00:00
6c69491c96 fix: strip quotes from icon names in DynamicIcon
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:01:30 +00:00
9fe9876de2 feat: add dynamic Lucide icon rendering to CardGridBlock
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>
2026-02-16 15:57:41 +00:00
fe83855f40 feat: connect CMS content, add ISR, Lexical renderer, and hero styling
- Fix tenant ID (1→4) to match CMS content
- Change homepage slug from "home" to "startseite"
- Add ISR with 60s revalidation for automatic content updates
- Create Lexical JSON→HTML renderer for rich text blocks
- Wire up dynamic favicon from CMS site-settings
- Adjust hero block: responsive font sizes, left-aligned layout,
  subline field support

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:01:30 +00:00
be1c169481 ci: add staging deploy workflow via SSH
Deploys to sv-frontend on push to develop.
Uses port-forwarding through UDM Pro SE (37.24.237.181:2204).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 22:24:37 +00:00
f518e20fae fix: resolve lint errors (server.js ignore, unused imports)
- Add server.js to ESLint globalIgnores (CJS file for Passenger)
- Remove unused cn import from QuoteBlock
- Configure underscore-prefix pattern for unused vars

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 21:49:22 +00:00
9e31c48d92 fix: remove .htaccess causing redirect loops in Apache
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 20:48:38 +00:00
fe2d2d2213 fix: add PassengerEnabled on for Apache routing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 20:21:15 +00:00
e93bdbf879 revert: remove .htaccess causing 500 errors
PassengerAppRoot and other directives are not allowed in .htaccess context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 20:20:06 +00:00
5ff127fc97 fix: add .htaccess for Apache/Passenger routing on Plesk
All non-root routes were returning Apache 500 because Passenger
was not handling them. This .htaccess enables Passenger for all
requests through Apache on Hetzner 2.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 20:19:21 +00:00
101d30efeb fix: remove escaped characters from server.js
Fix bash-escaped \! in !== operator that caused SyntaxError.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 19:25:08 +00:00
57576eb5cb fix: remove shebang from server.js for Phusion Passenger compatibility
Passenger loads server.js via require(), not as a shell script.
The shebang causes SyntaxError: Invalid or unexpected token.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 19:23:00 +00:00
ce3b73ddb8 feat: add Phusion Passenger server.js for Plesk deployment
Required by Plesk Node.js Manager to start the Next.js production server
via Phusion Passenger. Uses CommonJS for Passenger compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 19:01:24 +00:00
68145ceb7e fix(ci): use --add for multiple git insteadOf patterns
git config overwrites previous insteadOf value without --add flag.
Need both git@github.com: (SCP) and ssh://git@github.com/ patterns.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:23:44 +00:00
47657ae8c2 fix(ci): use env var for git credential rewrite
Pass GH_PAT via env var instead of secrets expression
in shell command for reliable git insteadOf config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:20:41 +00:00
1ad83efbc3 fix(ci): rewrite git SSH to HTTPS for private dependency access
pnpm resolves github: deps via git@github.com: (SSH), which fails
without SSH keys. Rewrite to HTTPS with GH_PAT token instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:17:22 +00:00
0046dbcf65 fix(ci): add packageManager field for pnpm/action-setup
pnpm/action-setup@v4 requires pnpm version via packageManager field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:15:10 +00:00
fa78f033d2 ci: add GitHub Actions CI workflow
Runs lint and build on push to develop/main and on PRs.
Uses GH_PAT secret for private @c2s/payload-contracts dependency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:13:09 +00:00
6d32eb9b0e docs: add Definity design guidelines and update CLAUDE.md
- docs/DESIGN.md: Full design system reference (colors, typography,
  spacing, shadows, components, animation patterns)
- CLAUDE.md: Updated with design system summary, component library,
  implemented blocks (9/15), architecture overview

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 11:07:35 +00:00
2e8d34d917 feat: apply Definity Template design system
- 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>
2026-02-15 11:06:05 +00:00
e998553440 docs: add CLAUDE.md with project context and contracts reference
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 01:11:58 +00:00
ab1e2d7094 feat: bootstrap porwoll.de with @c2s/payload-contracts
- Next.js 16 + Tailwind CSS 4 project setup
- Add @c2s/payload-contracts for shared API client (tenant: porwoll, ID: 1)
- Create src/lib/cms.ts and src/lib/api.ts with CMS integration
- Create block renderer with 15 placeholder blocks
- Create dynamic [slug] page routing with CMS pages
- Layout with CMS site settings integration
- transpilePackages configured for TypeScript source imports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 00:56:27 +00:00
c2s
5e0f63c703
Initial commit 2025-12-18 12:31:23 +01:00