Public Talk-to-Sales surface and a "See pricing" hero CTA on the marketing landing page. Phase 2 Task 43 of self-serve signup. - frontend/src/api/sales.ts: salesApi.createLead -> POST /sales-leads. - ContactSalesPage at /contact-sales (public, gated by self_serve_enabled with a 404-style fallback). Form fields: name, work email, company, team size (1-2 / 3-5 / 6-10 / 11-25 / 26+), and an optional "what brought you here?" textarea -> message. Submit button disabled while in flight to block duplicate submissions. - Confirmation surface replaces the form on success. Calendly block is hidden when VITE_CALENDLY_URL is unset. - detectSource(): 'pricing_page' if document.referrer contains '/pricing', else 'landing_page'. Server emits the canonical PostHog talk_to_sales_form_submitted event with this source. - LandingPage: new "See pricing" hero CTA gated by useAppConfig(). self_serve_enabled. - frontend/.env.example + Dockerfile: VITE_CALENDLY_URL ARG/ENV. - Tests: ContactSalesPage submit/confirmation, Calendly hide-when-unset, in-flight de-dup, 404 when self-serve off; LandingPage CTA on/off. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
1.3 KiB
Plaintext
29 lines
1.3 KiB
Plaintext
# API URL - defaults to http://localhost:8000 if not set
|
|
VITE_API_URL=http://localhost:8000
|
|
|
|
# Sentry error monitoring (optional in dev, required in production)
|
|
VITE_SENTRY_DSN=
|
|
|
|
# Stripe publishable key (same pk_test_/pk_live_ value as backend STRIPE_PUBLISHABLE_KEY).
|
|
# Vite bakes this at build time, so prod requires ARG+ENV in frontend/Dockerfile (Lesson 60).
|
|
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_
|
|
|
|
# OAuth client IDs — must match backend GOOGLE_CLIENT_ID / MS_CLIENT_ID.
|
|
# Public values; Vite bakes at build time so prod requires ARG+ENV in frontend/Dockerfile.
|
|
VITE_GOOGLE_CLIENT_ID=
|
|
VITE_MS_CLIENT_ID=
|
|
|
|
# Origin used to build OAuth redirect_uri (e.g. http://localhost:5173 or https://app.example.com).
|
|
# Must equal backend OAUTH_REDIRECT_BASE so callback paths align. If unset, the
|
|
# frontend falls back to window.location.origin at click time.
|
|
VITE_OAUTH_REDIRECT_BASE=
|
|
|
|
# Self-serve signup safety fallback used by useAppConfig when GET /config/public
|
|
# is unreachable. Authoritative value comes from backend SELF_SERVE_ENABLED.
|
|
VITE_SELF_SERVE_ENABLED=false
|
|
|
|
# Calendly link surfaced on the /contact-sales confirmation screen. When unset,
|
|
# the "Want to skip ahead?" block is hidden. Vite bakes at build time, so prod
|
|
# requires ARG+ENV in frontend/Dockerfile.
|
|
VITE_CALENDLY_URL=
|