feat(case-study): Cursor Success Story (Jul 13, 2026 6:30 PM ET preview)#155
feat(case-study): Cursor Success Story (Jul 13, 2026 6:30 PM ET preview)#155oycyc wants to merge 1 commit into
Conversation
✅ Deploy Preview for masterpoint ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
WalkthroughAdds immersive case-study styling, interactive chart carousels, phase cards, enhanced comparison metrics, print behavior, authoring documentation, and a complete Cursor infrastructure case study. ChangesCase study experience
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (3)
assets/css/case-studies.scss (2)
2371-2417: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
__after--plainoverriding__afterrelies on source order, not specificity.
.csi-compare__after--plainand.csi-compare__afterare separate top-level selectors of equal specificity (both single classes via&__concatenation);--plainonly wins today because it's declared after__afterin the stylesheet. A future reorder (or a new override rule inserted between them) would silently break the "neutral" plain-color rendering with no compile-time signal.♻️ Suggested fix: compound selector instead of relying on cascade order
- &__after--plain { + &__after.csi-compare__after--plain { color: $csi-ink; background: none;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/css/case-studies.scss` around lines 2371 - 2417, Update the neutral modifier styling around __after--plain to use a compound selector with __after, increasing specificity so plain neutral rendering does not depend on declaration order. Preserve the existing color, background, clipping, and text-fill overrides.
83-87: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winStylelint blank-line-before violations throughout this file.
Static analysis flags repeated
scss/double-slash-comment-empty-line-before/declaration-empty-line-beforeviolations across this diff (lines 83, 111, 132, 143, 1243, 1274, 1851, 1865, 1873, 1925, 1936, 1941, 1946, 2371, 2382, 2397, 2413, 2465, 2760, 2806, 2825, 2834, 2880, 2905). These are Trunk/stylelint-enforced formatting rules for.scssfiles.As per coding guidelines,
**/*.{md,yaml,yml,json,scss,js,html,toml}files should "Use Trunk for linting and formatting, including markdownlint, yamllint, prettier, checkov, gitleaks, oxipng, and svgo where applicable." Runningtrunk fmt/trunk checkon this file should auto-fix these.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/css/case-studies.scss` around lines 83 - 87, Run Trunk formatting and linting on the SCSS file, targeting the reported scss/double-slash-comment-empty-line-before and declaration-empty-line-before violations throughout the diff. Apply the formatter’s blank-line adjustments while preserving the existing styles and declarations, then verify the file passes trunk check.Sources: Coding guidelines, Linters/SAST tools
layouts/shortcodes/csi-phase.html (1)
10-20: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueIndent inner elements under
<article>for readability.The child
<div>s and shortcode logic have no indentation, unlike the consistently indentedcsi-phase.html. Aligning indentation would improve maintainability.♻️ Proposed indentation fix
<article class="cursor-phase" data-aos="fade-up" data-aos-duration="600"> -<div class="cursor-phase__rail" aria-hidden="true"> -<span class="cursor-phase__marker"></span> -</div> -<div class="cursor-phase__card"> -{{- with $title }}<h3 class="cursor-phase__title">{{ . | safeHTML }}</h3>{{ end -}} -<div class="cursor-phase__body csi-prose"> -{{ .Inner | $.Page.RenderString (dict "display" "block") }} -</div> -</div> + <div class="cursor-phase__rail" aria-hidden="true"> + <span class="cursor-phase__marker"></span> + </div> + <div class="cursor-phase__card"> + {{- with $title }}<h3 class="cursor-phase__title">{{ . | safeHTML }}</h3>{{ end -}} + <div class="cursor-phase__body csi-prose"> + {{ .Inner | $.Page.RenderString (dict "display" "block") }} + </div> + </div> </article>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@layouts/shortcodes/csi-phase.html` around lines 10 - 20, Reformat the csi-phase shortcode markup so the child elements and their template logic are consistently indented beneath the containing article structure, without changing the rendered HTML or shortcode behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@content/case-studies/cursor.md`:
- Line 84: Correct the three compound modifiers in the document: change “10
minute outage” to “10-minute outage,” “mid 2026” to “mid-2026,” and
“product/domain scoped” to “product/domain-scoped.”
- Line 28: Update the body prose module-count references at the affected
locations to use “141+” instead of “100+”, keeping the wording and all other
document content unchanged so the metric matches the front matter and image alt
text.
In `@docs/case-studies.md`:
- Around line 242-245: Update the shortcode reference table in case-studies.md:
add the supported neutral: flag to the csi-compare attributes, and add a
dedicated cursor-phase row documenting its purpose, placement, and attributes
based on its usage in cursor.md. Keep the existing csi-phases/csi-phase
documentation unchanged.
In `@layouts/shortcodes/cursor-phase.html`:
- Line 15: Update the phase title rendering in the title block to remove the
safeHTML filter and output title as normal escaped text. Keep the existing
conditional rendering and cursor-phase__title markup unchanged.
---
Nitpick comments:
In `@assets/css/case-studies.scss`:
- Around line 2371-2417: Update the neutral modifier styling around
__after--plain to use a compound selector with __after, increasing specificity
so plain neutral rendering does not depend on declaration order. Preserve the
existing color, background, clipping, and text-fill overrides.
- Around line 83-87: Run Trunk formatting and linting on the SCSS file,
targeting the reported scss/double-slash-comment-empty-line-before and
declaration-empty-line-before violations throughout the diff. Apply the
formatter’s blank-line adjustments while preserving the existing styles and
declarations, then verify the file passes trunk check.
In `@layouts/shortcodes/csi-phase.html`:
- Around line 10-20: Reformat the csi-phase shortcode markup so the child
elements and their template logic are consistently indented beneath the
containing article structure, without changing the rendered HTML or shortcode
behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: a94689a5-1f85-4e72-a66c-010551fad0fe
⛔ Files ignored due to path filters (5)
static/img/case-studies/cursor/cursor-lockup-white.svgis excluded by!**/*.svgstatic/img/case-studies/cursor/dependency-graph.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/deployment-frequency-stat.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/plan-time-column-compare.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/tf-workspaces.pngis excluded by!**/*.png
📒 Files selected for processing (12)
assets/css/case-studies.scsscontent/case-studies/cursor.mddocs/case-studies.mdlayouts/case-studies/immersive.htmllayouts/case-studies/single.htmllayouts/shortcodes/csi-compare.htmllayouts/shortcodes/csi-figure.htmllayouts/shortcodes/csi-phase.htmllayouts/shortcodes/csi-phases.htmllayouts/shortcodes/csi-scale.htmllayouts/shortcodes/cursor-phase.htmlstatic/img/case-studies/cursor/cursor-team-photo.webp
| - value: "91%" | ||
| label: "reduction in blast radius<br>54 → 5 average cloud resources modified per deployment" | ||
| - value: "6x" | ||
| label: "more Terraform root module workspaces<br>21 → 141+" |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Inconsistent module-count figure: "100+" contradicts the "141+" stated elsewhere.
Front matter (21 → 141+) and the image alt text ("21 in October 2025 to 141 in May 2026 — up 571%") agree, but the body prose says the count went from "21 to 100+" — a different number for the same metric in the same document.
📝 Suggested fix
-The number of separately managed modules went from **21 to 100+**. Engineers are now creating their own product/domain scoped infrastructure instead of jumbling it in the primary monolithic workspace.
+The number of separately managed modules went from **21 to 141+**. Engineers are now creating their own product/domain-scoped infrastructure instead of jumbling it in the primary monolithic workspace.Also applies to: 241-241, 243-243
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@content/case-studies/cursor.md` at line 28, Update the body prose
module-count references at the affected locations to use “141+” instead of
“100+”, keeping the wording and all other document content unchanged so the
metric matches the front matter and image alt text.
| We would have engineers click apply on prod workspaces that had 120 AWS ECS service changes. The ECS services would change all the time because of drift, so the team became desensitized to large Terraform plan changes. | ||
| {{< /cs-pullquote >}} | ||
|
|
||
| This confusion caused downtime, such as a network firewall change that caused a 10 minute outage. |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Minor hyphenation: compound modifiers before a noun.
LanguageTool flags three missing hyphens: "10 minute outage" → "10-minute outage" (line 84), "mid 2026" → "mid-2026" (line 213), "product/domain scoped" → "product/domain-scoped" (line 241).
Also applies to: 213-213, 241-241
🧰 Tools
🪛 LanguageTool
[grammar] ~84-~84: Use a hyphen to join words.
Context: ...network firewall change that caused a 10 minute outage. The existing platform, T...
(QB_NEW_EN_HYPHEN)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@content/case-studies/cursor.md` at line 84, Correct the three compound
modifiers in the document: change “10 minute outage” to “10-minute outage,” “mid
2026” to “mid-2026,” and “product/domain scoped” to “product/domain-scoped.”
Source: Linters/SAST tools
| | `csi-compare` | "Then / now" migration ledger: muted old world → bold gradient new world per metric. Owns a page's hard numbers — pair with a slimmed `csi-impact` so figures aren't stated twice. Mobile stacks each row with per-cell tags. INSIDE a `csi-section` (also nests inside a `csi-phase`). | `before_label`, `after_label`; inner blocks split by `---`, each `label:` / `before:` / `after:` / optional `delta:` (renders as a solid-gradient pill **inline** after the new-world value — the "Change" figure) | | ||
| | `csi-phases` / `csi-phase` | Vertical engagement-journey rail (one continuous gradient line + a gradient dot per phase). Each `csi-phase` is a dated chapter whose head + body are wrapped in a **white card** off the rail (`.csi-phase__card`) so each area — November 2025, December 2025, … — reads as its own card. Full block markdown + nested `csi-compare` ledgers work inside. INSIDE a `csi-section`. | `csi-phase`: `date` (chip above the title), `title` (HTML ok). Put one `csi-phase` per phase inside a single `csi-phases`. | | ||
| | `csi-figure` | Full-width wrapper for a CSS-drawn figure partial from `figures/<name>.html` (subfolders work — `name="cursor/terralith"`). No image asset; recolours per face and stays crisp in print. INSIDE a `csi-section`. | `name` (partial path under `figures/`), `max` (max width, e.g. `760px`) | | ||
| | `csi-scale` | Type-specimen magnitude wall: each row leads with a huge gradient magnitude phrase ("hundreds", "thousands") + the rest at prose size. For enumerating what a platform manages when the magnitudes ARE the story. INSIDE a `csi-section`. | inner blocks split by `---`, each `big:` / `rest:` / optional `pre:` | |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Doc table is missing neutral: and the whole cursor-phase shortcode.
Two gaps in the shortcode reference table:
- The
csi-comparerow documentsdelta:but not the newneutral:flag (which the shortcode's own inline comment andcase-studies.scss's__after--plainrule both implement). - There's no row at all for
cursor-phase, the shortcodecontent/case-studies/cursor.mdactually uses for every engagement-phase card (it's distinct fromcsi-phases/csi-phase, which is documented but unused by Cursor).
Based on learnings, per docs/case-studies.md's own charter: "Keep it current — every time a new decision is made about layout, shortcodes, visuals, or workflow, update this file before ending the session."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/case-studies.md` around lines 242 - 245, Update the shortcode reference
table in case-studies.md: add the supported neutral: flag to the csi-compare
attributes, and add a dedicated cursor-phase row documenting its purpose,
placement, and attributes based on its usage in cursor.md. Keep the existing
csi-phases/csi-phase documentation unchanged.
Source: Coding guidelines
| <span class="cursor-phase__marker"></span> | ||
| </div> | ||
| <div class="cursor-phase__card"> | ||
| {{- with $title }}<h3 class="cursor-phase__title">{{ . | safeHTML }}</h3>{{ end -}} |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '== file map ==\n'
git ls-files 'layouts/shortcodes/cursor-phase.html' 'content/case-studies/cursor.md' 'content/**' | sed -n '1,120p'
printf '\n== shortcode file ==\n'
cat -n layouts/shortcodes/cursor-phase.html
printf '\n== call sites / references ==\n'
rg -n --context 2 'cursor-phase|title\s*=' content layouts -g '!**/node_modules/**' || true
printf '\n== surrounding shortcode docs or examples ==\n'
rg -n --context 2 'cursor-phase' . -g '!**/node_modules/**' || trueRepository: masterpointio/masterpoint.io
Length of output: 41479
Avoid safeHTML for phase titles. title is plain text here, so render it normally unless this shortcode is meant to accept trusted HTML.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@layouts/shortcodes/cursor-phase.html` at line 15, Update the phase title
rendering in the title block to remove the safeHTML filter and output title as
normal escaped text. Keep the existing conditional rendering and
cursor-phase__title markup unchanged.
e83fe86 to
7814b04
Compare
39edce3 to
b8f5de6
Compare
b8f5de6 to
95b6e98
Compare
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@assets/css/case-studies.scss`:
- Line 1189: Run Trunk formatting on assets/css/case-studies.scss, applying the
required blank lines before comments and declarations at the reported locations
without changing styling behavior.
- Around line 1896-1905: Include the csi-section--gradient selector alongside
the existing dark-face selectors in each affected override, including the
heading/link rule near csi-section--pine, the phase metadata rule, and the scale
copy rule. Ensure all three gradient variants receive the same light text and
background styling as the corresponding pine and pine-deep sections.
- Line 3509: Update the print pagination rules for the .csi-phase__head element
so its heading remains attached to the corresponding phase body, not merely
unsplit itself. Apply the existing avoid-break behavior to the containing phase
section or heading-plus-body wrapper, preserving the current styling for
non-print layouts.
- Around line 2330-2336: Update the print styling for .csi-compare__after so the
__after--plain variant retains its neutral $csi-ink color, background, and text
fill instead of being overridden by the mint !important rule. Add a sufficiently
specific print override near the existing print rule while preserving mint
styling for non-plain comparisons.
In `@content/case-studies/cursor.md`:
- Around line 8-16: Update the hero image rendering in the case-study templates
to use the front matter hero_aside_alt value instead of hardcoding alt=""; apply
this consistently in both immersive.html and single.html, preserving an empty
alt only when no descriptive value is provided. Alternatively, remove
hero_aside_alt from the Cursor case study if the image is intentionally
decorative.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 1efc04b4-f815-4454-99ff-d7b9bbd43de8
⛔ Files ignored due to path filters (5)
static/img/case-studies/cursor/cursor-lockup-white.svgis excluded by!**/*.svgstatic/img/case-studies/cursor/dependency-graph.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/deployment-frequency-stat.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/plan-time-column-compare.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/tf-workspaces.pngis excluded by!**/*.png
📒 Files selected for processing (10)
assets/css/case-studies.scsscontent/case-studies/cursor.mddocs/case-studies.mdlayouts/shortcodes/csi-compare.htmllayouts/shortcodes/csi-figure.htmllayouts/shortcodes/csi-phase.htmllayouts/shortcodes/csi-phases.htmllayouts/shortcodes/csi-scale.htmllayouts/shortcodes/cursor-phase.htmlstatic/img/case-studies/cursor/cursor-team-photo.webp
🚧 Files skipped from review as they are similar to previous changes (1)
- layouts/shortcodes/csi-compare.html
| color: $cs-mint; | ||
| padding-top: 0.35rem; | ||
| } | ||
| // default inline attribution (name beside role): drop the stacked-layout |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Run Trunk formatting before merge.
Stylelint reports 20 missing blank-line violations before comments or declarations. trunk fmt assets/css/case-studies.scss should resolve them.
As per coding guidelines, SCSS files must use Trunk for linting and formatting.
Also applies to: 1220-1220, 1797-1797, 1811-1811, 1819-1819, 1871-1871, 1882-1882, 1887-1887, 1892-1892, 2317-2317, 2328-2328, 2343-2343, 2359-2359, 2411-2411, 2706-2706, 2752-2752, 2771-2771, 2780-2780, 2826-2826, 2851-2851
🧰 Tools
🪛 Stylelint (17.14.0)
[error] 1189-1189: Expected empty line before comment (scss/double-slash-comment-empty-line-before)
(scss/double-slash-comment-empty-line-before)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@assets/css/case-studies.scss` at line 1189, Run Trunk formatting on
assets/css/case-studies.scss, applying the required blank lines before comments
and declarations at the reported locations without changing styling behavior.
Sources: Coding guidelines, Linters/SAST tools
| # Hero | ||
| eyebrow: "CASE STUDY SUCCESS STORY" | ||
| client: "Cursor" | ||
| client_logo: /img/case-studies/cursor/cursor-lockup-white.svg | ||
| client_logo_height: 30px | ||
| hero_title: "<span class='text-gradient'>80% Faster Plans, 2x More Deployments</span>: How Cursor Rebuilt Its Terraform Workflow with Masterpoint" | ||
| hero_aside_image: /img/case-studies/cursor/cursor-team-photo.webp | ||
| hero_aside_alt: "A Cursor engineer leads a team discussion at a chalkboard sketched with background-agent architecture" | ||
|
|
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check whether hero_aside_alt is referenced anywhere in the layouts.
rg -n 'hero_aside_alt' --type=htmlRepository: masterpointio/masterpoint.io
Length of output: 166
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate all references to the hero fields and the immersive layout.
rg -n 'hero_aside_(image|alt)|immersive\.html|bgImg|alt=""|hero_aside' .Repository: masterpointio/masterpoint.io
Length of output: 2803
hero_aside_alt is ignored by the hero template
layouts/case-studies/immersive.html and layouts/case-studies/single.html both render the hero image with alt="", so this new hero_aside_alt value never reaches the output. If the image is meant to be decorative, remove the field; otherwise wire it into the template for accessibility.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@content/case-studies/cursor.md` around lines 8 - 16, Update the hero image
rendering in the case-study templates to use the front matter hero_aside_alt
value instead of hardcoding alt=""; apply this consistently in both
immersive.html and single.html, preserving an empty alt only when no descriptive
value is provided. Alternatively, remove hero_aside_alt from the Cursor case
study if the image is intentionally decorative.
5a6b5f2 to
d3bb046
Compare
d3bb046 to
d738451
Compare
d738451 to
eebf9d0
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
layouts/shortcodes/csi-carousel.html (1)
70-71: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winConsider
Page.Storeinstead ofPage.Scratch.
Page.Scratchhas been soft-deprecated since Hugo v0.138.0 in favor ofPage.Store(currently just aliased, but flagged for eventual removal).♻️ Proposed rename
-{{- if not (.Page.Scratch.Get "csiCarouselJS") -}} - {{- .Page.Scratch.Set "csiCarouselJS" true -}} +{{- if not (.Page.Store.Get "csiCarouselJS") -}} + {{- .Page.Store.Set "csiCarouselJS" true -}}Please confirm this matches the Hugo version pinned for this project before applying (soft deprecation, no forced timeline).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@layouts/shortcodes/csi-carousel.html` around lines 70 - 71, Confirm the project’s pinned Hugo version supports Page.Store, then update the csiCarouselJS state check and assignment in the carousel template from Page.Scratch to Page.Store, preserving the existing key and boolean behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@content/case-studies/cursor.md`:
- Line 2: Update the case study headline and its corresponding hero_title from
“2x More Deployments” to “2.6x More Deployments” so they match the stat_bar,
results table, and narrative metrics.
In `@layouts/shortcodes/csi-carousel.html`:
- Line 84: Refresh the carousel’s `base` value whenever the resize handler runs,
before invoking `sync()`, so it reflects the updated `slides[0].offsetLeft`
after breakpoint-driven padding changes. Apply the same update to the related
`base` references used by `current()` and `goTo()` while preserving their
existing behavior.
---
Nitpick comments:
In `@layouts/shortcodes/csi-carousel.html`:
- Around line 70-71: Confirm the project’s pinned Hugo version supports
Page.Store, then update the csiCarouselJS state check and assignment in the
carousel template from Page.Scratch to Page.Store, preserving the existing key
and boolean behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 438f4309-f8ba-4147-afaf-aa5cdb8dc1fa
⛔ Files ignored due to path filters (6)
static/img/case-studies/cursor/cursor-lockup-white.svgis excluded by!**/*.svgstatic/img/case-studies/cursor/cursor-masterpoint.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/dependency-graph.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/deployment-frequency-stat.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/plan-time-column-compare.pngis excluded by!**/*.pngstatic/img/case-studies/cursor/tf-workspaces.pngis excluded by!**/*.png
📒 Files selected for processing (7)
assets/css/case-studies.scsscontent/case-studies/cursor.mddocs/case-studies.mdlayouts/shortcodes/csi-carousel.htmllayouts/shortcodes/csi-compare.htmllayouts/shortcodes/csi-phase.htmlstatic/img/case-studies/cursor/cursor-team-photo.webp
🚧 Files skipped from review as they are similar to previous changes (1)
- layouts/shortcodes/csi-compare.html
| @@ -0,0 +1,273 @@ | |||
| --- | |||
| title: "80% Faster Plans, 2x More Deployments: How Cursor Rebuilt Its Terraform Workflow with Masterpoint" | |||
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Headline "2x More Deployments" is inconsistent with the "2.6x" figure used everywhere else in the doc.
The stat_bar (line 22: "2.6x"), the results comparison table (line 200: "+157%"), and the narrative ("2.6x more PRs shipped") all agree the PR-volume increase is ~2.6x (194→500+ ≈ 157% increase). The title and hero_title both round this down to "2x", understating the actual metric and creating an inconsistency between the headline claim and the supporting data used throughout the rest of the page.
✏️ Suggested fix
-title: "80% Faster Plans, 2x More Deployments: How Cursor Rebuilt Its Terraform Workflow with Masterpoint"
+title: "80% Faster Plans, 2.6x More Deployments: How Cursor Rebuilt Its Terraform Workflow with Masterpoint"-hero_title: "<span class='text-gradient'>80% Faster Plans, 2x More Deployments</span>: How Cursor Rebuilt Its Terraform Workflow with Masterpoint"
+hero_title: "<span class='text-gradient'>80% Faster Plans, 2.6x More Deployments</span>: How Cursor Rebuilt Its Terraform Workflow with Masterpoint"Also applies to: 13-13
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@content/case-studies/cursor.md` at line 2, Update the case study headline and
its corresponding hero_title from “2x More Deployments” to “2.6x More
Deployments” so they match the stat_bar, results table, and narrative metrics.
| var next = root.querySelector(".csi-carousel__arrow--next"); | ||
| var dots = Array.prototype.slice.call(root.querySelectorAll(".csi-carousel__dot")); | ||
| if (!slides.length) return; | ||
| var base = slides[0].offsetLeft; |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Stale base after a breakpoint-crossing resize.
base is captured once from slides[0].offsetLeft at setup, but the scroller's side padding changes (13% → 7%) at the 700px breakpoint, shifting every slide's offsetLeft. The resize handler calls sync() but never refreshes base, so current()/goTo() can misjudge the active slide or scroll to the wrong position after a viewport resize crosses that breakpoint.
🐛 Proposed fix: recompute `base` on resize
- window.addEventListener("resize", sync);
+ window.addEventListener("resize", function () {
+ base = slides[0].offsetLeft;
+ sync();
+ });Also applies to: 93-96, 122-122
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@layouts/shortcodes/csi-carousel.html` at line 84, Refresh the carousel’s
`base` value whenever the resize handler runs, before invoking `sync()`, so it
reflects the updated `slides[0].offsetLeft` after breakpoint-driven padding
changes. Apply the same update to the related `base` references used by
`current()` and `goTo()` while preserving their existing behavior.
Publish the Cursor + Masterpoint case study on the immersive layout (preview snapshot). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
eebf9d0 to
9c057d5
Compare

Preview of the Cursor × Masterpoint case study (immersive layout).
Live page:
/case-studies/cursor/What's here
cursor-phase) with combined before/after ledgers.Notable implementation
cursor-phase,csi-figure,csi-phases,csi-phase,csi-scale.csi-comparegains an inline gradient delta pill and aneutralrow option.docs/case-studies.mdupdated for the new shortcodes and conventions.🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Improvements
Documentation