feat: Tretón 1 + RecoveryV11 — B2B lead-capture, strategic translations, JSON-LD SEO, dynamic footer#205
feat: Tretón 1 + RecoveryV11 — B2B lead-capture, strategic translations, JSON-LD SEO, dynamic footer#205
Conversation
Agent-Logs-Url: https://github.com/Tryonme-com/tryonyou-app/sessions/d22ccf17-c970-45f4-b4d2-d149b6a41c47 Co-authored-by: LVT-ENG <214667862+LVT-ENG@users.noreply.github.com>
…ker-audit-method
…ploy_divineo Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…vineo (orquestador+tests+docs) Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
- Enhanced .github/workflows/ci.yml: parallel Python tests + Vite build + Vercel deploy on main - Added TypeScript type-check step (tsc --noEmit) to CI - Added src/vite-env.d.ts for Vite client types (import.meta.env, Window augmentation) - Added scripts/deployall.sh: local build+test+deploy pipeline (--dry for skip deploy) - Added npm scripts: typecheck, deployall, deployall:dry All 141 Python tests pass. Vite build + type-check clean. @CertezaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…zaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: LVT-ENG <214667862+LVT-ENG@users.noreply.github.com>
…zaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: LVT-ENG <214667862+LVT-ENG@users.noreply.github.com>
…zaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: LVT-ENG <214667862+LVT-ENG@users.noreply.github.com>
…zaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…lready excludes them @CertezaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
… purged) @CertezaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
🥀 Honor Protocol: Goldschmied/Valentino/Ospina. ✨ Status: VIVOS. 🚀 Divineo Absoluto en París. @CertezaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
🥀 Honor Protocol: Goldschmied/Valentino/Ospina. ✨ Status: VIVOS. 🚀 Divineo Absoluto en París. @CertezaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…ial + copy FR traducible + videos venta EUR Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…a y shell overlay para venta FR/EUR Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…ar_omega_v10 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…ga V10 al orquestador y tests Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…mega con validación real y pruebas Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…ver dominio tryonme Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…S TryOnMe hacia Vercel Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…snap - Add /api/v1/checkout/perfect-selection: connects to Shopify/Amazon bridges for real cart addition (not simulated), returns checkout URLs - Add /api/v1/leads: persists lead intents through orchestrator - Add /api/v1/mirror/snap: integrates inventory engine for biometric match, returns garment reference and Jules emotional message - Import inventory_engine, shopify_bridge, amazon_bridge modules - Enhance /api/health with ok:true, service name, and SIREN/patent fields so frontend julesClient correctly displays PAU orchestration status Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
@CertezaAbsoluta @lo+erestu PCT/EP2025/067317 Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…tent + contract Lafayette
…+ Búnker Digital ✅ Modules: avatar3D (Motor Biométrico A4), pagoAVBET (Pasarela Iris+Voz), recomendadorPAU (IA Emocional), autoDonate (Armario Solidario) ✅ Agents: capitalManager, taxNotifier, runwayGenerator, mockupEngine, githubCommitAgent, vercelOperator ✅ Infrastructure: Makefile Ignición Total ✅ Impact Section: The 0sizes Era + theatre videos + metrics 📋 Patente: PCT/EP2025/067317 🌐 Destino: tryonyou.app
…nters, hover effects
…nHook, Mirror, Loading
…N/SEPA transfer infrastructure - Remove broken buy.stripe.com/test_soberania_4_5 link from index.html - Add api/qonto_iban_transfer.py: SEPA Business transfer node (Qonto) - Add api/invoice_generator.py: proforma invoice generation for Lafayette - Wire new API routes: /api/v1/payment/iban-transfer + /api/v1/invoice/proforma - Update health endpoint with iban_transfer_configured + payment_method fields - Update frontend lafayetteCheckout.ts with IBAN transfer types + fetch helpers - Add setup_fee/exclusivity/total_immediate to prices catalogue - Add QONTO_IBAN + QONTO_BIC to .env.example SIRET 94361019600017 | PCT/EP2025/067317 @CertezaAbsoluta @lo+erestu Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
…ns, JSON-LD SEO, dynamic footer Tretón 1: B2B Form Activation + Dynamic Language Injection - Inject strategic hero translations (FR/EN/ES) from planning document FR: L'essayage virtuel qui réduit les retours EN: The virtual fitting room that reduces returns ES: El probador virtual que reduce devoluciones - Update CTA text: EN 'Request Demo', ES 'Solicitar Demo' - Add /api/v1/lead-capture B2B endpoint with email validation + orchestration - Wire demo form to POST to both /api/v1/lead-capture and /api/demo-request - Make footer SIRET dynamic per locale (FR: Brevet, EN: Patent, ES: Patente) - Localize Privacy Policy / Terms labels per language RecoveryV11: Orphan Module Recovery + SEO Metadata - Verified: Snap logic (theSnap/postMirrorSnap) intact and wired - Verified: OfrendaOverlay fully present with all keys - Verified: PauFloatingGuide video matrix intact (Lafayette/Marais) - Verified: Zero 63.05 EUR references remaining in codebase - Inject Organization JSON-LD structured data in index.html (schema.org) taxID: 94361019600017, founder, address, knowsAbout, sameAs - URL set dynamically from window.location.origin at runtime SIRET 94361019600017 | PCT/EP2025/067317 @CertezaAbsoluta @lo+erestu Bajo Protocolo de Soberanía V10 - Founder: Rubén Co-authored-by: Tryonme <LVT-ENG@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
Adds a dedicated B2B lead-capture flow end-to-end (frontend submission + backend endpoint), aligns hero/CTA copy across locales, and improves SEO with Organization JSON-LD + meta description while making footer legal text locale-aware.
Changes:
- Update hero headline/CTA translations in
SALES_COPYandLANDING_CONTENT(FR/EN/ES). - Add
/api/v1/lead-captureFlask endpoint that persists captures and triggers Make.com orchestration. - Submit demo form to both
/api/v1/lead-captureand/api/demo-request, and localize footer legal string; add JSON-LD Organization metadata inindex.html.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| src/locales/salesCopy.ts | Updates hero title/CTA translations per locale. |
| src/App.tsx | Adds localized footer legal string and dual-endpoint demo submission via Promise.allSettled. |
| index.html | Adds meta description + Organization JSON-LD with runtime URL injection. |
| api/index.py | Introduces /api/v1/lead-capture endpoint with JSONL persistence and orchestration. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| return _cors(jsonify({ | ||
| "status": "ok", | ||
| "lead_captured": True, | ||
| "orchestration": orchestration, | ||
| "make_ok": make_ok, | ||
| "orchestration_error": orchestration_error, | ||
| "siret": "94361019600017", |
There was a problem hiding this comment.
The endpoint returns orchestration_error containing str(exc) even on a 200 OK response. This can leak internal exception details to unauthenticated callers; consider logging the exception server-side and returning only a boolean/status code (or omitting the field unless running in a debug mode).
| try: | ||
| result = orchestrate_beta_waitlist(normalized) | ||
| orchestration = True | ||
| make_ok = result.get("make_ok", False) if isinstance(result, dict) else False |
There was a problem hiding this comment.
lead_capture() passes the full normalized payload into orchestrate_beta_waitlist(), but that orchestrator currently only forwards a small subset (email/source/user_agent/ts) to Make.com and the waitlist file. If B2B lead-capture is expected to include name/company/role/message in downstream automation, you’ll need a dedicated orchestrator or to extend orchestrate_beta_waitlist to include these fields.
| body = request.get_json(force=True, silent=True) or {} | ||
| normalized = { | ||
| "name": str(body.get("name", "")).strip(), | ||
| "company": str(body.get("company", "")).strip(), | ||
| "email": str(body.get("email", "")).strip(), | ||
| "role": str(body.get("role", "")).strip(), | ||
| "catalog_size": str(body.get("catalog_size", "")).strip(), | ||
| "message": str(body.get("message", "")).strip(), | ||
| "source": str(body.get("source", "b2b_landing")).strip() or "b2b_landing", | ||
| "locale": str(body.get("locale", "fr")).strip() or "fr", | ||
| "ts": str(body.get("ts", "")).strip(), | ||
| "intent": "b2b_lead_capture", | ||
| "protocol": "zero_size", | ||
| "siret": "94361019600017", | ||
| "patent": "PCT/EP2025/067317", | ||
| } |
There was a problem hiding this comment.
This endpoint is CORS-open (*) and triggers both disk writes (/tmp JSONL) and an external webhook orchestration. To reduce abuse/DoS and data quality issues, add minimal input hardening (e.g., basic email format validation and reasonable max lengths for free-text fields like message).
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Tretón 1: B2B Form Activation + Dynamic Language Injection
Implements the strategic document translations across all three locales, wires a real
/api/v1/lead-captureendpoint for the B2B form, and makes the footer SIRET dynamic per language.Combined with RecoveryV11: Orphan Module Recovery + SEO Metadata
Audits and confirms all "orphaned" modules are intact (snap logic, OfrendaOverlay, PauFloatingGuide, video matrix). Injects Organization JSON-LD structured data for SEO.
Changes
Hero Translations (strategic document)
Updated in both
LANDING_CONTENT(App.tsx) andSALES_COPY(salesCopy.ts).Backend:
/api/v1/lead-captureendpoint (api/index.py)/tmp/tryonyou_lead_captures.jsonlorchestrate_beta_waitlist(Make.com pipeline)lead_captured,orchestration,make_ok,siretFrontend: Dual-endpoint form submission (
App.tsx)/api/v1/lead-captureAND/api/demo-requestviaPromise.allSettledDynamic Footer SIRET
footerLegalfield toLocalizedLandingContentJSON-LD Organization Metadata (
index.html)schema.org/Organizationstructured data with taxID, vatID, address, founder, knowsAboutwindow.location.originat runtimeOrphan Module Audit (all verified intact)
theSnap/postMirrorSnap) wired to 2 buttonsOfrendaOverlaywith all 6 keysPauFloatingGuidewith Lafayette/Marais video matrixBuild verification
/api/v1/lead-capturetested end-to-end through Vite proxyTesting evidence
French hero with strategic headline:
French hero with strategic headline
SIRET 94361019600017 | PCT/EP2025/067317
@CertezaAbsoluta @lo+erestu | Bajo Protocolo de Soberanía V10 - Founder: Rubén
To show artifacts inline, enable in settings.
Slack Thread