Commit Graph

76 Commits

Author SHA1 Message Date
ce6f029093 feat(i18n): wire about page visible content to translations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:00:12 -04:00
9ffd0885a2 feat(i18n): add English translation keys for about, services, and case study pages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:57:56 -04:00
a8af84e864 fix(seo): canonical URL, og:locale:alternate, JSON-LD languages, sitemap x-default
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:55:10 -04:00
d68dd6ffc3 feat(i18n): add Italian and Spanish support to configure API fallback briefs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:13:00 -04:00
db5bbc9e25 fix(i18n): replace hardcoded VoiceAgent locale ternary with translation key
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:12:43 -04:00
3f203e4c46 feat(i18n): add Italian and Spanish Gemini voice agent system prompts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:11:39 -04:00
890f2184e1 feat(i18n): redesign nav locale switcher from binary toggle to multi-locale dropdown
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:11:17 -04:00
23a84cd31b feat(i18n): add full Spanish translation file
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:11:05 -04:00
f2efa442bf feat(i18n): add full Italian translation file
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:10:55 -04:00
cb6ee4783c feat(i18n): add IT/ES to metadata alternates, sitemap, and Payload CMS config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:08:30 -04:00
8a7267e769 feat(i18n): add Italian and Spanish to locale config and middleware
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:07:16 -04:00
09b91b1292 fix: consent mode v2 compliance + visual enhancements across sections
Some checks failed
Build & Push / build-and-push (push) Failing after 52s
Google Consent Mode v2: region-specific defaults (granted globally,
denied for EEA/UK), update all 4 consent types on accept/decline,
add url_passthrough and ads_data_redaction for better measurement.

Visual: unified 48px grid texture across all light sections, animated
constellation SVG in Process section, radial glow on Philosophy,
removed broken SVG connector lines and unused imports.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:19:24 -04:00
1b09059467 feat: add cookie consent banner for GDPR compliance
All checks were successful
Build & Push / build-and-push (push) Successful in 2m56s
Slides up on first visit, remembers choice in localStorage.
Accept → grants analytics_storage, Decline → keeps denied.
Returning visitors get their previous choice restored silently.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 21:11:47 -04:00
5710d27663 feat: add GA4 custom event tracking for configurator and voice agent
All checks were successful
Build & Push / build-and-push (push) Successful in 1m23s
Events tracked:
- configurator_step_completed (with step number)
- configurator_brief_generated (with services and AI flag)
- voice_agent_started
- voice_agent_brief_generated

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 20:57:31 -04:00
2e23e26fc1 fix: pass NEXT_PUBLIC_GA_ID as Docker build arg for GA4 to work
All checks were successful
Build & Push / build-and-push (push) Successful in 1m29s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 20:52:06 -04:00
518f86265e feat: deep SEO optimization — metadata, OG tags, sitemap, structured data, GA4
All checks were successful
Build & Push / build-and-push (push) Successful in 1m28s
- Add metadataBase and localized generateMetadata to all pages (EN/FR)
- Add Open Graph and Twitter card defaults with branded OG image
- Add canonical URLs and hreflang alternates on every page
- Create robots.ts (allow all, block /admin/ and /api/)
- Create sitemap.ts with all routes x 2 locales and hreflang
- Add Organization, WebSite, and CreativeWork JSON-LD structured data
- Add GA4 (G-LD348WF8EM) with Consent Mode v2 (default denied for EEA)
- Add llms.txt for AI discoverability
- Add production nginx config for letsbe.biz

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 20:38:52 -04:00
57faddc051 feat: add favicon and apple touch icon, center discovery CTA button
All checks were successful
Build & Push / build-and-push (push) Successful in 1m46s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 19:15:41 -04:00
24d8ab73f5 style: increase hero SVG geometric opacity for better visibility
All checks were successful
Build & Push / build-and-push (push) Successful in 1m41s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 18:34:09 -04:00
2d5e588b2e copy: rewrite site messaging to lead with design, temper infrastructure
All checks were successful
Build & Push / build-and-push (push) Successful in 1m43s
Complete copy overhaul across all pages (EN + FR):
- Hero: "Your website. Your software. Your entire digital world."
- Services: "Design. Build. Grow." with reordered pillars
- Philosophy: "We do things differently" — craft leads, ownership closes
- About: remove all Côte d'Azur/Riviera references, new story narrative
- Services page: less jargon, outcome-focused language, honest AI claims
- SEO metadata: includes all three pillars (design, AI, infrastructure)
- Trust bar, CTA, footer, configurator, case study CTAs all updated
- French translations updated to match all English changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:49:44 -04:00
029d3d7970 docs: add site copy redesign spec
Complete design spec for rewriting all user-facing copy to lead with
web design/development, position infrastructure as supporting
differentiator, remove geographic references, and temper AI claims.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:42:53 -04:00
2943d90ab1 fix: show project card images in full color, add hover zoom
All checks were successful
Build & Push / build-and-push (push) Successful in 1m22s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:46:48 -04:00
40e9a257f7 feat: add hero background images to case study detail pages
Some checks failed
Build & Push / build-and-push (push) Has been cancelled
Each project page now has its image behind the hero text with a
dark gradient overlay for readability. Tags use a glass-morphism
style on the image background.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:46:21 -04:00
1f6bb7d066 feat: replace geometric placeholders with real project and brand images
All checks were successful
Build & Push / build-and-push (push) Successful in 1m35s
- Monaco Ocean: monaco_high_res.jpg in featured card
- Port Nimara: anguilla.png in small card
- Port Amador: panama.png in small card
- Philosophy section: philosophy_image.png replaces AbstractGeometry
- About "Our Story": our_story.png replaces StoryGeometry
- Removed all geometric placeholder components (GeometricPlaceholder,
  AbstractGeometry, StoryGeometry)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:32:09 -04:00
