feat(partners): add dedicated Railway Gold partner landing page#925
feat(partners): add dedicated Railway Gold partner landing page#925jhislop-design wants to merge 5 commits into
Conversation
Replaces the generic `partners.$partner` template for Railway with a
purpose-built landing route at `/partners/railway`, in line with the
Gold-tier sponsorship agreement.
The page is built almost entirely from existing tanstack.com primitives
to stay visually and behaviorally consistent with the rest of the site:
- `CodeBlock` (Shiki) for the config and terminal snippets (replaces a
hand-rolled `<pre>` which inherited the global `text-black` rule and
rendered invisible on dark backgrounds)
- `Card` for feature, step, library-fit, pricing and testimonial panels
- `Button` (`as="a"`) for every CTA, with brand-tinted overrides on the
hero and dark CTA section
- `Collapsible` / `CollapsibleTrigger` / `CollapsibleContent` for the
FAQ accordion, controlled by a parent `openFaq` state so only one
answer expands at a time
- `seo()` for title/description/OG/Twitter Card meta
- Existing `PartnerImage` and `railway-{black,white}.svg` brand marks
for the hero
SEO additions:
- Page-specific title + description targeting "deploy tanstack to
railway" and related queries
- Two `application/ld+json` blocks in SSR: the existing partner
`WebPage` schema plus a new `FAQPage` schema generated from the
on-page FAQ for Google rich results + AI search agents
Analytics:
- Fires `partner_viewed` on mount with `placement: 'detail'`
- Fires `partner_clicked` with `destination_host: 'railway.com'` on
every outbound Railway CTA, matching the existing taxonomy in
`analytics/events.ts`
All outbound Railway links carry
`utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page`.
The static `/partners/railway` route takes file-routing precedence
over the parametric `/partners/$partner` template, so the legacy
template is preserved untouched for every other partner.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughAdds a new Railway Gold Partner landing page and registers the child route ChangesRailway Gold Partner Page
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint skipped: no ESLint configuration detected in root package.json. To enable, add Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Voice + conversion pass before shipping. The hero, feature cards, and
section headings now match TanStack's restrained, pragmatic tone instead
of echoing Railway's own marketing site.
Copy changes:
- Hero paragraph rewritten using the same framing as
`partnerGuidance.railway` in `partner-pages.ts` (drop "all-in-one
intelligent cloud platform trusted by 2M+ developers" — that's
Railway's tagline, not TanStack's voice)
- Feature card descriptions tightened to be outcome-focused
("No YAML to maintain.", "Test routing, data, and server logic
before merging.")
- Replace emoji feature icons with Lucide icons (Rocket,
GitPullRequest, LineChart, Network, Undo2, ShieldCheck, Globe,
Infinity) to match the site's icon language
- Testimonial section heading "Teams are saving big on infrastructure"
→ "What teams say after switching" + a neutral framing line
CTAs:
The page previously had only the hero CTA + final CTA section, leaving
~6 content sections between them with no out-link. Added three mid-page
CTA blocks and varied the labels so no two CTAs read the same:
- Hero primary: "Deploy free in 2 minutes" (+ "No credit card · $5 in
trial credits on signup" microcopy)
- After how-it-works code blocks: "Try the Railway preset" + "Read the
deployment guide"
- After pricing tiers: "Start with $5 in credits" + "Estimate your
costs" (new link to railway.com/pricing)
- After testimonials: "Move your app to Railway" + per-second-billing
microcopy
- Final CTA: "Deploy your TanStack app" + "Open the docs"
Outbound railway.com links: 4 → 9, all distinct labels, all carrying
the partner-page UTM.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Step 01 was `npx create-tsrouter-app my-app`, which is the older router-only scaffolder. The TanStack Start docs recommend the unified CLI for new apps, so match the official getting-started instructions. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Replaces the generic
/partners/$partnertemplate for Railway with a purpose-built landing page at/partners/railway, fulfilling the Gold-tier sponsorship agreement. The static file-routed/partners/railwaytakes precedence over/partners/$partner, so the legacy template stays untouched for every other partner.What's on the page
PartnerImage), Gold Sponsor metadata, headline, intro copy, customer quote, two CTAstanstack.config.tsand terminal)CollapsiblecomponentBuilt from existing tanstack.com primitives
To stay visually and behaviorally consistent with the rest of the site, the page uses:
CodeBlock(Shiki) for code snippets — fixes a hand-rolled<pre>that was being clobbered by the globalpre { @apply text-black }rule inapp.cssand rendering invisible on dark backgroundsCardfor every panel (feature, step, library, pricing, testimonial)Button(as="a") for every CTA, with brand-tinted className overridesCollapsible/CollapsibleTrigger/CollapsibleContentfor the FAQseo()for meta tags (title, description, OG, Twitter Card)PartnerImage+ existingrailway-{black,white}.svgassets for the hero wordmarkSEO
application/ld+jsonblocks emitted in SSR'd HTML:WebPageschema fromgetPartnerJsonLd()FAQPageschema generated from the on-page FAQ — for Google rich results and AI search agents (ChatGPT / Claude / Perplexity)Analytics
partner_viewedfires on mount withplacement: 'detail'partner_clickedfires on every outbound Railway CTA withdestination_host: 'railway.com', matching the existing taxonomy insrc/utils/analytics/events.tsUTM tracking
All four outbound Railway links carry
utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page.Test plan
/partners/railwayin dev — hero, stats, features, code blocks, pricing tiers, FAQ, and dark CTA all render.aurora-xin dark moderailway.comwith the partner-page UTM intact<script type="application/ld+json">blocks presentpartner_viewed+partner_clickedevents show up in GA4 DebugView withpartner_id=railway,placement=detail/partners/netlifyto confirm the generic/partners/\$partnertemplate still works for every other partner🤖 Generated with Claude Code
Summary by CodeRabbit