feat: prefer fast checkout for paid intake
All checks were successful
CI and Production Smoke / smoke (push) Successful in 10s
All checks were successful
CI and Production Smoke / smoke (push) Successful in 10s
This commit is contained in:
@@ -85,7 +85,13 @@ export default async function ProposePage({ searchParams }: { searchParams?: Sea
|
|||||||
const growthKit = referralAgent
|
const growthKit = referralAgent
|
||||||
? buildAgentGrowthKit({ agentId: referralAgent, campaign, source })
|
? buildAgentGrowthKit({ agentId: referralAgent, campaign, source })
|
||||||
: null;
|
: null;
|
||||||
|
const stripePaymentAvailable = Boolean(process.env.STRIPE_SECRET_KEY);
|
||||||
const walletPaymentAvailable = Boolean(TREASURY_USDC_ADDRESS);
|
const walletPaymentAvailable = Boolean(TREASURY_USDC_ADDRESS);
|
||||||
|
const preferredPaymentMethod = stripePaymentAvailable ? "stripe" : "wallet";
|
||||||
|
const quickPaymentLabel = stripePaymentAvailable
|
||||||
|
? `${quickPackage.label} 立即刷卡付款`
|
||||||
|
: `快速取得 ${quickPackage.label} USDC 付款指示`;
|
||||||
|
const quickPaymentButton = stripePaymentAvailable ? "前往安全刷卡付款" : "直接進入錢包付款";
|
||||||
|
|
||||||
if (referralAgent) {
|
if (referralAgent) {
|
||||||
const requestHeaders = await headers();
|
const requestHeaders = await headers();
|
||||||
@@ -175,18 +181,23 @@ export default async function ProposePage({ searchParams }: { searchParams?: Sea
|
|||||||
<input type="hidden" name="source" value={source} />
|
<input type="hidden" name="source" value={source} />
|
||||||
<input type="hidden" name="quickMode" value="paid_scout" />
|
<input type="hidden" name="quickMode" value="paid_scout" />
|
||||||
<input type="hidden" name="packageId" value={quickPackage.id} />
|
<input type="hidden" name="packageId" value={quickPackage.id} />
|
||||||
<input type="hidden" name="paymentMethod" value="wallet" />
|
<input type="hidden" name="paymentMethod" value={preferredPaymentMethod} />
|
||||||
<input type="hidden" name="budgetUsd" value={prefill.budgetUsd} />
|
<input type="hidden" name="budgetUsd" value={prefill.budgetUsd} />
|
||||||
<input type="hidden" name="title" value="Paid scout intake request" />
|
<input type="hidden" name="title" value="Paid scout intake request" />
|
||||||
<input
|
<input
|
||||||
type="hidden"
|
type="hidden"
|
||||||
name="description"
|
name="description"
|
||||||
value="Email-only paid scout intake. Scope details are pending follow-up after USDC payment instructions are issued."
|
value="Email-only paid scout intake. Scope details are pending follow-up after payment is started."
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className="flex flex-col gap-4 md:flex-row md:items-end">
|
<div className="flex flex-col gap-4 md:flex-row md:items-end">
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<p className="text-sm font-semibold text-emerald-50">快速取得 {quickPackage.label} USDC 付款指示</p>
|
<p className="text-sm font-semibold text-emerald-50">{quickPaymentLabel}</p>
|
||||||
|
<p className="mt-1 text-xs leading-5 text-emerald-100/80">
|
||||||
|
{stripePaymentAvailable
|
||||||
|
? "最短路徑:留下 email 後直接進入 Stripe checkout。"
|
||||||
|
: "目前正式環境未啟用 Stripe,先使用 Base USDC wallet checkout。"}
|
||||||
|
</p>
|
||||||
<label className="mt-3 grid gap-2 text-sm font-medium text-emerald-50">
|
<label className="mt-3 grid gap-2 text-sm font-medium text-emerald-50">
|
||||||
Email
|
Email
|
||||||
<input
|
<input
|
||||||
@@ -204,7 +215,7 @@ export default async function ProposePage({ searchParams }: { searchParams?: Sea
|
|||||||
type="submit"
|
type="submit"
|
||||||
className="inline-flex h-11 items-center justify-center gap-2 rounded-md bg-emerald-300 px-5 text-sm font-semibold text-zinc-950 transition hover:bg-emerald-200"
|
className="inline-flex h-11 items-center justify-center gap-2 rounded-md bg-emerald-300 px-5 text-sm font-semibold text-zinc-950 transition hover:bg-emerald-200"
|
||||||
>
|
>
|
||||||
直接進入錢包付款
|
{quickPaymentButton}
|
||||||
<ArrowRight className="h-4 w-4" />
|
<ArrowRight className="h-4 w-4" />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -247,7 +258,7 @@ export default async function ProposePage({ searchParams }: { searchParams?: Sea
|
|||||||
<legend className="mb-3 text-sm font-semibold text-zinc-100">2. 付款方式</legend>
|
<legend className="mb-3 text-sm font-semibold text-zinc-100">2. 付款方式</legend>
|
||||||
<div className="grid gap-3 md:grid-cols-2">
|
<div className="grid gap-3 md:grid-cols-2">
|
||||||
<label className="flex cursor-pointer items-center gap-3 rounded-md border border-zinc-700 bg-zinc-950 p-4 hover:border-emerald-400">
|
<label className="flex cursor-pointer items-center gap-3 rounded-md border border-zinc-700 bg-zinc-950 p-4 hover:border-emerald-400">
|
||||||
<input type="radio" name="paymentMethod" value="wallet" defaultChecked={walletPaymentAvailable} className="h-4 w-4 accent-emerald-400" />
|
<input type="radio" name="paymentMethod" value="wallet" defaultChecked={!stripePaymentAvailable && walletPaymentAvailable} className="h-4 w-4 accent-emerald-400" />
|
||||||
<Wallet className="h-5 w-5 text-emerald-300" />
|
<Wallet className="h-5 w-5 text-emerald-300" />
|
||||||
<span>
|
<span>
|
||||||
<span className="block text-sm font-medium text-white">USDC 錢包,直接入 Treasury</span>
|
<span className="block text-sm font-medium text-white">USDC 錢包,直接入 Treasury</span>
|
||||||
@@ -255,11 +266,13 @@ export default async function ProposePage({ searchParams }: { searchParams?: Sea
|
|||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<label className="flex cursor-pointer items-center gap-3 rounded-md border border-zinc-700 bg-zinc-950 p-4 hover:border-emerald-400">
|
<label className="flex cursor-pointer items-center gap-3 rounded-md border border-zinc-700 bg-zinc-950 p-4 hover:border-emerald-400">
|
||||||
<input type="radio" name="paymentMethod" value="stripe" defaultChecked={!walletPaymentAvailable} className="h-4 w-4 accent-emerald-400" />
|
<input type="radio" name="paymentMethod" value="stripe" defaultChecked={stripePaymentAvailable || !walletPaymentAvailable} className="h-4 w-4 accent-emerald-400" />
|
||||||
<CreditCard className="h-5 w-5 text-emerald-300" />
|
<CreditCard className="h-5 w-5 text-emerald-300" />
|
||||||
<span>
|
<span>
|
||||||
<span className="block text-sm font-medium text-white">信用卡</span>
|
<span className="block text-sm font-medium text-white">信用卡 / Stripe</span>
|
||||||
<span className="mt-1 block text-xs text-zinc-400">Stripe 收款後再入帳</span>
|
<span className="mt-1 block text-xs text-zinc-400">
|
||||||
|
{stripePaymentAvailable ? "最快完成付款與 webhook 入帳" : "正式環境尚未啟用 Stripe key"}
|
||||||
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@@ -376,7 +389,7 @@ export default async function ProposePage({ searchParams }: { searchParams?: Sea
|
|||||||
type="submit"
|
type="submit"
|
||||||
className="mt-6 inline-flex h-12 w-full items-center justify-center gap-2 rounded-md bg-sky-400 px-5 text-sm font-semibold text-zinc-950 transition hover:bg-sky-300 md:w-auto"
|
className="mt-6 inline-flex h-12 w-full items-center justify-center gap-2 rounded-md bg-sky-400 px-5 text-sm font-semibold text-zinc-950 transition hover:bg-sky-300 md:w-auto"
|
||||||
>
|
>
|
||||||
取得付款指示
|
{stripePaymentAvailable ? "前往付款" : "取得 USDC 付款指示"}
|
||||||
<ArrowRight className="h-4 w-4" />
|
<ArrowRight className="h-4 w-4" />
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -60,8 +60,14 @@ services:
|
|||||||
- NEXT_PUBLIC_VIBEWORK_SITE_URL=${NEXT_PUBLIC_VIBEWORK_SITE_URL:-https://vibework.wooo.work}
|
- NEXT_PUBLIC_VIBEWORK_SITE_URL=${NEXT_PUBLIC_VIBEWORK_SITE_URL:-https://vibework.wooo.work}
|
||||||
- NEXT_PUBLIC_ASSET_PREFIX=${NEXT_PUBLIC_ASSET_PREFIX:-https://agent.wooo.work}
|
- NEXT_PUBLIC_ASSET_PREFIX=${NEXT_PUBLIC_ASSET_PREFIX:-https://agent.wooo.work}
|
||||||
- AGENT_GATEWAY_URL=${AGENT_GATEWAY_URL:-https://agent.wooo.work}
|
- AGENT_GATEWAY_URL=${AGENT_GATEWAY_URL:-https://agent.wooo.work}
|
||||||
|
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY:-}
|
||||||
|
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET:-}
|
||||||
- VIBEWORK_TREASURY_USDC_ADDRESS=${VIBEWORK_TREASURY_USDC_ADDRESS:-}
|
- VIBEWORK_TREASURY_USDC_ADDRESS=${VIBEWORK_TREASURY_USDC_ADDRESS:-}
|
||||||
- VIBEWORK_TREASURY_WALLET_LABEL=${VIBEWORK_TREASURY_WALLET_LABEL:-USDC Treasury}
|
- VIBEWORK_TREASURY_WALLET_LABEL=${VIBEWORK_TREASURY_WALLET_LABEL:-USDC Treasury}
|
||||||
|
- VIBEWORK_TREASURY_USDC_NETWORK=${VIBEWORK_TREASURY_USDC_NETWORK:-Base USDC (native)}
|
||||||
|
- VIBEWORK_TREASURY_USDC_CHAIN_ID=${VIBEWORK_TREASURY_USDC_CHAIN_ID:-8453}
|
||||||
|
- VIBEWORK_TREASURY_USDC_TOKEN_ADDRESS=${VIBEWORK_TREASURY_USDC_TOKEN_ADDRESS:-0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913}
|
||||||
|
- VIBEWORK_TREASURY_USDC_RPC_URL=${VIBEWORK_TREASURY_USDC_RPC_URL:-https://mainnet.base.org}
|
||||||
- A2A_GROWTH_ENABLE_OUTBOUND=${A2A_GROWTH_ENABLE_OUTBOUND:-false}
|
- A2A_GROWTH_ENABLE_OUTBOUND=${A2A_GROWTH_ENABLE_OUTBOUND:-false}
|
||||||
- A2A_LEAD_GEN_DRY_RUN=${A2A_LEAD_GEN_DRY_RUN:-true}
|
- A2A_LEAD_GEN_DRY_RUN=${A2A_LEAD_GEN_DRY_RUN:-true}
|
||||||
- A2A_LEAD_GEN_ENABLE_OUTBOUND=${A2A_LEAD_GEN_ENABLE_OUTBOUND:-false}
|
- A2A_LEAD_GEN_ENABLE_OUTBOUND=${A2A_LEAD_GEN_ENABLE_OUTBOUND:-false}
|
||||||
|
|||||||
Reference in New Issue
Block a user