Commit 8e4e7cd
fix(marketing): Team CTA contact-sales (not buyable) + hero self-serve reframe (#214)
Launch-readiness polish for the public homepage (instanode-web).
Display-detail accuracy (HARD pillar) — fix a real Team-shown-as-buyable bug:
- The homepage Team tile's CTA pointed at the self-serve
/app/checkout?plan=team path. Team is gated (TEAM-GATE, 2026-06-04 CEO
directive): the server-side gate rejects a Team checkout with
400 tier_not_yet_available, so the homepage was marketing a tier the
platform can't sell. The inline comment already flagged this as a known
reconciliation follow-up.
- Reconciled with PricingPage.tsx + BillingPage.tsx: Team CTA is now
"Contact sales →" → mailto:sales@instanode.dev (named const
SALES_MAILTO_TEAM). No surface markets Team as buyable. Pro remains the
only "Most popular"-badged tier; Team is not badged/highlighted.
- Verified against live rendered output: instanode.dev currently serves the
buyable Team CTA; the freshly-built dist now serves the contact-sales mailto.
Marketing copy polish (safe, non-fabricated):
- Hero subhead reframed to emphasize self-serve reliability: "Self-serve from
the first call to a paid plan — no signup, no Docker, no sales call."
(Hobby/Pro are genuinely self-serve checkout; no invented claims.)
NO fabricated social proof added (no invented counts/logos/testimonials).
NO Team marketing as available/buyable/Most-Popular.
Regression guards: two new MarketingPage.test.tsx tests pin the Team CTA to a
contact-sales mailto (forbidding plan=team / "Start team" from creeping back)
and assert exactly one "Most popular" badge, on Pro.
npm run gate green (tsc + build + 1149 vitest, +2 new).
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent c031fce commit 8e4e7cd
2 files changed
Lines changed: 57 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
124 | 164 | | |
125 | 165 | | |
126 | 166 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
97 | 104 | | |
98 | 105 | | |
99 | 106 | | |
| |||
203 | 210 | | |
204 | 211 | | |
205 | 212 | | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
212 | 220 | | |
213 | 221 | | |
214 | 222 | | |
| |||
221 | 229 | | |
222 | 230 | | |
223 | 231 | | |
224 | | - | |
225 | | - | |
| 232 | + | |
| 233 | + | |
226 | 234 | | |
227 | 235 | | |
228 | 236 | | |
| |||
311 | 319 | | |
312 | 320 | | |
313 | 321 | | |
314 | | - | |
| 322 | + | |
315 | 323 | | |
316 | 324 | | |
317 | 325 | | |
| |||
0 commit comments