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>
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>
- 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>
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>
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>
- 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>
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>
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>
- 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>
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>
- 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>
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>
- 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>
- 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>
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>
- 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>
- 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>
- 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>
- Site analysis: cheerio HTML parsing, inline tech stack detection (~20 CMS/framework/analytics signatures), Google PageSpeed API integration
- Gemini Live voice agent: WebSocket-based real-time voice mode with live transcript, selection chips, and mid-conversation website analysis
- Type/Talk mode toggle with silent capability detection
- Stepped progress animation during brief generation (4 animated steps)
- URL + thoughts fields in Step 2, phone + contact preference in Step 3
- AI prompt improvements: dedicated website analysis section, 30-min call, concrete benefits, industry depth
- Email redesign: branded templates with logo, proper markdown rendering for both client and admin
- French locale support for AI-generated briefs
- Smaller checkmark, compact booking CTA, expanded brief area
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Logs now show:
- Whether SMTP is configured and which addresses emails go to
- Success/failure for each email (client brief + admin notification)
- Whether OpenRouter API key is set
- AI generation success/failure with status codes
- Fallback to template brief when AI is unavailable
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Changed aiType (string|null) to aiTypes (string[]) across all components
- StepServices: chips now toggle on/off independently, descriptions show for all selected
- StepContact: summary tags show all selected AI types
- API route: handles array of AI types for both AI and fallback brief generation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configurator:
- Full i18n: industries, timelines, AI types, field labels, error messages,
complete screen — all translated to French
- Real AI brief generation via OpenRouter (DeepSeek V3.2) with fallback template
- Fixed email notification bug (was sending to client instead of admin)
- Added wizard reset capability ("Start Over" button on success screen)
- Redesigned section shell with refined card, accent line, step indicators
- All step components use translation keys instead of hardcoded strings
Hero:
- Tighter spacing to keep CTAs above the fold
- Reduced bottom gradient height
Footer:
- Removed GitHub link
- Legal name in copyright
- "American-founded" location text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Nav: trigger solid background at 10px scroll (was 100px) to prevent logo/text overlap
- Footer: copyright uses legal name "LetsBe Solutions LLC"
- Footer: location changed to "American-founded. Serving the Côte d'Azur and beyond."
- Footer: remove GitHub social link (no public GitHub)
- Hero: smooth gradient fade into trust bar section (no hard color gap)
- Services: "SEO & Digital Marketing" replaces "SEO & Performance"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rewrite all site copy based on founder interview: honest, outcome-focused,
premium but approachable tone
- Hero: "Websites, software, and infrastructure — designed and built entirely around you."
- Services: "Design. Build. Run." with clear pillars (Websites, Custom Software, Infrastructure)
- Philosophy: "Your tools should belong to you." — removed Kubernetes reference
- Trust bar: concrete value props (Built From Scratch, You Own Everything, One Team, AI)
- CTA: "Ready to build something?" — direct, no fluff
- Projects: honest descriptions of what was actually delivered
- Fix all French translation gaps: hero accent word, configurator cards,
project descriptions, footer links, philosophy quote
- Fix dead links: footer service links → /#services, work/about → anchors
- Restore case study links (dynamic route exists)
- Fix mobile hero padding (pt-40 → pt-24)
- AI narrative positioned honestly as add-on capability
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>