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>
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>
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>
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>
The nextjs user couldn't write to .next/cache at runtime because
the directory was created by root during the build stage.
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>
- Hero: convert 7 infinite framer-motion JS animations to GPU-composited CSS @keyframes
- Hero: remove blur filter from word reveal animation (expensive paint)
- Hero: remove eyebrow text overlapping navbar, add top padding
- Process: widen header column (2/5) so title doesn't crowd step cards
- TrustBar: center icons and text in cards
- Fonts: add Google Fonts @import with display=swap + preconnect hints
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Let the ghosted numerals + gradient top bar carry the visual identity.
Tighter layout: numeral flows directly into title into description.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Created src/lib/email.ts with Nodemailer + Poste.io SMTP
- sendBriefToClient: formatted HTML brief email to the lead
- sendLeadNotification: admin notification with submission details
- Emails fire non-blocking (don't delay the brief response)
- Only sends if SMTP_HOST and SMTP_PASS are configured
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>