gads: CRO improvements to /gads/terraform/ + opt-in template fields#18766
gads: CRO improvements to /gads/terraform/ + opt-in template fields#18766alexleventer wants to merge 4 commits intomasterfrom
Conversation
The terraform landing page wasn't converting. The biggest cause was a template bug: gads-template.html passed `title` to the hero partial but the partial reads `subtitle`, so the carefully-written `subheading` frontmatter on all 33 gads pages was silently dropped. Hero rendered with just an H1 and no value prop or CTA above the fold. Fixes the bug for all gads pages, and adds opt-in template fields so landing pages can render hero CTAs, a per-page CTA label/href override, overview bullets, a competitor comparison table, side-by-side before/after code, repositionable social proof, CTA microcopy, and DKI of the H1. All new fields are opt-in — the other 32 pages render unchanged until they fill in the new frontmatter. Activates the new fields on /gads/terraform/ as the pilot. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@claude - pls review |
|
Claude finished @alexleventer's task in 2m 18s —— View job PR Review: gads CRO improvements + opt-in template fields
SummaryThis is a well-structured PR. The bug fix is real and the opt-in design is the right call — all 33 existing pages remain unchanged until someone opts in. Code quality is high. A few things worth discussing before merge: Bug fix: confirmed correct
Now correctly passes IssuesMedium — Terraform-specific defaults in a shared template
{{ $feature.before_after.before.title | default "Before — Terraform (HCL)" }}
{{ $feature.before_after.after.title | default "After — Pulumi" }}These defaults are baked into the shared template. If another gads page (e.g., Medium —
{{ .competitor_label | default "Terraform" }}Same concern as above. A page comparing against CDK or CloudFormation that adds a comparison table but forgets Minor — Fragile DKI placeholder embedded in YAML frontmatter
description: "...with zero downtime. <span id=\"dki-placeholder\" style=\"display:none;\"></span>"Raw HTML with a required JS-targeting ID inside a YAML string is easy to accidentally delete. It would be worth a short comment somewhere (frontmatter comment or a Nit — Secondary CTA missing analytics attribute
What looks good
The two medium items above are worth fixing before this becomes the pattern for other gads pages — a neutral default will prevent silent "Terraform" leaking into non-Terraform competitor pages. Everything else is ship-ready. |
|
Your site preview for commit ef4c35b is ready! 🎉 http://www-testing-pulumi-docs-origin-pr-18766-ef4c35b5.s3-website.us-west-2.amazonaws.com |
- Drop Terraform-specific defaults from the shared template: the before/after card titles default to "Before"/"After" and the comparison table competitor column defaults to "Competitor". The terraform page sets explicit titles so it renders the same; future non-Terraform pages that opt in won't accidentally render "Terraform" as a header. - Tag the hero's secondary CTA with data-role="cta-secondary" so it can be tracked independently from the primary "cta-get-started" event. - Add a template comment near the DKI script explaining the dki-placeholder span and dki_template hooks, so future editors don't accidentally drop the span from frontmatter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Lighthouse Performance ReportCommit: ef4c35b | Metric definitions
|
|
@claude - another review pls |
|
Claude finished @alexleventer's task in 3m 19s —— View job PR Review: gads CRO improvements + opt-in template fields (re-review)
Previous review feedback — all addressed ✅The latest commit (
New findingsMinor —
<span class="rainbow-text">{{ .title }}</span>
Not a blocker, but worth a follow-up comment if you intend to keep Minor — no trailing newline at end of The diff still shows Nit —
Nit —
<li class="text-lg"><strong>{{ .title }}</strong> {{ .description | markdownify }}</li>Hugo's What's solid
The two medium items from the first review are fixed and the PR is functionally correct. The remaining items above are minor/nits that could be tidied up before or after merge — nothing is a blocker. The trailing-newline issue is the easiest one-liner fix if you want a clean diff before landing. |
- Hero primary CTA: "Convert your Terraform — free" → "Sign up free" (target: app.pulumi.com/signup instead of /tf2pulumi/) - Hero secondary CTA: "Sign up free" → "Talk to an expert" (target: /contact/?form=sales) - Drop per-page cta_label/cta_href overrides so body CTAs fall back to the global "Get Started" → app.pulumi.com/signup - "Migrate on your timeline" bullet no longer mentions tf2pulumi; reads "Import existing state with `pulumi import` ..." instead Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
The terraform landing page (https://www.pulumi.com/gads/terraform/) wasn't converting. Root cause was a template bug masking the value prop above the fold; on top of that the page had no above-the-fold CTA, generic CTA copy, a wall-of-text overview, no competitor comparison, and no before/after code.
This PR fixes the underlying template bug for all 33 gads pages and adds opt-in template fields that the terraform page now uses as the pilot. The other 32 pages render unchanged until someone fills in the new frontmatter.
The bug
layouts/gads/gads-template.htmlcalls the hero partial with onlytitle, butlayouts/partials/gads-hero.htmlreadssubtitle. So the carefully-writtensubheadingfrontmatter on every gads page was silently dropped — every gads hero rendered with just an H1 and no value prop. (Comparegads-neo.html, which passes both correctly.)Opt-in template additions
hero_ctacta_label/cta_href/cta_microcopysite.Params.cta.primary)social_proof_position: topoverview.bulletscomparison_tablekey_features_above[].before_afterdki_templatePilot — terraform page
Test plan
🤖 Generated with Claude Code