Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
407 changes: 407 additions & 0 deletions assets/css/custom.scss

Large diffs are not rendered by default.

11 changes: 9 additions & 2 deletions content/case-studies/cursor.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ client_logo: /img/case-studies/cursor/cursor-lockup-white.svg
client_logo_height: 40px
hero_title: "How Cursor Rebuilt Its Terraform Workflow with Masterpoint: <span class='text-gradient'>5x Faster Plans, 2x More Deployments</span>"
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"
hero_aside_alt: "Cursor engineers having a team whiteboard discussion about AI agent architecture."
hero_photo_inset: true # photo sits in the right 75% (25% plain-pine inseam on the left), left-biased crop

# At-a-glance stat strip (appears under hero) — headline % / x increase on top,
Expand All @@ -31,12 +31,19 @@ stat_bar:
preview_image: /img/case-studies/cursor/cursor-masterpoint.png
og_img: /img/case-studies/cursor/cursor-masterpoint.png

# Homepage highlight card (see docs/case-studies.md → Homepage slider)
highlight:
blurb: "Cursor's AWS infrastructure had outgrown the architecture it was built on: deployments crawled, change diffs were unreadable, and engineers had stopped trusting the system. Masterpoint audited, re-architected, and rebuilt the platform so the whole engineering org now ships infrastructure changes quickly and with confidence."
image: /img/case-studies/cursor/cursor-team-photo.webp
image_alt: "Cursor engineers having a team whiteboard discussion about AI agent architecture."
logo: /img/logos/cursor.svg

sitemap:
priority: 0
---