bcc09542b7 fix: respond to request_contact immediately, send confirmation as text
All checks were successful
Build & Push / build-and-push (push) Successful in 1m43s
The deferred tool response approach caused Gemini to timeout waiting.
Now request_contact responds immediately (telling the agent to wait),
and the confirm button sends a text message through the live WebSocket
to trigger complete_brief.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 15:52:53 -04:00
a174518496 feat: add Discovery section to landing page after Process
All checks were successful
Build & Push / build-and-push (push) Successful in 1m51s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:45:46 -04:00
896f0eb5f4 feat: create Discovery section component with voice panel
Standalone landing page section with warm copy, CTA, and expandable
inline voice conversation panel. Shows StepComplete on brief completion.
Only renders if voice support is detected.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:45:17 -04:00
3cdb95e488 feat: rebuild voice agent UI — larger layout, contact card, reconnect, no chips
- Larger orb (w-24), taller transcript (max-h-72), proper scrollIntoView
- On-screen contact confirmation card replaces verbal spell-back
- Reconnect button on connection loss
- Selection chips removed (structured data captured silently)
- Mobile-sticky controls for thumb reach

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:44:28 -04:00
cdb89553e0 feat: add contact card, deferred tool responses, and reconnection logic
- request_contact tool shows on-screen card for name/email verification
- Deferred tool responses let the UI wait for user confirmation
- WebSocket close preserves transcript and enables reconnection
- Reconnect seeds new Gemini session with prior conversation context

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:43:27 -04:00
28d063e251 feat: rewrite voice agent to consultative tone, add request_contact tool
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:41:07 -04:00
94a5876e7d i18n: add discovery section translations, update voice strings
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:39:42 -04:00
bcc24d0f40 refactor: remove ModeToggle from configurator, make it typed-form-only
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:38:43 -04:00
a5570a90b2 docs: add voice discovery pivot implementation plan
9-task plan covering: ModeToggle removal, i18n, system prompt rewrite,
contact card tool, reconnection logic, UI rebuild, Discovery section,
landing page integration, and email template verification.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 12:47:52 -04:00
81675335ad docs: add voice discovery mode design spec
Captures the pivot from form-filling voice mode to a standalone
consultative discovery experience with separate entry point, rewritten
system prompt, on-screen contact verification, and reconnection handling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:46:47 -04:00
3bf07674ad fix: end voice call when brief generation completes
All checks were successful
Build & Push / build-and-push (push) Successful in 1m58s
The WebSocket, mic, and audio contexts were never torn down after
complete_brief succeeded, so the Gemini agent kept listening and
responding in the background. Now endConversation() fires as soon as
the brief arrives, and the Start button is hidden during the 1.5s
transition so it doesn't flash.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 20:35:48 -04:00
600f1a5241 feat: deeper discovery questions + conversation summary in briefs
All checks were successful
Build & Push / build-and-push (push) Successful in 1m35s
- Agent now asks probing follow-up questions (pain points, current tools, vision, decision context)
- complete_brief tool includes conversationSummary field capturing ALL discussion details
- Summary merges into scope context for richer, more targeted briefs
- Updated both EN and FR system prompts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 15:11:18 +01:00
9b8f0a7f7f feat: agent spells back name and email for confirmation before generating brief
All checks were successful
Build & Push / build-and-push (push) Successful in 1m33s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 15:06:45 +01:00
3eae92e1c1 feat: show "Generating your brief..." badge during brief generation
All checks were successful
Build & Push / build-and-push (push) Successful in 1m57s
Visual feedback while the complete_brief API call runs (~15s).
Badge appears below the orb with a spinner animation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:58:56 +01:00
7fb3d85103 fix: prevent duplicate brief submissions, add completion logging
All checks were successful
Build & Push / build-and-push (push) Successful in 1m43s
- briefSubmittedRef prevents multiple complete_brief calls
- Added logging throughout completion flow for debugging
- Reset ref on new conversation start

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:51:26 +01:00
1e41c1c07c fix: use predefined values for tool calls, improve completion flow
Some checks failed
Build & Push / build-and-push (push) Has been cancelled
- System prompt now specifies exact predefined values for services/industries/timelines
- Agent instructed to call complete_brief IMMEDIATELY when name+email confirmed
- Chip labels fall back to raw value for unknown keys instead of showing i18n path
- Added completion transition logging

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:49:56 +01:00
66949c07d8 fix: accumulate transcript chunks into single messages per turn
All checks were successful
Build & Push / build-and-push (push) Successful in 1m23s
Streaming transcription words now merge into one bubble per agent/user turn
instead of creating separate entries for each chunk.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:42:04 +01:00
c48313ad91 fix: prevent page scroll when transcript updates
Some checks failed
Build & Push / build-and-push (push) Has been cancelled
Scroll only within transcript container, not the entire page.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:40:31 +01:00
015ae49d2d fix: use realtimeInput.text for intro prompt, handle Blob WebSocket data
Some checks failed
Build & Push / build-and-push (push) Has been cancelled
- Introduction prompt uses realtimeInput.text format (not clientContent)
- Agent now successfully introduces itself and sends audio responses
- Playback AudioContext created in user gesture for mobile

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:40:08 +01:00
6fcebe74af fix: create playback AudioContext in user gesture for mobile support
All checks were successful
Build & Push / build-and-push (push) Successful in 1m40s
- Playback AudioContext created during startConversation (button click)
- Removed sampleRate constraint from getUserMedia (let browser choose)
- Added audio chunk logging for debugging

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:34:19 +01:00
34a78e7d4a fix: remove unused debugLog from VoiceAgentContextValue interface
All checks were successful
Build & Push / build-and-push (push) Successful in 2m0s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:29:45 +01:00
edb765e0e1 fix: prompt voice agent to introduce itself after connection
Some checks failed
Build & Push / build-and-push (push) Failing after 1m31s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:27:35 +01:00
0a20d1e243 fix: correct WebSocket setup format and handle Blob messages
Some checks failed
Build & Push / build-and-push (push) Has been cancelled
- Setup uses "generationConfig" field (not "config") inside "setup" object
- Handle Blob data from WebSocket (Gemini sends binary, not text)
- Voice agent now successfully connects and receives setupComplete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:27:11 +01:00
bbf534cf4f fix: reduce rate limit to 5s, add 10s connection timeout
All checks were successful
Build & Push / build-and-push (push) Successful in 1m56s
- Rate limit reduced from 30s to 5s for testing
- WebSocket setup times out after 10s instead of hanging forever
- Added connection logging

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:19:57 +01:00
0e3c92f873 fix: correct WebSocket setup and audio format for Gemini Live API
All checks were successful
Build & Push / build-and-push (push) Successful in 1m30s
- Setup message uses "config" key (not "setup")
- Audio sent as realtimeInput.audio (not mediaChunks)
- Added message logging for debugging

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:15:42 +01:00
15136080ed fix: add detailed error logging to voice agent for debugging
All checks were successful
Build & Push / build-and-push (push) Successful in 1m29s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:04:20 +01:00
b4a265077e fix: split gemini-token into GET health check + POST token request
All checks were successful
Build & Push / build-and-push (push) Successful in 1m33s
Health check no longer triggers rate limiter, fixing toggle not appearing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:02:06 +01:00