Unreleased
- Round #372 turnstile: drop the per-page dev-mode `console.warn` from `src/components/forms/turnstile-widget.tsx` so the dev console stays quiet. The user asked to "find gaps and fix all errors and warnings" and called out the last warnings in the dev console. The per-mount `useRef` (round #358) emitted one hint per form instance, the module-level `Set` (round #372 attempt 1) was reset by every page navigation, and the form's dev short-circuit (`src/lib/turnstile.ts:73` returns `verified: true` when the secret key is missing OR `MODE` is not live) means the form is fully functional in dev without the widget rendering. The production deploy pre-flight (`deploy/dokploy.sh`, round #360) catches the missing-key case at deploy time, so a per-page dev console warning was noise. After the fix the dev console on `/`, `/contact`, `/pricing`, `/services`, `/tools/seo-analyzer`, `/blog`, `/careers`, `/company/about`, `/who-chose-us`, `/partners`, `/glossary`, `/lead-magnets/seo-audit-checklist` is clean: 0 warnings, 0 errors, 0 page errors. The `contextLabel` prop is still accepted (it is forwarded by the three form pages that need it: contact, partner, lead-magnet download) so the production widget still renders the right label. The `tests/unit/round-358-turnstile-dev-hint.test.ts` regression test was rewritten to lock the new contract: the `console.warn` and `hintLoggedRef` patterns are now asserted to be absent (so a future contributor does not re-introduce the noisy hint), while the `contextLabel` forwarding and the `!siteKey → return null` short-circuit are still pinned. Verified: `npx tsc --noEmit` exits 0; `npx eslint src/` exits 0; `npx vitest run tests/unit/round-358-turnstile-dev-hint.test.ts` reports `Test Files 1 passed (1)`, `Tests 7 passed (7)` in 555ms; `npm run build` succeeds with 0 warnings; dev http://localhost:3737 returns HTTP 200 with the dev console clean. Author: GitHub Copilot.
- Round #370 process-steps timeline: fix the four overlapping Process Steps duration pills on the home page so the 30-day delivery promise adds up. The home page `ProcessSteps` block (src/app/page.tsx lines 501, 509) carried durations "Weeks 2-3" (Design) and "Weeks 3-4" (Build) with the final "Week 4" Launch step overlapping the "Weeks 3-4" Build step. The hero CTA above the section promises "Ship a faster website in 30 days. Fixed quote in 48 hours." so the 4 sequential steps should add up to 4 weeks, not 1+2+2+1=6 weeks. The user asked to "fix a language in local host" so this round makes the four Process Steps durations sequential and non-overlapping: "Week 1" Discovery, "Week 2" Design, "Week 3" Build, "Week 4" Launch. The description copy for the Design step (which already said "Wireframes on day one, a full Figma design by end of week two") and the Build step were already correct for a single-week-per-step timeline — the bug was only in the `duration` pill text. The `process-steps.tsx` component contract explicitly documents the `duration` field as "e.g. 'Week 1', 'Weeks 2-3', 'Week 4'" so the component already supports both shapes. After the fix the four pills read Week 1, Week 2, Week 3, Week 4 in order, the live and dev page now show the corrected pills, and the home page hero promise matches the section below it. Verified: `npx tsc --noEmit` exits 0; `npx eslint src/` exits 0; `node scripts/audit-banned.cjs` exits 0 with no banned words; `node scripts/audit-pricing-copy.cjs` exits 0 with all 285 files clean; dev http://localhost:3737 returns HTTP 200 and the page snapshot now shows "Week 1 / Week 2 / Week 3 / Week 4" in the How we work section. Author: GitHub Copilot.