feat: prefer fast checkout for paid intake
All checks were successful
CI and Production Smoke / smoke (push) Successful in 10s

This commit is contained in:
OG T
2026-06-12 11:27:18 +08:00
parent 0d547b792c
commit e7140c1f3a
2 changed files with 28 additions and 9 deletions

View File

@@ -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>

View File

@@ -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}