Skip to content

feat(partners): add dedicated Railway Gold partner landing page#925

Open
jhislop-design wants to merge 2 commits into
mainfrom
jonny/eager-tesla-3b42bb
Open

feat(partners): add dedicated Railway Gold partner landing page#925
jhislop-design wants to merge 2 commits into
mainfrom
jonny/eager-tesla-3b42bb

Conversation

@jhislop-design
Copy link
Copy Markdown

@jhislop-design jhislop-design commented May 15, 2026

Summary

Replaces the generic /partners/$partner template for Railway with a purpose-built landing page at /partners/railway, fulfilling the Gold-tier sponsorship agreement. The static file-routed /partners/railway takes precedence over /partners/$partner, so the legacy template stays untouched for every other partner.

What's on the page

  • Hero — Railway brand wordmark (light/dark via existing PartnerImage), Gold Sponsor metadata, headline, intro copy, customer quote, two CTAs
  • Stats row — 2M+ devs, < 2 min deploy, 100 Gbps networking, $0 to start
  • 8 feature cards — auto-detect config, PR previews, observability, private networking, rollbacks, hard spend limits, regions, unlimited envs
  • 3-step deploy flow + two real Shiki-highlighted code blocks (tanstack.config.ts and terminal)
  • Library fit — chips for every TanStack lib + deeper notes for Start / Router / Query / DB
  • 4-tier pricing — Free / Hobby / Pro (highlighted) / Enterprise + per-second metered-pricing reference card
  • 3 customer testimonials — Common, BoxOutSports, Every (public quotes with real savings figures)
  • 6-question FAQ on the existing Collapsible component
  • Dark CTA section + Gold-sponsor credit footer

Built 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 global pre { @apply text-black } rule in app.css and rendering invisible on dark backgrounds
  • Card for every panel (feature, step, library, pricing, testimonial)
  • Button (as="a") for every CTA, with brand-tinted className overrides
  • Collapsible / CollapsibleTrigger / CollapsibleContent for the FAQ
  • seo() for meta tags (title, description, OG, Twitter Card)
  • PartnerImage + existing railway-{black,white}.svg assets for the hero wordmark

SEO

  • Page-specific title + description targeting "deploy tanstack to railway" and related queries
  • Two application/ld+json blocks emitted in SSR'd HTML:
    • The standard WebPage schema from getPartnerJsonLd()
    • A new FAQPage schema generated from the on-page FAQ — for Google rich results and AI search agents (ChatGPT / Claude / Perplexity)

Analytics

  • partner_viewed fires on mount with placement: 'detail'
  • partner_clicked fires on every outbound Railway CTA with destination_host: 'railway.com', matching the existing taxonomy in src/utils/analytics/events.ts

UTM tracking

All four outbound Railway links carry utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page.

Test plan

  • Visit /partners/railway in dev — hero, stats, features, code blocks, pricing tiers, FAQ, and dark CTA all render
  • Toggle theme — brand wordmark swaps black ↔ white, Shiki picks up .aurora-x in dark mode
  • Click each FAQ question — only one open at a time, smooth grid-rows transition, Plus icon rotates to ×
  • Click each outbound CTA — opens railway.com with the partner-page UTM intact
  • View page source on the deployed preview — both <script type="application/ld+json"> blocks present
  • Confirm partner_viewed + partner_clicked events show up in GA4 DebugView with partner_id=railway, placement=detail
  • Visit /partners/netlify to confirm the generic /partners/\$partner template still works for every other partner

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes

  • New Features
    • Introduced a new Railway partner landing page featuring product details, pricing information, setup guidance, testimonials, and frequently asked questions to help users explore the partnership offering.

Review Change Stack

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>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 15, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 66250262-feaa-4bfc-8046-fa576cd84ad2

📥 Commits

Reviewing files that changed from the base of the PR and between e52cd18 and cf1f215.

📒 Files selected for processing (2)
  • src/routeTree.gen.ts
  • src/routes/partners.railway.tsx

📝 Walkthrough

Walkthrough

This pull request adds a new Railway Gold Partner landing page to TanStack Router. It registers a child route at /partners/railway in the generated route tree and implements a full marketing page with hero section, features, pricing, testimonials, FAQ, and CTA sections, along with SEO metadata and analytics tracking.

Changes

Railway Gold Partner Page

Layer / File(s) Summary
Route registration in generated route tree
src/routeTree.gen.ts
The new /partners/railway route is registered as a child of PartnersRoute with id: '/railway' and wired into all type-safe route lookup maps (FileRoutesByFullPath, FileRoutesByTo, FileRoutesById), type unions, and module augmentation for TanStack Router's FileRoutesByPath.
Page content data and metadata setup
src/routes/partners.railway.tsx
Local data structures define Railway URL constants, feature list, deployment steps, pricing tiers, testimonials, supported libraries, and FAQ items; a getFaqJsonLd() helper converts FAQ data to JSON-LD schema format.
Route export, SEO head function, and helper components
src/routes/partners.railway.tsx
The Route export includes a head function that builds SEO metadata and conditionally injects JSON-LD partner and FAQ schemas; utility components CheckBadge(), trackRailwayClick(), and RailwayCodeExample() support CTA tracking and code sample rendering.
Page component and rendering sections
src/routes/partners.railway.tsx
The RailwayPartnerPage component manages FAQ open/close state, fires a partner_viewed analytics event on mount, and renders all sections: hero with partner image, stats grid, features, deployment how-it-works guide with code examples, library compatibility chips, pricing cards with metered pricing, testimonials, FAQ collapsibles, tracked CTA buttons, and footer.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 A railway lands on tanstack's site,
With routes and cards and FAQs bright,
From hero to pricing, the page takes flight,
Tracked events and schemas—all wired just right! 🚂✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: a new dedicated Railway Gold partner landing page at /partners/railway, which is the primary purpose of this PR.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonny/eager-tesla-3b42bb

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

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@jhislop-design jhislop-design changed the title ... feat(partners): add dedicated Railway Gold partner landing page May 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant