bda6fcfec9
## What
After a partner submits the application wizard, the success screen now
offers an inline Cal.com booking widget so they can book an intro call
on the spot — keeping the partner process high-touch.
- Inline Cal.com embed on the application success step, prefilled with
the applicant's name/email (company in the notes)
- Wide `month_view` layout; the success modal widens to ~960px (the
4-step form and mobile are unchanged)
- Event-type-details panel hidden via `cal('ui', { hideEventTypeDetails:
true })` so it's just calendar + times, on its own `partner-intro` Cal
namespace (isolated from the ContactCal embed)
- "I'll book later" escape hatch; backend / submission path untouched
## Why
The warmest moment is right after someone opts in. Today the success
screen only shows a Close button — this turns that moment into a
scheduled conversation.
## How
- `PartnerIntroCalEmbed` — thin wrapper over `@calcom/embed-react`
(already a dependency), reusing the existing `ContactCal` embed pattern
- `buildPartnerIntroPrefill` — pure mapping of applicant fields → Cal
prefill
- `PartnerApplicationSuccess` — presentational success view (heading +
subtitle + embed + dismiss)
- The wizard reports submitted-state up (`onSubmittedChange`) so the
modal widens only on the booking step
- New Lingui copy + regenerated catalogs (en/es/fr)
## Test plan
- `npx jest PartnerApplication` — green (prefill mapping, embed
link/layout/prefill, success view)
- `npx nx typecheck twenty-website` — clean
- `npx oxlint -c .oxlintrc.json` / `npx oxfmt --check` — clean
- Manual: submit the wizard → success step shows the wide booking
calendar, prefilled, dark theme, no event-details panel; "I'll book
later" closes the modal
## Notes
- Frontend only — no backend, schema, or submission-path change
- Cal link `rashad-twenty/partner-intro` lives as a constant in
`config.ts`
- Branch is currently behind `main`; happy to rebase before review
47 lines
2.0 KiB
Bash
47 lines
2.0 KiB
Bash
PARTNER_APPLICATION_WEBHOOK_URL=
|
||
|
||
# Optional GitHub personal-access token (no scopes required) used by the
|
||
# community-stats fetcher (`src/lib/community/fetch-github-star-count.ts`).
|
||
# When set, requests use the 5000/hr authenticated limit instead of the
|
||
# 60/hr unauthenticated per-IP limit. Both responses are also cached for
|
||
# one hour via `unstable_cache`, so dev without a token still works.
|
||
# GITHUB_TOKEN=
|
||
|
||
# Public site URL — canonical origin used by `metadataBase`, sitemap, robots,
|
||
# OG/Twitter card URLs, Stripe checkout success URL, and billing portal return.
|
||
# No trailing slash. Defaults to https://twenty.com when unset.
|
||
NEXT_PUBLIC_WEBSITE_URL=
|
||
|
||
# --- Visual runtime kill switches ---------------------------------------
|
||
# Hard kill switch for every WebGL/Three/R3F decorative visual on the site.
|
||
# Set to "1" / "true" to ship a build with all heavy visuals statically
|
||
# replaced by their fallbacks (e.g. during a GPU-driver-related incident).
|
||
# NEXT_PUBLIC_DISABLE_HEAVY_VISUALS=
|
||
|
||
# Soft cap on the number of concurrent WebGL contexts the page is allowed
|
||
# to spin up. The browser's own hard cap is typically 8–16; we default to 8
|
||
# so a single page that mounts every illustration cannot exhaust the GPU
|
||
# context pool on integrated graphics.
|
||
# NEXT_PUBLIC_MAX_WEBGL_CONTEXTS=8
|
||
|
||
# Stripe — self-hosted enterprise checkout & subscription APIs
|
||
STRIPE_SECRET_KEY=
|
||
STRIPE_ENTERPRISE_MONTHLY_PRICE_ID=
|
||
STRIPE_ENTERPRISE_YEARLY_PRICE_ID=
|
||
|
||
# RS256 key pair used to sign enterprise license JWTs (use literal \n in PEM for env)
|
||
ENTERPRISE_JWT_PRIVATE_KEY=
|
||
ENTERPRISE_JWT_PUBLIC_KEY=
|
||
|
||
# Optional: short-lived validity token length in days (default 30)
|
||
# ENTERPRISE_VALIDITY_TOKEN_DURATION_DAYS=
|
||
|
||
# Twenty workspace the partners marketplace reads partner data from
|
||
# (server-side only) via the /s/partners REST endpoint.
|
||
TWENTY_PARTNERS_API_URL=
|
||
TWENTY_PARTNERS_API_KEY=
|
||
|
||
# Cal.com path (no host) the partner application success screen books the intro
|
||
# call onto, e.g. acme/partner-intro. Falls back to a built-in default when unset.
|
||
NEXT_PUBLIC_PARTNER_INTRO_CAL_LINK=
|