{{< csi-section accent="true" title="Executive Summary" variant="light" align="center" >}}
[Cursor is an applied research AI lab](https://cursor.com/), with products used by [over half of the Fortune 500](https://cursor.com/enterprise). Cursor's AWS cloud infrastructure had outgrown the monolithic Terraform architecture it was built on: plans & deployments took 10+ minutes, diffs were noisy and unreadable, and engineers had stopped trusting the system. Masterpoint audited the infrastructure, decomposed the [terralith](https://masterpoint.io/blog/terralith-monolithic-terraform-architecture/), built an [Infrastructure as Code](https://aws.amazon.com/what-is/iac/) platform with a new scalable architecture, migrated to Spacelift & OpenTofu, and embedded AI agent guardrails so the new architecture sticks, along with a series of platform improvements detailed in the story below. Plans now run **5x faster**, engineers ship **2.6x more** infrastructure changes every week, and with a **91% reduction in blast radius**.
[Cursor is an applied research AI lab](https://cursor.com/), with products used by [over half of the Fortune 500](https://cursor.com/enterprise). Cursor's AWS cloud infrastructure had outgrown the monolithic Terraform architecture it was built on: plans & deployments took 10+ minutes, diffs were noisy and unreadable, and engineers had stopped trusting the system. Masterpoint audited the infrastructure, decomposed the [terralith](https://masterpoint.io/blog/terralith-monolithic-terraform-architecture/), built an [Infrastructure as Code](https://aws.amazon.com/what-is/iac/) platform with a new scalable architecture, migrated to Spacelift & OpenTofu, and embedded AI agent guardrails so the new architecture sticks, along with a series of platform improvements detailed in the story below. Plans now run **5x faster** and engineers ship **2.6x more** infrastructure changes every week, all with a **91% reduction in blast radius**.

{{< csi-carousel >}}
image: /img/case-studies/cursor/cursor-terraform-5x-faster-masterpoint.png
Expand Down
7 changes: 7 additions & 0 deletions content/case-studies/marketspark.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ stat_bar:
preview_image: /img/case-studies/marketspark/marketspark-aws.png
og_img: /img/case-studies/marketspark/marketspark-aws.png

# Homepage highlight card (see docs/case-studies.md → Homepage slider)
highlight:
blurb: "Masterpoint rebuilt MarketSpark's single manually-operated AWS account into an 11-account AWS Organization: fully codified, automated, and scalable to business growth."
image: /img/case-studies/marketspark/telecommunications.jpg
image_alt: "City lights glowing across Earth at night, seen from orbit"
logo: /img/case-studies/marketspark/marketspark-logo-dark.png

sitemap:
priority: 0
---
Expand Down
9 changes: 8 additions & 1 deletion content/case-studies/power-digital.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Power Digital: 10x Reduction in Infrastructure Automation Costs, 8x Faster Client Onboarding"
weight: 3
description: "Masterpoint migrated Power Digital's 43,000-resource Terraform monolith from Terraform Cloud to Spacelift and OpenTofu: 10x lower projected automation costs, plan/apply cycles down from 25 minutes to under 3, failed runs eliminated, and 100+ new clients onboarded in the first 60 days."
description: "Masterpoint decomposed & migrated Power Digital's 43,000-resource Terraform monolith from Terraform Cloud to Spacelift and OpenTofu: 10x lower projected automation costs, plan/apply cycles down from 25 minutes to under 3, failed runs eliminated, and 100+ new clients onboarded in the first 60 days."

layout: immersive

Expand Down Expand Up @@ -29,6 +29,13 @@ stat_bar:
preview_image: /img/case-studies/power-digital/power-digital-case-study-preview.jpg
og_img: /img/case-studies/power-digital/power-digital-case-study-preview.jpg

# Homepage highlight card (see docs/case-studies.md → Homepage slider)
highlight:
blurb: "Masterpoint decomposed & migrated Power Digital's 43,000-resource Terraform monolith to Spacelift and OpenTofu, and the platform onboarded 100+ new clients in the first 60 days."
image: /img/case-studies/power-digital/power-digital-team.jpg
image_alt: "Power Digital team collaborating in their office"
logo: /img/case-studies/power-digital/power-digital-logo.png

sitemap:
priority: 0

Expand Down
23 changes: 23 additions & 0 deletions content/sections/home-case-studies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: Case Study Success Stories
weight: 5
section_categories:
- Home
id: case-study-highlights
---

<div class="row justify-content-center text-center">
<div class="col col-12 col-md-10 col-lg-8 col-xl-7">

### Real Engagements, <span class="text-gradient">Real Results</span> {.groupTitle .text-center .text-rhythm}

<p class="font20 text-pine">See case study success stories and learn how engineering teams partner with Masterpoint to turn tangled infrastructure into platforms that scale.</p>

</div>
</div>

{{<case-study-slider>}}

<div class="text-center csh-see-all">
<a href="/case-studies/" class="button btn-outline-gradient text-pine btn-big">See All Case Studies →</a>
</div>
2 changes: 1 addition & 1 deletion content/sections/home-our-word.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Don't take our word for it...
weight: 5
weight: 6
#position: align-items-center justify-content-end
size: col-12 col-md-7
#section_image: /img/doctor_and_patient.jpg
Expand Down
40 changes: 40 additions & 0 deletions docs/case-studies.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,46 @@ card grid to stay scannable as the list grows. Card image = each study's

---

## Homepage highlights slider

Featured case-study slider on the homepage (section
`content/sections/home-case-studies.md`, id `#case-study-highlights`, weight 5).
One dark pine card per study (logo pill, title, blurb, CTA, photo) on a sliding
track navigated by a client-logo tab strip.

- **Files:** `layouts/shortcodes/case-study-slider.html` (self-contained vanilla
JS, no jQuery — NOT flexslider, which `plugins.js` would hijack) + the `.csh-*`
block in `assets/css/custom.scss` (literal hex; `$cs-*` vars aren't defined
there yet). Iterates case studies **ByWeight**, so `weight:` orders the slides.
- **Content: optional `highlight:` front-matter map** (see marketspark.md /
power-digital.md), all fields optional with fallbacks:

```yaml
highlight:
title: "... <span class='text-gradient'>...</span>" # → hero_title → page title
blurb: "..." # → description
image: /img/case-studies/CLIENT/photo.jpg # → preview_image
image_alt: "..."
logo: /img/case-studies/CLIENT/CLIENT-logo-dark.png # tab strip only (white bg) → DARK variant; falls back to client_logo
```

Two logo surfaces, two variants: the **card** (dark pine) uses the WHITE
`client_logo` — same lockup as the hero / sticky nav, no pill — overridable
with `highlight.card_logo`; the **tab strip** (white bg) uses the DARK
`highlight.logo`. `highlight: false` excludes a study; any other non-map value
includes it with pure fallbacks (template guards with `reflect.IsMap` so a
scalar can't crash the build). No logo → client name renders as a text tab.
- **Autoplay** is driven by the active tab's progress-bar CSS animation (advances
on `animationend`). Gated off by four independent CSS classes: `.csh--inview`
(≥25% visible), `.csh--paused` (hover/focus), `.csh--stopped` (WCAG pause/play
toggle), and `prefers-reduced-motion`. Pause/stop rules must match the run
rule's 5-class specificity or they silently lose.
- **Single study** → tab strip, toggle, autoplay, and tabpanel ARIA all omitted.
- Section heading/intro and "See All Case Studies" button live in the section
content file, not the shortcode.

---

## Modern layout — front matter schema

```yaml
Expand Down
248 changes: 248 additions & 0 deletions layouts/shortcodes/case-study-slider.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
{{- /*
Homepage case-study highlights slider (see docs/case-studies.md → Homepage slider).
One featured card per case study (logo pill, title, blurb, CTA, photo)
sliding in a track, with a client-logo tab strip as the navigation.
Card content comes from each case study's optional `highlight:` front matter,
falling back to title / description / preview_image / client_logo.
Set `highlight: false` on a case study to keep it out of the slider; any other
non-map value (e.g. `highlight: true`) includes it with pure fallbacks.
*/ -}}
{{- $pages := slice -}}
{{- range (where site.RegularPages "Section" "case-studies").ByWeight -}}
{{- if ne .Params.highlight false -}}{{- $pages = $pages | append . -}}{{- end -}}
{{- end -}}
{{- $multi := gt (len $pages) 1 -}}
<div class="csh" id="csHighlights">
<div class="csh__viewport">
<div class="csh__track">
{{- range $i, $p := $pages -}}
{{- $h := dict -}}
{{- if reflect.IsMap $p.Params.highlight -}}{{- $h = $p.Params.highlight -}}{{- end -}}
{{- $client := $p.Params.client | default $p.Title -}}
<article
class="csh-slide{{ if eq $i 0 }} is-active{{ end }}"
id="csh-panel-{{ $i }}"
{{- if $multi }}
role="tabpanel"
aria-labelledby="csh-tab-{{ $i }}"
aria-hidden="{{ if eq $i 0 }}false{{ else }}true{{ end }}"
{{- end }}
>
<div class="csh-card">
<span class="csh-card__topline" aria-hidden="true"></span>
<div class="csh-card__body">
{{- with $h.card_logo | default $p.Params.client_logo }}
<div class="csh-card__logo"{{ with $p.Params.client_logo_height }} style="--cs-client-logo-h: {{ . }}"{{ end }}>
<img src="{{ . }}" alt="{{ $client }} logo" loading="lazy" />
</div>
{{- end }}
<h4 class="csh-card__title">
{{ $h.title | default $p.Params.hero_title | default $p.Title | safeHTML }}
</h4>
<p class="csh-card__blurb">
{{ $h.blurb | default $p.Description | safeHTML }}
</p>
<a class="button btn-gradient csh-card__cta" href="{{ $p.RelPermalink }}">
Read the Case Study &rarr;
</a>
</div>
{{- with $h.image | default $p.Params.preview_image }}
<div class="csh-card__media">
<img
src="{{ . }}"
alt="{{ $h.image_alt | default (printf `%s case study` $client) }}"
loading="lazy"
/>
</div>
{{- end }}
</div>
</article>
{{- end }}
</div>
</div>
{{- if $multi }}
<div class="csh-nav">
{{- /* Rotation control first in the carousel's tab order (WCAG 2.2.2 / APG) */}}
<button
type="button"
class="csh-nav__toggle"
aria-label="Pause automatic slide rotation"
aria-pressed="false"
>
<svg class="csh-nav__icon-pause" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
<path d="M4 2h3v12H4zM9 2h3v12H9z" />
</svg>
<svg class="csh-nav__icon-play" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
<path d="M5 2l9 6-9 6z" />
</svg>
</button>
<div class="csh-nav__tabs" role="tablist" aria-label="Case studies">
{{- range $i, $p := $pages -}}
{{- $h := dict -}}
{{- if reflect.IsMap $p.Params.highlight -}}{{- $h = $p.Params.highlight -}}{{- end -}}
{{- $client := $p.Params.client | default $p.Title -}}
{{- $logo := $h.logo | default $p.Params.client_logo -}}
<button
type="button"
class="csh-nav__tab{{ if eq $i 0 }} is-active{{ end }}"
id="csh-tab-{{ $i }}"
role="tab"
aria-controls="csh-panel-{{ $i }}"
aria-selected="{{ if eq $i 0 }}true{{ else }}false{{ end }}"
aria-label="Show the {{ $client }} case study"
>
{{- if $logo }}
<img src="{{ $logo }}" alt="" loading="lazy" />
{{- else }}
<span class="csh-nav__name">{{ $client }}</span>
{{- end }}
<span class="csh-nav__bar" aria-hidden="true"><span class="csh-nav__progress"></span></span>
</button>
{{- end }}
</div>
</div>
{{- end }}
</div>
<script>
(function () {
document.querySelectorAll(".csh").forEach(function (root) {
var track = root.querySelector(".csh__track");
var slides = Array.prototype.slice.call(root.querySelectorAll(".csh-slide"));
var tabs = Array.prototype.slice.call(root.querySelectorAll(".csh-nav__tab"));
if (slides.length < 2) return;
var current = 0;

function setFocusable(slide, on) {
slide.querySelectorAll("a, button").forEach(function (el) {
el.tabIndex = on ? 0 : -1;
});
}

function go(i) {
current = (i + slides.length) % slides.length;
track.style.transform = "translateX(" + -100 * current + "%)";
slides.forEach(function (s, n) {
var on = n === current;
s.classList.toggle("is-active", on);
s.setAttribute("aria-hidden", on ? "false" : "true");
setFocusable(s, on);
});
tabs.forEach(function (t, n) {
var on = n === current;
t.classList.toggle("is-active", on);
t.setAttribute("aria-selected", on ? "true" : "false");
t.tabIndex = on ? 0 : -1;
});
}

tabs.forEach(function (t, n) {
t.addEventListener("click", function () {
go(n);
});
t.addEventListener("keydown", function (e) {
if (e.key !== "ArrowRight" && e.key !== "ArrowLeft") return;
e.preventDefault();
go(current + (e.key === "ArrowRight" ? 1 : -1));
tabs[current].focus();
});
});

// Autoplay is driven by the active tab's progress-bar animation: when the
// bar finishes filling, advance. Pausing the animation pauses the slider.
root.querySelectorAll(".csh-nav__progress").forEach(function (p) {
p.addEventListener("animationend", function () {
go(current + 1);
});
});

// Hover and focus each hold the pause independently, so leaving with the
// mouse can't resume rotation while keyboard focus is still inside (an
// auto-advance would hide the focused element and drop focus to <body>).
// pointerType-gated so a tap's synthetic mouseenter (which never gets a
// matching mouseleave on touch screens) can't freeze the rotation.
var hovered = false;
var focused = false;
function updatePaused() {
root.classList.toggle("csh--paused", hovered || focused);
}
root.addEventListener("pointerenter", function (e) {
if (e.pointerType !== "mouse") return;
hovered = true;
updatePaused();
});
root.addEventListener("pointerleave", function (e) {
if (e.pointerType !== "mouse") return;
hovered = false;
updatePaused();
});
root.addEventListener("focusin", function () {
focused = true;
updatePaused();
});
root.addEventListener("focusout", function (e) {
focused = root.contains(e.relatedTarget);
updatePaused();
});

// Persistent rotation control (WCAG 2.2.2): stops autoplay until toggled
// back on, independent of the transient hover/focus pause.
var toggle = root.querySelector(".csh-nav__toggle");
if (toggle) {
toggle.addEventListener("click", function () {
var stopped = root.classList.toggle("csh--stopped");
toggle.setAttribute("aria-pressed", stopped ? "true" : "false");
toggle.setAttribute(
"aria-label",
stopped ? "Resume automatic slide rotation" : "Pause automatic slide rotation"
);
});
}

// Only run the autoplay while a meaningful part of the slider is on
// screen. isIntersecting alone flips true at the first visible pixel, so
// gate on the ratio: on once ≥25% visible, off only when fully off-screen.
if ("IntersectionObserver" in window) {
new IntersectionObserver(
function (entries) {
entries.forEach(function (entry) {
root.classList.toggle(
"csh--inview",
entry.isIntersecting && entry.intersectionRatio >= 0.2
);
});
},
{ threshold: [0, 0.25] }
).observe(root);
Comment thread
oycyc marked this conversation as resolved.
} else {
root.classList.add("csh--inview");
}

var x0 = null;
var y0 = null;
var viewport = root.querySelector(".csh__viewport");
viewport.addEventListener(
"touchstart",
function (e) {
x0 = e.touches[0].clientX;
y0 = e.touches[0].clientY;
},
{ passive: true }
);
viewport.addEventListener(
"touchend",
function (e) {
if (x0 === null) return;
var dx = e.changedTouches[0].clientX - x0;
var dy = e.changedTouches[0].clientY - y0;
if (Math.abs(dx) > 48 && Math.abs(dx) > Math.abs(dy)) {
go(current + (dx < 0 ? 1 : -1));
}
x0 = y0 = null;
},
{ passive: true }
);

go(0);
});
})();
</script>