From a5ac80c94e34479b51f1c798aff33d79aeabe805 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 13 Apr 2022 11:55:02 -0500 Subject: [PATCH 01/43] init incident-response use case page --- .../src/pages/use-cases/incident-response.tsx | 335 ++++++++++++++++++ 1 file changed, 335 insertions(+) create mode 100644 website/src/pages/use-cases/incident-response.tsx diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx new file mode 100644 index 00000000000..e6fd6ecd34e --- /dev/null +++ b/website/src/pages/use-cases/incident-response.tsx @@ -0,0 +1,335 @@ +import { Link, PageProps } from 'gatsby' +import ClockTimeThreeOutlineIcon from 'mdi-react/ClockTimeThreeOutlineIcon' +import WebIcon from 'mdi-react/WebIcon' +import CrosshairsGpsIcon from 'mdi-react/CrosshairsGpsIcon' +import React, { FunctionComponent, ReactNode } from 'react' + +import Layout from '../../components/Layout' +import { BackButtonBold } from '../../components/BackButton' +import { BlogListItem } from '../../components/BlogListItem' +import { QuoteCarousel } from '../../components/QuoteCarousel' +import CustomCarousel from '../../components/CustomCarousel' +import { ContentSection } from '../../components/content/ContentSection' +import { CustomerLogosSectionAnimated } from '../../components/product/CustomerLogosSectionAnimated' + +import styles from './useCases.module.scss' + +const CarouselItem: FunctionComponent<{ header: string; text: ReactNode }> = ({ header, text }) => ( + <> +

{header}

+ {text} + +) + +const items = [ + { + buttonLabel: 'Respond to incidents faster', + text: ( + + No heroics required: Quickly understand all the context and dependencies around + your codebase with Code Search so you can find the + root cause of an incident with confidence and speed. Document work in progress + with Notebooks so teammates can get up to speed quickly. +

+ } + /> + ), + headerClass: 'active', + itemClass: 'd-block', + }, + { + buttonLabel: 'Limit the impact of incidents', + text: ( + + Automate the deployment of fixes everywhere and at scale. With {' '} + Batch Changes, you can automate code changes and monitor + the merge status of each resulting PR. Refactor code to replace insecure functions, update + vulnerable packages, or modify container configurations across hundreds of repositories. +

+ } + /> + ), + itemClass: 'd-none', + }, + { + buttonLabel: 'Track remediation progress', + text: ( + + Visualize fixes in progress and track their deployment. With{' '} + Code Insights, get visibility + into remediation efforts and share progress with team leaders and customers. +

+ } + /> + ), + itemClass: 'd-none', + }, + { + buttonLabel: 'Monitor for the introduction of unsafe code', + text: ( + + Close the loop on your incident response efforts. After finding the root cause, + use code monitoring to track whether similarly unsafe + code is ever merged. Get alerts and stop incidents before they occur. +

+ } + /> + ), + itemClass: 'd-none' + }, +] + +const quoteCarouselItems = [ + { + header: `Quantcast is confident it won't miss any affected code`, + quote: `Sourcegraph's search gave us confidence because we knew we wouldn't overlook anything: Sourcegraph returns all search results, it doesn't drop or elide them.`, + by: 'Simon Law, Staff Software Engineer, Quantcast', + logoImage: '/external-logos/quantcast-logo.svg', + linkText: 'Read the case study', + link: '/case-studies/quantcast-large-scale-refactoring', + logoAlt: 'Quantcast', + }, + { + header: 'Nutanix proves the Log4j vulnerability no longer affects its codebase', + quote: `"Isn't it nice when you can just run a report and say, 'Here it is' or 'Here it isn't?' Much better than having to say, 'Well, boss, I think we got it all.'"`, + by: 'Jon Kohler, Technical Director of Solution Engineering, Nutanix', + logoImage: '/external-logos/nutanix-logo.svg', + linkText: 'Read the case study', + link: '/case-studies/nutanix-fixed-log4j-with-sourcegraph', + logoAlt: 'Nutanix', + }, +] + +const blogListItems = [ + { + title: 'Log4j Log4Shell 0-day: find, fix, and track affected code', + description: + 'In the biggest security vulnerability incident since Heartbleed, Sourcegraph co-founder and CEO Quinn Slack shared how you can find affected code, automate fixes, and track progress.', + type: 'Blog post', + image: 'https://sourcegraphstatic.com/blog/log4j/log4j-blog-thumbnail.png', + href: '/blog/log4j-log4shell-0-day', + }, + { + title: `The real weakest link in software supply chain security (it's not open source)`, + description: + 'Using open source code can jump-start development but it can also expose you to security vulnerabilities. In this post, learn how to design an effective vulnerability management process that can make dependencies visibile and mitigation less time-consuming.', + type: 'Blog post', + image: 'https://storage.googleapis.com/sourcegraph-assets/blog/third-party-open-source-vulnerabilities.png', + href: '/blog/real-weakest-link-in-software-supply-chain-security', + }, + { + title: 'How to remove secrets from your codebase', + description: + `Back in early 2021, Sourcegraph stored infrastructure and service passwords in private repositories. Security engineer André Eleuterio moved every secret to a secure vault and used code search to ensure the move was successful and complete.`, + type: 'Blog post', + image: 'https://sourcegraphstatic.com/blog/securing-sourcegraph-eliminating-secrets.png', + href: '/blog/eliminate-secrets-from-codebase-with-universal-code-search', + }, +] + +const UseCasePage: FunctionComponent = props => ( + +
+
+
+
+ +

Resolve incidents quickly and confidently

+
+ Identify the root cause of an incident, understand its potential impact + on other services, and fix the issue everywhere in your codebase so + it won't reoccur. +
+
+ + Request a demo + + + Try Sourcegraph now + +
+
+
+
+ + } + > + +
+
+

+ Identify the root cause of an incident and fix it everywhere, fast +

+
+
+
+ +

Assess incidents quickly

+

+ Pinpoint the code responsible for the incident and find the root + cause in your codebase. Understand the code's functionality to verify + the issue. +

+
+
+ +

Plan your remediation

+

+ Reduce time to resolution by supplying response teams with actionable + details, like links to all affected code. +

+
+
+ +

Execute your plan globally

+

+ Fix the root cause and confirm the same issue doesn't reoccur in other + areas by locating the code pattern and automating fixes across your + entire codebase. +

+
+
+
+
+ +
+ +
+
+

+ Identifying & resolving security vulnerabilities is painful +

+

+ Existing tooling doesn't enable teams to be agile and effective when responding to security + vulnerabilities. What does that mean for you? +

+
    +
  • Finding vulnerabilities scattered across codebases takes extra time and resources.
  • +
  • + Following dependencies across your codebase is inefficient with IDEs that aren't + connected to all code or up to date. +
  • +
  • + Whether you're making changes to 50 or 5,000 repositories, tracking and managing PRs to + completion is a manual and spreadsheet-heavy process. +
  • +
  • + The vulnerability management and remediation process remains cumbersome, unclear, and + stressful for all involved. +
  • +
+
+
+
+

Log4j was the tip of the iceberg

+

+ Log4j is a prime example of how challenging it is to create a cohesive response across + multiple teams in an org. +

+

+ Sourcegraph enables companies like Nutanix to completely remediate Log4j vulnerabilities + across multiple build and artifact management systems, as well as a large monorepo with + many component branches and hundreds of git repositories, in under four days, and with + 100% certainty. +

+
Learn how to use Sourcegraph to identify and resolve every instance of Log4j.
+ + Read the blog post. + +
+
+
+
+
+ + +
+
+

How Sourcegraph helps

+
+
+ +
+
+
+ +
+ + + +
+ +
+ +
+
+

Get started with Sourcegraph

+

Respond to incidents with confidence and speed, and remediate issues at their root to ensure they don't reoccur.

+
+
+ + Request a demo + + +

Explore other use cases

+ +
+
+
+ +
+ + +
+
+

Related resources

+
+ {blogListItems.map(item => ( + + ))} +
+
+ + +
+

Respond to incidents faster and more effectively.

+ + Ready to get started? + +
+
+ +) + +export default UseCasePage From 88f4204efa52b80b5c005949db0c291ce39e8f77 Mon Sep 17 00:00:00 2001 From: zlonko Date: Wed, 13 Apr 2022 16:59:19 +0000 Subject: [PATCH 02/43] squash! Prettier --- .../src/pages/use-cases/incident-response.tsx | 64 ++++++++++--------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index e6fd6ecd34e..888f821d376 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -29,10 +29,11 @@ const items = [ header="Respond to incidents faster" text={

- No heroics required: Quickly understand all the context and dependencies around - your codebase with Code Search so you can find the - root cause of an incident with confidence and speed. Document work in progress - with Notebooks so teammates can get up to speed quickly. + No heroics required: Quickly understand all the context and dependencies around your codebase + with Code Search so you can find the root cause of an incident + with confidence and speed. Document work in progress with{' '} + Notebooks so teammates can get up to speed + quickly.

} /> @@ -47,9 +48,9 @@ const items = [ header="Limit the impact of incidents" text={

- Automate the deployment of fixes everywhere and at scale. With {' '} - Batch Changes, you can automate code changes and monitor - the merge status of each resulting PR. Refactor code to replace insecure functions, update + Automate the deployment of fixes everywhere and at scale. With{' '} + Batch Changes, you can automate code changes and monitor the + merge status of each resulting PR. Refactor code to replace insecure functions, update vulnerable packages, or modify container configurations across hundreds of repositories.

} @@ -65,8 +66,8 @@ const items = [ text={

Visualize fixes in progress and track their deployment. With{' '} - Code Insights, get visibility - into remediation efforts and share progress with team leaders and customers. + Code Insights, get visibility into remediation efforts and + share progress with team leaders and customers.

} /> @@ -80,15 +81,15 @@ const items = [ header="Monitor for the introduction of unsafe code" text={

- Close the loop on your incident response efforts. After finding the root cause, - use code monitoring to track whether similarly unsafe - code is ever merged. Get alerts and stop incidents before they occur. + Close the loop on your incident response efforts. After finding the root cause, use{' '} + code monitoring to track whether + similarly unsafe code is ever merged. Get alerts and stop incidents before they occur.

} /> ), - itemClass: 'd-none' - }, + itemClass: 'd-none', + }, ] const quoteCarouselItems = [ @@ -101,7 +102,7 @@ const quoteCarouselItems = [ link: '/case-studies/quantcast-large-scale-refactoring', logoAlt: 'Quantcast', }, - { + { header: 'Nutanix proves the Log4j vulnerability no longer affects its codebase', quote: `"Isn't it nice when you can just run a report and say, 'Here it is' or 'Here it isn't?' Much better than having to say, 'Well, boss, I think we got it all.'"`, by: 'Jon Kohler, Technical Director of Solution Engineering, Nutanix', @@ -131,8 +132,7 @@ const blogListItems = [ }, { title: 'How to remove secrets from your codebase', - description: - `Back in early 2021, Sourcegraph stored infrastructure and service passwords in private repositories. Security engineer André Eleuterio moved every secret to a secure vault and used code search to ensure the move was successful and complete.`, + description: `Back in early 2021, Sourcegraph stored infrastructure and service passwords in private repositories. Security engineer André Eleuterio moved every secret to a secure vault and used code search to ensure the move was successful and complete.`, type: 'Blog post', image: 'https://sourcegraphstatic.com/blog/securing-sourcegraph-eliminating-secrets.png', href: '/blog/eliminate-secrets-from-codebase-with-universal-code-search', @@ -157,11 +157,12 @@ const UseCasePage: FunctionComponent = props => (
-

Resolve incidents quickly and confidently

+

+ Resolve incidents quickly and confidently +

- Identify the root cause of an incident, understand its potential impact - on other services, and fix the issue everywhere in your codebase so - it won't reoccur. + Identify the root cause of an incident, understand its potential impact on other + services, and fix the issue everywhere in your codebase so it won't reoccur.
= props => (

Assess incidents quickly

- Pinpoint the code responsible for the incident and find the root - cause in your codebase. Understand the code's functionality to verify - the issue. + Pinpoint the code responsible for the incident and find the root cause in your codebase. + Understand the code's functionality to verify the issue.

Plan your remediation

- Reduce time to resolution by supplying response teams with actionable - details, like links to all affected code. + Reduce time to resolution by supplying response teams with actionable details, like links to + all affected code.

Execute your plan globally

- Fix the root cause and confirm the same issue doesn't reoccur in other - areas by locating the code pattern and automating fixes across your - entire codebase. + Fix the root cause and confirm the same issue doesn't reoccur in other areas by locating the + code pattern and automating fixes across your entire codebase.

@@ -295,7 +294,10 @@ const UseCasePage: FunctionComponent = props => (

Get started with Sourcegraph

-

Respond to incidents with confidence and speed, and remediate issues at their root to ensure they don't reoccur.

+

+ Respond to incidents with confidence and speed, and remediate issues at their root to ensure + they don't reoccur. +

@@ -322,7 +324,7 @@ const UseCasePage: FunctionComponent = props => ( -
+

Respond to incidents faster and more effectively.

Ready to get started? From 370d5ebf72916402a63d28221891050d872746a3 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 13 Apr 2022 15:47:54 -0500 Subject: [PATCH 03/43] align styling with Figma wireframe, update meta --- .../src/pages/use-cases/incident-response.tsx | 92 +++++++++---------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index e6fd6ecd34e..e5d3331327b 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -1,8 +1,9 @@ +import React, { FunctionComponent, ReactNode } from 'react' + import { Link, PageProps } from 'gatsby' +import CrosshairsGpsIcon from 'mdi-react/CrosshairsGpsIcon' import ClockTimeThreeOutlineIcon from 'mdi-react/ClockTimeThreeOutlineIcon' import WebIcon from 'mdi-react/WebIcon' -import CrosshairsGpsIcon from 'mdi-react/CrosshairsGpsIcon' -import React, { FunctionComponent, ReactNode } from 'react' import Layout from '../../components/Layout' import { BackButtonBold } from '../../components/BackButton' @@ -47,7 +48,7 @@ const items = [ header="Limit the impact of incidents" text={

- Automate the deployment of fixes everywhere and at scale. With {' '} + Automate the deployment of fixes everywhere and at scale. With{' '} Batch Changes, you can automate code changes and monitor the merge status of each resulting PR. Refactor code to replace insecure functions, update vulnerable packages, or modify container configurations across hundreds of repositories. @@ -103,7 +104,7 @@ const quoteCarouselItems = [ }, { header: 'Nutanix proves the Log4j vulnerability no longer affects its codebase', - quote: `"Isn't it nice when you can just run a report and say, 'Here it is' or 'Here it isn't?' Much better than having to say, 'Well, boss, I think we got it all.'"`, + quote: `Isn't it nice when you can just run a report and say, 'Here it is' or 'Here it isn't?' Much better than having to say, 'Well, boss, I think we got it all.'`, by: 'Jon Kohler, Technical Director of Solution Engineering, Nutanix', logoImage: '/external-logos/nutanix-logo.svg', linkText: 'Read the case study', @@ -124,7 +125,7 @@ const blogListItems = [ { title: `The real weakest link in software supply chain security (it's not open source)`, description: - 'Using open source code can jump-start development but it can also expose you to security vulnerabilities. In this post, learn how to design an effective vulnerability management process that can make dependencies visibile and mitigation less time-consuming.', + 'Using open source code can jump-start development but it can also expose you to security vulnerabilities. In this post, learn how to design an effective vulnerability management process that can make dependencies visible and mitigation less time-consuming.', type: 'Blog post', image: 'https://storage.googleapis.com/sourcegraph-assets/blog/third-party-open-source-vulnerabilities.png', href: '/blog/real-weakest-link-in-software-supply-chain-security', @@ -132,7 +133,7 @@ const blogListItems = [ { title: 'How to remove secrets from your codebase', description: - `Back in early 2021, Sourcegraph stored infrastructure and service passwords in private repositories. Security engineer André Eleuterio moved every secret to a secure vault and used code search to ensure the move was successful and complete.`, + 'Back in early 2021, Sourcegraph stored infrastructure and service passwords in private repositories. Security engineer André Eleuterio moved every secret to a secure vault and used code search to ensure the move was successful and complete.', type: 'Blog post', image: 'https://sourcegraphstatic.com/blog/securing-sourcegraph-eliminating-secrets.png', href: '/blog/eliminate-secrets-from-codebase-with-universal-code-search', @@ -143,9 +144,9 @@ const UseCasePage: FunctionComponent = props => ( = props => (

-

+

Identify the root cause of an incident and fix it everywhere, fast

-
- +
+

Assess incidents quickly

Pinpoint the code responsible for the incident and find the root @@ -202,16 +203,16 @@ const UseCasePage: FunctionComponent = props => ( the issue.

-
- +
+

Plan your remediation

Reduce time to resolution by supplying response teams with actionable details, like links to all affected code.

-
- +
+

Execute your plan globally

Fix the root cause and confirm the same issue doesn't reoccur in other @@ -223,50 +224,49 @@ const UseCasePage: FunctionComponent = props => (

-
+
-

- Identifying & resolving security vulnerabilities is painful +

+ Incident response is stressful and overwhelming

- Existing tooling doesn't enable teams to be agile and effective when responding to security - vulnerabilities. What does that mean for you? + Current tools don't enable teams to quickly get to the root cause of an incident + and ensure it doesn't reoccur. What does that mean for you?

    -
  • Finding vulnerabilities scattered across codebases takes extra time and resources.
  • -
  • - Following dependencies across your codebase is inefficient with IDEs that aren't - connected to all code or up to date. +
  • Outages and degraded performance persist while development teams look for causes, + leading to lost revenue and frustrated customers. +
  • +
  • + Incidents can reoccur if developers can't find the root cause, leaving your company + with a reputation for unreliability and missed SLAs.
  • -
  • - Whether you're making changes to 50 or 5,000 repositories, tracking and managing PRs to - completion is a manual and spreadsheet-heavy process. +
  • + Incident response often relies on knowledge silos, which are neither scalable + nor sustainable.
  • -
  • - The vulnerability management and remediation process remains cumbersome, unclear, and - stressful for all involved. +
  • + Company leaders struggle for visibility into incident response in progress and to + communicate timelines to stakeholders.
-

Log4j was the tip of the iceberg

-

- Log4j is a prime example of how challenging it is to create a cohesive response across - multiple teams in an org. -

+

Cloudflare quickly addresses root-cause incidents

- Sourcegraph enables companies like Nutanix to completely remediate Log4j vulnerabilities - across multiple build and artifact management systems, as well as a large monorepo with - many component branches and hundreds of git repositories, in under four days, and with - 100% certainty. + Cloudflare engineers use Sourcegraph's code intelligence platform to refactor and + debug faster. With Sourcegraph, they can quickly identify out-of-date code libraries + by only searching certain repositories while excluding specific file types. And it's + easier to search for error logs. As a result, the team can feel confident they've + addressed each issue.

-
Learn how to use Sourcegraph to identify and resolve every instance of Log4j.
- - Read the blog post. + + Read the Cloudflare case study +
@@ -284,17 +284,17 @@ const UseCasePage: FunctionComponent = props => (
-
+
-
+
-

Get started with Sourcegraph

+

Get started with Sourcegraph

Respond to incidents with confidence and speed, and remediate issues at their root to ensure they don't reoccur.

@@ -323,7 +323,7 @@ const UseCasePage: FunctionComponent = props => (
-

Respond to incidents faster and more effectively.

+

Respond to incidents faster and more effectively.

Ready to get started? From fdfefb45435f328b1db7ac5111da925eacc28ad2 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 13 Apr 2022 15:54:05 -0500 Subject: [PATCH 04/43] cleanup --- website/src/pages/use-cases/incident-response.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index e5d3331327b..5c2b06370f4 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -1,9 +1,8 @@ -import React, { FunctionComponent, ReactNode } from 'react' - import { Link, PageProps } from 'gatsby' import CrosshairsGpsIcon from 'mdi-react/CrosshairsGpsIcon' import ClockTimeThreeOutlineIcon from 'mdi-react/ClockTimeThreeOutlineIcon' import WebIcon from 'mdi-react/WebIcon' +import React, { FunctionComponent, ReactNode } from 'react' import Layout from '../../components/Layout' import { BackButtonBold } from '../../components/BackButton' @@ -49,8 +48,8 @@ const items = [ text={

Automate the deployment of fixes everywhere and at scale. With{' '} - Batch Changes, you can automate code changes and monitor - the merge status of each resulting PR. Refactor code to replace insecure functions, update + Batch Changes, you can automate code changes and monitor + the merge status of each resulting PR. Refactor code to replace insecure functions, update vulnerable packages, or modify container configurations across hundreds of repositories.

} @@ -102,7 +101,7 @@ const quoteCarouselItems = [ link: '/case-studies/quantcast-large-scale-refactoring', logoAlt: 'Quantcast', }, - { + { header: 'Nutanix proves the Log4j vulnerability no longer affects its codebase', quote: `Isn't it nice when you can just run a report and say, 'Here it is' or 'Here it isn't?' Much better than having to say, 'Well, boss, I think we got it all.'`, by: 'Jon Kohler, Technical Director of Solution Engineering, Nutanix', @@ -244,7 +243,7 @@ const UseCasePage: FunctionComponent = props => ( with a reputation for unreliability and missed SLAs.
  • - Incident response often relies on knowledge silos, which are neither scalable + Incident response often relies on knowledge silos, which are neither scalable nor sustainable.
  • From 010a69cec51730668d8a57b7bd16e37d74720ce5 Mon Sep 17 00:00:00 2001 From: zlonko Date: Wed, 13 Apr 2022 21:08:31 +0000 Subject: [PATCH 05/43] squash! Prettier --- .../src/pages/use-cases/incident-response.tsx | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 1c590cc73ea..002af6a338a 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -49,8 +49,8 @@ const items = [ text={

    Automate the deployment of fixes everywhere and at scale. With{' '} - Batch Changes, you can automate code changes and monitor - the merge status of each resulting PR. Refactor code to replace insecure functions, update + Batch Changes, you can automate code changes and monitor the + merge status of each resulting PR. Refactor code to replace insecure functions, update vulnerable packages, or modify container configurations across hundreds of repositories.

    } @@ -231,20 +231,21 @@ const UseCasePage: FunctionComponent = props => ( Incident response is stressful and overwhelming

    - Current tools don't enable teams to quickly get to the root cause of an incident - and ensure it doesn't reoccur. What does that mean for you? + Current tools don't enable teams to quickly get to the root cause of an incident and ensure + it doesn't reoccur. What does that mean for you?

      -
    • Outages and degraded performance persist while development teams look for causes, +
    • + Outages and degraded performance persist while development teams look for causes, leading to lost revenue and frustrated customers.
    • - Incidents can reoccur if developers can't find the root cause, leaving your company - with a reputation for unreliability and missed SLAs. + Incidents can reoccur if developers can't find the root cause, leaving your company with + a reputation for unreliability and missed SLAs.
    • - Incident response often relies on knowledge silos, which are neither scalable - nor sustainable. + Incident response often relies on knowledge silos, which are neither scalable nor + sustainable.
    • Company leaders struggle for visibility into incident response in progress and to @@ -256,16 +257,19 @@ const UseCasePage: FunctionComponent = props => (

      Cloudflare quickly addresses root-cause incidents

      - Cloudflare engineers use Sourcegraph's code intelligence platform to refactor and - debug faster. With Sourcegraph, they can quickly identify out-of-date code libraries - by only searching certain repositories while excluding specific file types. And it's - easier to search for error logs. As a result, the team can feel confident they've - addressed each issue. + Cloudflare engineers use Sourcegraph's code intelligence platform to refactor and debug + faster. With Sourcegraph, they can quickly identify out-of-date code libraries by only + searching certain repositories while excluding specific file types. And it's easier to + search for error logs. As a result, the team can feel confident they've addressed each + issue.

      - + Read the Cloudflare case study - +
  • @@ -294,7 +298,10 @@ const UseCasePage: FunctionComponent = props => (

    Get started with Sourcegraph

    -

    Respond to incidents with confidence and speed, and remediate issues at their root to ensure they don't reoccur.

    +

    + Respond to incidents with confidence and speed, and remediate issues at their root to ensure + they don't reoccur. +

    @@ -321,8 +328,10 @@ const UseCasePage: FunctionComponent = props => ( -
    -

    Respond to incidents faster and more effectively.

    +
    +

    + Respond to incidents faster and more effectively. +

    Ready to get started? From 9aaa03706db6721491b2399c6884de598f70348c Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Thu, 14 Apr 2022 15:29:11 -0500 Subject: [PATCH 06/43] add link to incident-response on use-case index --- website/src/pages/use-cases/index.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/website/src/pages/use-cases/index.tsx b/website/src/pages/use-cases/index.tsx index c64def34ce0..7954d11a7f4 100644 --- a/website/src/pages/use-cases/index.tsx +++ b/website/src/pages/use-cases/index.tsx @@ -238,6 +238,9 @@ export default ((props: any) => ( > Request a demo + + Learn more +
    From 3e9ebea92a4a97070f5651441a5996fba30feace Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Thu, 14 Apr 2022 15:30:08 -0500 Subject: [PATCH 07/43] run prettier --- website/src/css/_colors.scss | 7 --- .../src/pages/use-cases/incident-response.tsx | 47 +++++++++++-------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/website/src/css/_colors.scss b/website/src/css/_colors.scss index b01129b5bdc..454af610736 100644 --- a/website/src/css/_colors.scss +++ b/website/src/css/_colors.scss @@ -63,12 +63,10 @@ $dodger-blue: #2c7ef6; $theme-colors: ( // Bootstrap overrides 'primary': $blurple, - // Sourcegraph Primary Colors 'sky-blue': $sky-blue, 'vivid-violet': $vivid-violet, 'vermillion': $vermillion, - // Sourcegraph Secondary Colors 'yellow-mist': $yellow-mist, 'red-mist': $red-mist, @@ -79,17 +77,14 @@ $theme-colors: ( 'mint': $mint, 'blurple': $blurple, 'pacific-blue': $pacific-blue, - // Sourcegraph Colors for Website UI 'pale-sky': $pale-sky, 'black': $space-black, - // Colors not listed in our Brand Guidelines 'dark-9': $dark-9, 'dark-8': $dark-8, 'dark-5': $dark-5, 'dark-3': $dark-3, - 'light-1': $light-1, 'light-2': $light-2, 'light-5': $light-5, @@ -102,12 +97,10 @@ $theme-colors: ( 'light-gray-3': $light-gray-3, 'light-gray-4': $light-gray-4, 'light-gray-5': $light-gray-5, - 'green-1': $green-1, 'green-5': $green-5, 'green-7': $green-7, 'green-9': $green-9, - 'alabaster': $alabaster, 'light-blue': $light-blue, 'light-green': $light-green, diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 1c590cc73ea..002af6a338a 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -49,8 +49,8 @@ const items = [ text={

    Automate the deployment of fixes everywhere and at scale. With{' '} - Batch Changes, you can automate code changes and monitor - the merge status of each resulting PR. Refactor code to replace insecure functions, update + Batch Changes, you can automate code changes and monitor the + merge status of each resulting PR. Refactor code to replace insecure functions, update vulnerable packages, or modify container configurations across hundreds of repositories.

    } @@ -231,20 +231,21 @@ const UseCasePage: FunctionComponent = props => ( Incident response is stressful and overwhelming

    - Current tools don't enable teams to quickly get to the root cause of an incident - and ensure it doesn't reoccur. What does that mean for you? + Current tools don't enable teams to quickly get to the root cause of an incident and ensure + it doesn't reoccur. What does that mean for you?

      -
    • Outages and degraded performance persist while development teams look for causes, +
    • + Outages and degraded performance persist while development teams look for causes, leading to lost revenue and frustrated customers.
    • - Incidents can reoccur if developers can't find the root cause, leaving your company - with a reputation for unreliability and missed SLAs. + Incidents can reoccur if developers can't find the root cause, leaving your company with + a reputation for unreliability and missed SLAs.
    • - Incident response often relies on knowledge silos, which are neither scalable - nor sustainable. + Incident response often relies on knowledge silos, which are neither scalable nor + sustainable.
    • Company leaders struggle for visibility into incident response in progress and to @@ -256,16 +257,19 @@ const UseCasePage: FunctionComponent = props => (

      Cloudflare quickly addresses root-cause incidents

      - Cloudflare engineers use Sourcegraph's code intelligence platform to refactor and - debug faster. With Sourcegraph, they can quickly identify out-of-date code libraries - by only searching certain repositories while excluding specific file types. And it's - easier to search for error logs. As a result, the team can feel confident they've - addressed each issue. + Cloudflare engineers use Sourcegraph's code intelligence platform to refactor and debug + faster. With Sourcegraph, they can quickly identify out-of-date code libraries by only + searching certain repositories while excluding specific file types. And it's easier to + search for error logs. As a result, the team can feel confident they've addressed each + issue.

      - + Read the Cloudflare case study - +
    @@ -294,7 +298,10 @@ const UseCasePage: FunctionComponent = props => (

    Get started with Sourcegraph

    -

    Respond to incidents with confidence and speed, and remediate issues at their root to ensure they don't reoccur.

    +

    + Respond to incidents with confidence and speed, and remediate issues at their root to ensure + they don't reoccur. +

    @@ -321,8 +328,10 @@ const UseCasePage: FunctionComponent = props => ( -
    -

    Respond to incidents faster and more effectively.

    +
    +

    + Respond to incidents faster and more effectively. +

    Ready to get started? From 3746a6cb04719ad4c395afa0ab88103ee868a9f9 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Thu, 14 Apr 2022 16:18:33 -0500 Subject: [PATCH 08/43] add CTA tracking to incident-response --- .../src/pages/use-cases/incident-response.tsx | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 002af6a338a..1bb93967075 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -11,6 +11,7 @@ import { QuoteCarousel } from '../../components/QuoteCarousel' import CustomCarousel from '../../components/CustomCarousel' import { ContentSection } from '../../components/content/ContentSection' import { CustomerLogosSectionAnimated } from '../../components/product/CustomerLogosSectionAnimated' +import { buttonStyle, buttonLocation } from '../../tracking' import styles from './useCases.module.scss' @@ -170,6 +171,9 @@ const UseCasePage: FunctionComponent = props => ( className="btn btn-primary mr-lg-3 mb-lg-0 mb-3 w-md-100" to="/demo" title="Request a Demo." + data-button-style={buttonStyle.primary} + data-button-location={buttonLocation.hero} + data-button-type="cta" > Request a demo @@ -177,6 +181,9 @@ const UseCasePage: FunctionComponent = props => ( className="btn btn-outline-primary w-md-100" to="/get-started" title="Try Sourcegraph." + data-button-style={buttonStyle.outline} + data-button-location={buttonLocation.hero} + data-button-type="cta" > Try Sourcegraph now @@ -304,7 +311,14 @@ const UseCasePage: FunctionComponent = props => (

    - + Request a demo @@ -332,7 +346,13 @@ const UseCasePage: FunctionComponent = props => (

    Respond to incidents faster and more effectively.

    - + Ready to get started?
    From 22aeb7318164e206e7584f09b3b50ab14dde1c91 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Tue, 19 Apr 2022 08:56:18 -0500 Subject: [PATCH 09/43] add default height on carousel components --- website/src/components/CustomCarousel.tsx | 2 +- website/src/components/QuoteCarousel/index.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/components/CustomCarousel.tsx b/website/src/components/CustomCarousel.tsx index 107175542a6..e7db3707769 100644 --- a/website/src/components/CustomCarousel.tsx +++ b/website/src/components/CustomCarousel.tsx @@ -119,7 +119,7 @@ const CustomCarousel: FunctionComponent = props => {
    = ({ items, au const carouselItems = carouselHook.carouselItems.items as Blockquote[] return ( -
    +
    Date: Tue, 19 Apr 2022 14:06:32 -0400 Subject: [PATCH 10/43] Fixes for carousels --- website/src/components/CustomCarousel.tsx | 8 ++++---- website/src/components/QuoteCarousel/index.tsx | 4 ++-- website/src/pages/use-cases/incident-response.tsx | 4 +++- website/src/pages/use-cases/vulnerabilities.tsx | 4 +++- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/website/src/components/CustomCarousel.tsx b/website/src/components/CustomCarousel.tsx index e7db3707769..1b601eb1dde 100644 --- a/website/src/components/CustomCarousel.tsx +++ b/website/src/components/CustomCarousel.tsx @@ -45,13 +45,13 @@ const CustomCarousel: FunctionComponent = props => { ? classNames( carouselMainStyles, currentCarousel.currentItem?.backgroundClass, - 'justify-content-between h-xl-450 h-lg-250 h-md-250 h-sm-auto' + 'justify-content-between h-xl-450 h-lg-250 h-md-250 h-sm-auto h-auto' ) : autoAdvance ? classNames( carouselMainStyles, currentCarousel.currentItem?.backgroundClass, - 'justify-content-between h-xl-450 h-lg-auto h-md-auto h-sm-auto' + 'justify-content-between h-xl-450 h-lg-auto h-md-auto h-sm-auto h-auto' ) : classNames( carouselMainStyles, @@ -61,7 +61,7 @@ const CustomCarousel: FunctionComponent = props => { } > {props.showHeadlinesOnMobile && ( -
      +
        {carouselItems.map((item, index) => (
      • = props => { autoAdvance && props.smallPanel ? classNames(carouselRightPanelStyles, 'h-xl-500 h-lg-300 h-md-300 h-sm-250 h-250') : autoAdvance - ? classNames(carouselRightPanelStyles, 'h-xl-500 h-lg-500 h-md-500 h-sm-450') + ? classNames(carouselRightPanelStyles, 'h-xl-500 h-lg-500 h-md-500 h-sm-500 h-500') : classNames(carouselRightPanelStyles) } > diff --git a/website/src/components/QuoteCarousel/index.tsx b/website/src/components/QuoteCarousel/index.tsx index 7053306c277..6ae26d14d12 100644 --- a/website/src/components/QuoteCarousel/index.tsx +++ b/website/src/components/QuoteCarousel/index.tsx @@ -30,7 +30,7 @@ export const QuoteCarousel: FunctionComponent = ({ items, au const carouselItems = carouselHook.carouselItems.items as Blockquote[] return ( -
        +
        = ({ items, au {carouselItems.map(item => (
        = props => (
        -

        How Sourcegraph helps

        +

        + How Sourcegraph helps +

        diff --git a/website/src/pages/use-cases/vulnerabilities.tsx b/website/src/pages/use-cases/vulnerabilities.tsx index 493781ffc4d..946f1257593 100644 --- a/website/src/pages/use-cases/vulnerabilities.tsx +++ b/website/src/pages/use-cases/vulnerabilities.tsx @@ -299,7 +299,9 @@ const UseCasePage: FunctionComponent = props => (
        -

        How Sourcegraph helps

        +

        + How Sourcegraph helps +

        From 8f284b8a26ee814d2d13f7bf3d9ca30a7cf2134d Mon Sep 17 00:00:00 2001 From: Kathleen Juell Date: Tue, 19 Apr 2022 14:13:15 -0400 Subject: [PATCH 11/43] Add tracking for other use cases pages --- .../src/pages/use-cases/incident-response.tsx | 2 +- website/src/pages/use-cases/onboarding.tsx | 24 +++++++++++++++++-- .../src/pages/use-cases/vulnerabilities.tsx | 24 +++++++++++++++++-- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 57402a96203..819e8af89b3 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -352,7 +352,7 @@ const UseCasePage: FunctionComponent = props => ( to="/get-started" className="btn btn-primary" data-button-style={buttonStyle.primary} - data-button-location={buttonLocation.bodyDemo} + data-button-location={buttonLocation.trySourcegraph} data-button-type="cta" > Ready to get started? diff --git a/website/src/pages/use-cases/onboarding.tsx b/website/src/pages/use-cases/onboarding.tsx index da9666d6410..c0d344b222b 100644 --- a/website/src/pages/use-cases/onboarding.tsx +++ b/website/src/pages/use-cases/onboarding.tsx @@ -11,6 +11,7 @@ import { BlogListItem } from '../../components/BlogListItem' import CustomCarousel from '../../components/CustomCarousel' import { ContentSection } from '../../components/content/ContentSection' import { CustomerLogosSectionAnimated } from '../../components/product/CustomerLogosSectionAnimated' +import { buttonStyle, buttonLocation } from '../../tracking' import styles from './useCases.module.scss' @@ -150,6 +151,9 @@ const UseCasePage: FunctionComponent = props => ( className="btn btn-primary mr-lg-3 mb-lg-0 mb-3 w-md-100" to="/demo" title="Request a Demo." + data-button-style={buttonStyle.primary} + data-button-location={buttonLocation.hero} + data-button-type="cta" > Request a demo @@ -157,6 +161,9 @@ const UseCasePage: FunctionComponent = props => ( className="btn btn-outline-primary w-md-100" to="/get-started" title="Try Sourcegraph." + data-button-style={buttonStyle.outline} + data-button-location={buttonLocation.hero} + data-button-type="cta" > Try Sourcegraph now @@ -281,7 +288,14 @@ const UseCasePage: FunctionComponent = props => (

        - + Request a demo @@ -307,7 +321,13 @@ const UseCasePage: FunctionComponent = props => (

        Better onboarding is only a few searches away.

        - + Ready to get started?
        diff --git a/website/src/pages/use-cases/vulnerabilities.tsx b/website/src/pages/use-cases/vulnerabilities.tsx index 946f1257593..af914bb0a18 100644 --- a/website/src/pages/use-cases/vulnerabilities.tsx +++ b/website/src/pages/use-cases/vulnerabilities.tsx @@ -11,6 +11,7 @@ import { QuoteCarousel } from '../../components/QuoteCarousel' import CustomCarousel from '../../components/CustomCarousel' import { ContentSection } from '../../components/content/ContentSection' import { CustomerLogosSectionAnimated } from '../../components/product/CustomerLogosSectionAnimated' +import { buttonStyle, buttonLocation } from '../../tracking' import styles from './useCases.module.scss' @@ -193,6 +194,9 @@ const UseCasePage: FunctionComponent = props => ( className="btn btn-primary mr-lg-3 mb-lg-0 mb-3 w-md-100" to="/demo" title="Request a Demo." + data-button-style={buttonStyle.primary} + data-button-location={buttonLocation.hero} + data-button-type="cta" > Request a demo @@ -200,6 +204,9 @@ const UseCasePage: FunctionComponent = props => ( className="btn btn-outline-primary w-md-100" to="/get-started" title="Try Sourcegraph." + data-button-style={buttonStyle.outline} + data-button-location={buttonLocation.hero} + data-button-type="cta" > Try Sourcegraph now @@ -323,7 +330,14 @@ const UseCasePage: FunctionComponent = props => (

        Find, fix, and track vulnerable code quickly across your entire codebase.

        - + Request a demo @@ -348,7 +362,13 @@ const UseCasePage: FunctionComponent = props => (
        - + Ready to get started?
        From 3cb23b0d00e4505ecaddfead33f31438aaa5c321 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Tue, 19 Apr 2022 15:06:45 -0500 Subject: [PATCH 12/43] reduce quote carousel blockquote height --- website/src/components/QuoteCarousel/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/components/QuoteCarousel/index.tsx b/website/src/components/QuoteCarousel/index.tsx index 6ae26d14d12..9ba5910c9d1 100644 --- a/website/src/components/QuoteCarousel/index.tsx +++ b/website/src/components/QuoteCarousel/index.tsx @@ -42,7 +42,7 @@ export const QuoteCarousel: FunctionComponent = ({ items, au {carouselItems.map(item => (
        Date: Tue, 19 Apr 2022 19:24:19 -0500 Subject: [PATCH 13/43] initial code health copy --- website/src/pages/use-cases/code-health.tsx | 363 ++++++++++++++++++++ 1 file changed, 363 insertions(+) create mode 100644 website/src/pages/use-cases/code-health.tsx diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx new file mode 100644 index 00000000000..9a62e95775d --- /dev/null +++ b/website/src/pages/use-cases/code-health.tsx @@ -0,0 +1,363 @@ +import { Link, PageProps } from 'gatsby' +import CrosshairsGpsIcon from 'mdi-react/CrosshairsGpsIcon' +import ClockTimeThreeOutlineIcon from 'mdi-react/ClockTimeThreeOutlineIcon' +import WebIcon from 'mdi-react/WebIcon' +import React, { FunctionComponent, ReactNode } from 'react' + +import Layout from '../../components/Layout' +import { BackButtonBold } from '../../components/BackButton' +import { BlogListItem } from '../../components/BlogListItem' +import { QuoteCarousel } from '../../components/QuoteCarousel' +import CustomCarousel from '../../components/CustomCarousel' +import { ContentSection } from '../../components/content/ContentSection' +import { CustomerLogosSectionAnimated } from '../../components/product/CustomerLogosSectionAnimated' +import { buttonStyle, buttonLocation } from '../../tracking' + +import styles from './useCases.module.scss' + +const CarouselItem: FunctionComponent<{ header: string; text: ReactNode }> = ({ header, text }) => ( + <> +

        {header}

        + {text} + +) + +const items = [ + { + buttonLabel: 'Find old versions easily', + text: ( + + Use Code Search to spot deprecated methods and APIs left in your code and share examples of how the latest versions are used. +

        + } + /> + ), + headerClass: 'active', + itemClass: 'd-block', + }, + { + buttonLabel: 'Automate version updates and communications', + text: ( + + With Batch Changes, you can quickly update versions and send pull requests to all your repositories as a way of alerting repository owners that they need to upgrade. +

        + } + /> + ), + itemClass: 'd-none', + }, + { + buttonLabel: 'Get everyone on the same page with living docs', + text: ( + + Create living, actionable documentation with Notebooks + that show your best practices with real-life examples you can share with your team. +

        + } + /> + ), + itemClass: 'd-none', + }, + { + buttonLabel: 'Monitor for deprecated code', + text: ( + + Make sure deprecated endpoints don't sneak back into your code. Get alerts for new occurrences of deprecated methods or restricted patterns with + code monitoring. +

        + } + /> + ), + itemClass: 'd-none', + }, + { + buttonLabel: 'Develop a data-driven relationship with your code', + text: ( + + Create dashboards to track mitigations, package use, version adoption, code smells, codebase size, and more to understand code health with + Code Insights. +

        + } + /> + ), + itemClass: 'd-none', + }, +] + +const quoteCarouselItems = [ + { + header: 'Indeed improves code health at scale', + quote: 'The ability to automate downstream changes that Sourcegraph Batch Changes provides is a key capability for reducing the hidden burden of updates pushed across teams and enabling us to increase our engineering velocity.', + by: 'Jared Hodge, Senior Manager, Developer Experience at Indeed', + logoImage: '/external-logos/indeed-logo.svg', + linkText: 'Read the case study', + link: '/case-studies/indeed-accelerates-development-velocity', + logoAlt: 'Indeed', + }, + { + header: 'Quantcast accelerates large-scale refactoring', + quote: 'Quantcast uses Sourcegraph to create burndown lists of issues and provide code owners links to Sourcegraph search results. Since Sourcegraph searches every repository, a single engineer can analyze thousands of repositories in only a few days rather than months.', + by: '', + logoImage: '/external-logos/quantcast-logo.svg', + linkText: 'Read the case study', + link: '/case-studies/quantcast-large-scale-refactoring', + logoAlt: 'Quantcast', + }, + { + header: 'Workiva', + quote: `As an organization that values paying down tech debt, Workiva’s Client Platform team started using Sourcegraph to help them efficiently propagate updates to dependencies across all of their repositories without any ongoing maintenance.`, + by: '', + logoImage: '/external-logos/workiva-logo.svg', + linkText: 'Read the case study', + link: '/case-studies/workiva-automates-large-scale-code-changes', + logoAlt: 'Workiva', + }, +] + +const blogListItems = [ + { + title: 'How not to break a search engine or: What I learned about unglamorous engineering', + description: + `When Sourcegraph switched to a new search query parser, you'd never know anything had changed. This is an account of the rigorous testing that happened behind the scenes to ensure a seamless transition.`, + type: 'Blog post', + image: '', + href: '', + }, + { + title: 'How we migrated entirely to CSS Modules using codemods and Sourcegraph Code Insights', + description: + `Learn how Sourcegraph's Frontend Platform team overhauled our web application's design system and UI using codemods to automate a challenging global migration to CSS modules and Code Insights to track and communicate progress.`, + type: 'Blog post', + image: '', + href: '', + }, + { + title: 'How we added backend integration testing to our CI pipeline', + description: + `Here's the story and the lessons learned from our work to remove all existing backend-related end-to-end tests and reliably run their corresponding unit and integration tests as part of our CI pipeline on all branches.`, + type: 'Blog post', + image: '', + href: '', + }, +] + +const UseCasePage: FunctionComponent = props => ( + +
        +
        +
        +
        + +

        + Healthy code, happy teams +

        +
        + Improve code health with large-scale changes and track key initiatives across your entire codebase. +
        +
        + + Request a demo + + + Try Sourcegraph now + +
        +
        +
        +
        + + } + > + +
        +
        +

        + Track and improve code health across your entire codebase +

        +
        +
        +
        + +

        Find unhealthy code

        +

        + Build a healthier codebase by finding references to deprecated services, libraries, URL patterns, and more across all your repositories. +

        +
        +
        + +

        Remediate code health issues

        +

        + Efficiently tackle refactoring efforts and tech debt from legacy systems and acquisitions with automated pull requests across your entire codebase. +

        +
        +
        + +

        Monitor code health initiatives

        +

        + Stay on top of changes to your code health. Monitor and measure code health initiatives and get actionable insights into the impact of large-scale changes. +

        +
        +
        +
        +
        + +
        + +
        +
        +

        + Improving code health can be daunting +

        +

        + Engineering teams need to track and measure code quality consistently to monitor code health across their entire codebase, but current tools don't make this easy. What does that mean for you? +

        +
          +
        • + Old versions, libraries, or funcitons are littered throughout your code, resulting in incidents and backward compatibility issues. +
        • +
        • + Unclear code ownership leads to unclear responsibility, making it hard for developers to find the right domain expert when they need help. +
        • +
        • + Engineering managers struggle to justify prioritizing and addressing tech debt because success is difficult to track and measure. +
        • +
        +
        +
        +
        +

        Lyft boosts code health and accelerates developer velocity

        +

        + With the help of Sourcegraph, we were able to quickly look at all clients of an API and remove unused attributes that lived in different repositories, ultimately simplifying our APIs and speeding up developer iteration time. +

        + + Read the case study + + +
        +
        +
        +
        +
        + + +
        +
        +

        + How Sourcegraph helps +

        +
        +
        + +
        +
        +
        + +
        + + + +
        + +
        + +
        +
        +

        Get started with Sourcegraph

        +

        + Give your team the tools they need to build a healthier codebase. +

        +
        +
        + + Request a demo + + +

        Explore other use cases

        + +
        +
        +
        + +
        + + +
        +
        +

        Related resources

        +
        + {blogListItems.map(item => ( + + ))} +
        +
        + + +
        +

        + Ready to build a healthier codebase? +

        + + Get started today + +
        +
        + +) + +export default UseCasePage From 1de78db60f1cf4b226b9753a20fc725ae9488555 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Tue, 19 Apr 2022 20:13:21 -0500 Subject: [PATCH 14/43] responsive heights for quote block --- website/src/components/QuoteCarousel/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/components/QuoteCarousel/index.tsx b/website/src/components/QuoteCarousel/index.tsx index 9ba5910c9d1..b3c54ff2913 100644 --- a/website/src/components/QuoteCarousel/index.tsx +++ b/website/src/components/QuoteCarousel/index.tsx @@ -42,7 +42,7 @@ export const QuoteCarousel: FunctionComponent = ({ items, au {carouselItems.map(item => (
        Date: Wed, 20 Apr 2022 01:15:01 +0000 Subject: [PATCH 15/43] squash! Prettier --- website/src/components/QuoteCarousel/index.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/src/components/QuoteCarousel/index.tsx b/website/src/components/QuoteCarousel/index.tsx index b3c54ff2913..f356d74bfce 100644 --- a/website/src/components/QuoteCarousel/index.tsx +++ b/website/src/components/QuoteCarousel/index.tsx @@ -42,7 +42,9 @@ export const QuoteCarousel: FunctionComponent = ({ items, au {carouselItems.map(item => (
        Date: Wed, 20 Apr 2022 10:00:10 -0500 Subject: [PATCH 16/43] change spacing increments and add height for extra small screens --- website/src/components/QuoteCarousel/index.tsx | 6 +++++- website/src/css/_spacing.scss | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/website/src/components/QuoteCarousel/index.tsx b/website/src/components/QuoteCarousel/index.tsx index b3c54ff2913..f6f63c89651 100644 --- a/website/src/components/QuoteCarousel/index.tsx +++ b/website/src/components/QuoteCarousel/index.tsx @@ -42,7 +42,11 @@ export const QuoteCarousel: FunctionComponent = ({ items, au {carouselItems.map(item => (
        Date: Wed, 20 Apr 2022 13:51:53 -0500 Subject: [PATCH 17/43] link to code health from use cases landing page --- website/src/pages/use-cases/index.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/website/src/pages/use-cases/index.tsx b/website/src/pages/use-cases/index.tsx index c64def34ce0..8e032edf765 100644 --- a/website/src/pages/use-cases/index.tsx +++ b/website/src/pages/use-cases/index.tsx @@ -348,6 +348,9 @@ export default ((props: any) => ( > Request a demo + + Learn more +
        From c29c3696e8a51c25131faa040a6786ac97ef5772 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 20 Apr 2022 13:52:28 -0500 Subject: [PATCH 18/43] add icons, copy, spacing to code health --- website/src/pages/use-cases/code-health.tsx | 146 ++++++++++---------- 1 file changed, 71 insertions(+), 75 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index 9a62e95775d..b45cb880e1d 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -1,11 +1,12 @@ import { Link, PageProps } from 'gatsby' -import CrosshairsGpsIcon from 'mdi-react/CrosshairsGpsIcon' -import ClockTimeThreeOutlineIcon from 'mdi-react/ClockTimeThreeOutlineIcon' -import WebIcon from 'mdi-react/WebIcon' +import MagnifyIcon from 'mdi-react/MagnifyIcon' +import WrenchOutlineIcon from 'mdi-react/WrenchOutlineIcon' +import ClipBoardPulseOutlineIcon from 'mdi-react/ClipboardPulseOutlineIcon' import React, { FunctionComponent, ReactNode } from 'react' import Layout from '../../components/Layout' import { BackButtonBold } from '../../components/BackButton' +import { Blockquote } from '../../components/Blockquote' import { BlogListItem } from '../../components/BlogListItem' import { QuoteCarousel } from '../../components/QuoteCarousel' import CustomCarousel from '../../components/CustomCarousel' @@ -30,7 +31,8 @@ const items = [ header="Find old versions easily" text={

        - Use Code Search to spot deprecated methods and APIs left in your code and share examples of how the latest versions are used. + Use Code Search to spot deprecated methods and APIs left in your + code and share examples of how the latest versions are used.

        } /> @@ -45,7 +47,9 @@ const items = [ header="Automate version updates and communications" text={

        - With Batch Changes, you can quickly update versions and send pull requests to all your repositories as a way of alerting repository owners that they need to upgrade. + With Batch Changes, you can quickly update versions and send + pull requests to all your repositories as a way of alerting repository owners that they need to + upgrade.

        } /> @@ -59,8 +63,9 @@ const items = [ header="Get everyone on the same page with living docs" text={

        - Create living, actionable documentation with Notebooks - that show your best practices with real-life examples you can share with your team. + Create living, actionable documentation with{' '} + Notebooks that show your best practices + with real-life examples you can share with your team.

        } /> @@ -74,14 +79,15 @@ const items = [ header="Monitor for deprecated code" text={

        - Make sure deprecated endpoints don't sneak back into your code. Get alerts for new occurrences of deprecated methods or restricted patterns with + Make sure deprecated endpoints don't sneak back into your code. Get alerts for new occurrences + of deprecated methods or restricted patterns with{' '} code monitoring.

        } /> ), itemClass: 'd-none', - }, + }, { buttonLabel: 'Develop a data-driven relationship with your code', text: ( @@ -89,8 +95,8 @@ const items = [ header="Develop a data-driven relationship with your code" text={

        - Create dashboards to track mitigations, package use, version adoption, code smells, codebase size, and more to understand code health with - Code Insights. + Create dashboards to track mitigations, package use, version adoption, code smells, codebase + size, and more to understand code health with Code Insights.

        } /> @@ -112,17 +118,15 @@ const quoteCarouselItems = [ { header: 'Quantcast accelerates large-scale refactoring', quote: 'Quantcast uses Sourcegraph to create burndown lists of issues and provide code owners links to Sourcegraph search results. Since Sourcegraph searches every repository, a single engineer can analyze thousands of repositories in only a few days rather than months.', - by: '', logoImage: '/external-logos/quantcast-logo.svg', linkText: 'Read the case study', link: '/case-studies/quantcast-large-scale-refactoring', logoAlt: 'Quantcast', }, { - header: 'Workiva', + header: 'Workiva efficiently pays down tech debt', quote: `As an organization that values paying down tech debt, Workiva’s Client Platform team started using Sourcegraph to help them efficiently propagate updates to dependencies across all of their repositories without any ongoing maintenance.`, - by: '', - logoImage: '/external-logos/workiva-logo.svg', + logoImage: '/external-logos/workiva-vector-logo.svg', linkText: 'Read the case study', link: '/case-studies/workiva-automates-large-scale-code-changes', logoAlt: 'Workiva', @@ -132,27 +136,24 @@ const quoteCarouselItems = [ const blogListItems = [ { title: 'How not to break a search engine or: What I learned about unglamorous engineering', - description: - `When Sourcegraph switched to a new search query parser, you'd never know anything had changed. This is an account of the rigorous testing that happened behind the scenes to ensure a seamless transition.`, + description: `When Sourcegraph switched to a new search query parser, you'd never know anything had changed. This is an account of the rigorous testing that happened behind the scenes to ensure a seamless transition.`, type: 'Blog post', - image: '', - href: '', + image: 'https://storage.googleapis.com/sourcegraph-assets/blog/how-not-to-break-a-search-engine-new.png', + href: '/blog/how-not-to-break-a-search-engine-unglamorous-engineering', }, { title: 'How we migrated entirely to CSS Modules using codemods and Sourcegraph Code Insights', - description: - `Learn how Sourcegraph's Frontend Platform team overhauled our web application's design system and UI using codemods to automate a challenging global migration to CSS modules and Code Insights to track and communicate progress.`, + description: `Learn how Sourcegraph's Frontend Platform team overhauled our web application's design system and UI using codemods to automate a challenging global migration to CSS modules and Code Insights to track and communicate progress.`, type: 'Blog post', - image: '', - href: '', + image: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/migrating-to-css-modules.png', + href: '/blog/migrating-to-css-modules-with-codemods-and-code-insights', }, { title: 'How we added backend integration testing to our CI pipeline', - description: - `Here's the story and the lessons learned from our work to remove all existing backend-related end-to-end tests and reliably run their corresponding unit and integration tests as part of our CI pipeline on all branches.`, + description: `Here's the story and the lessons learned from our work to remove all existing backend-related end-to-end tests and reliably run their corresponding unit and integration tests as part of our CI pipeline on all branches.`, type: 'Blog post', - image: '', - href: '', + image: 'https://storage.googleapis.com/sourcegraph-assets/blog/backend-integration-testing/backend-integration-testing.png', + href: '/blog/integration-testing', }, ] @@ -162,7 +163,7 @@ const UseCasePage: FunctionComponent = props => ( meta={{ title: 'Improve Code Health | Sourcegraph', description: - 'Tackle refactoring efforts and tech debt from legacy systems with automated pull requests across your entire codebase to boost code health. ', + 'Tackle refactoring efforts and tech debt from legacy systems with automated pull requests across your entire codebase to boost code health.', image: 'https://about.sourcegraph.com/sourcegraph-og.png', }} className="use-cases-page" @@ -174,11 +175,10 @@ const UseCasePage: FunctionComponent = props => (
        -

        - Healthy code, happy teams -

        +

        Healthy code, happy teams

        - Improve code health with large-scale changes and track key initiatives across your entire codebase. + Improve code health with large-scale changes and track key initiatives across your + entire codebase.
        = props => (
        -

        +

        Track and improve code health across your entire codebase

        -
        +
        - +

        Find unhealthy code

        - Build a healthier codebase by finding references to deprecated services, libraries, URL patterns, and more across all your repositories. + Build a healthier codebase by finding references to deprecated services, libraries, URL + patterns, and more across all your repositories.

        -
        - +
        +

        Remediate code health issues

        - Efficiently tackle refactoring efforts and tech debt from legacy systems and acquisitions with automated pull requests across your entire codebase. + Efficiently tackle refactoring efforts and tech debt from legacy systems and acquisitions + with automated pull requests across your entire codebase.

        - +

        Monitor code health initiatives

        - Stay on top of changes to your code health. Monitor and measure code health initiatives and get actionable insights into the impact of large-scale changes. + Stay on top of changes to your code health. Monitor and measure code health initiatives and + get actionable insights into the impact of large-scale changes.

        @@ -245,38 +248,38 @@ const UseCasePage: FunctionComponent = props => (
        -

        - Improving code health can be daunting -

        -

        - Engineering teams need to track and measure code quality consistently to monitor code health across their entire codebase, but current tools don't make this easy. What does that mean for you? +

        Improving code health can be daunting

        +

        + Engineering teams need to track and measure code quality consistently to monitor code health + across their entire codebase, but current tools don't make this easy.{' '} + What does that mean for you?

        • - Old versions, libraries, or funcitons are littered throughout your code, resulting in incidents and backward compatibility issues. + Old versions, libraries, or functions are littered throughout your code, resulting in + incidents and backward compatibility issues.
        • - Unclear code ownership leads to unclear responsibility, making it hard for developers to find the right domain expert when they need help. + Unclear code ownership leads to unclear responsibility, making it hard for developers to + find the right domain expert when they need help.
        • - Engineering managers struggle to justify prioritizing and addressing tech debt because success is difficult to track and measure. + Engineering managers struggle to justify prioritizing and addressing tech debt because + success is difficult to track and measure.
        -
        -
        -

        Lyft boosts code health and accelerates developer velocity

        -

        - With the help of Sourcegraph, we were able to quickly look at all clients of an API and remove unused attributes that lived in different repositories, ultimately simplifying our APIs and speeding up developer iteration time. -

        - - Read the case study - - -
        +
        +
        @@ -304,11 +307,9 @@ const UseCasePage: FunctionComponent = props => (
        -
        -

        Get started with Sourcegraph

        -

        - Give your team the tools they need to build a healthier codebase. -

        +
        +

        Get started with Sourcegraph

        +

        Give your team the tools they need to build a healthier codebase.

        = props => ( > Request a demo - -

        Explore other use cases

        -
        @@ -342,10 +340,8 @@ const UseCasePage: FunctionComponent = props => ( -
        -

        - Ready to build a healthier codebase? -

        +
        +

        Ready to build a healthier codebase?

        Date: Wed, 20 Apr 2022 13:55:03 -0500 Subject: [PATCH 19/43] edit Blockquote and BlockquoteWithLogoBottom for copy requirements --- website/src/components/Blockquote.tsx | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/website/src/components/Blockquote.tsx b/website/src/components/Blockquote.tsx index 904747a79c9..f6264ca6536 100644 --- a/website/src/components/Blockquote.tsx +++ b/website/src/components/Blockquote.tsx @@ -10,7 +10,9 @@ export const Blockquote: FunctionComponent<{ logoAlt?: string border?: boolean headline?: string -}> = ({ quote, by, logoImage, border, headline, logoAlt }) => { + link?: string + linkText?: string +}> = ({ quote, by, logoImage, border, headline, logoAlt, link, linkText }) => { const quoteStyles = 'p-3 rounded rounded-lg text-center' return ( @@ -37,6 +39,17 @@ export const Blockquote: FunctionComponent<{ {logoAlt}
        )} + {linkText && link && link.includes('http') && ( + + {linkText} + + )} + {linkText && link && !link.includes('http') && ( + +

        {linkText}

        + + + )} ) } @@ -54,7 +67,11 @@ export const BlockquoteWithLogoBottom: FunctionComponent<{ <> {header &&

        {header}

        }
        -

        “{quote}”

        +

        + {by && <>“} + {quote} + {by && <>”} +

        {by &&
        — {by}
        }
        {logoImage && logoAlt && ( From 8309430023bf24cc012e6cec5aa938ce77640cc8 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 20 Apr 2022 14:24:23 -0500 Subject: [PATCH 20/43] spacing updates for mobile --- website/src/pages/use-cases/code-health.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index b45cb880e1d..cfa3c267f31 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -175,7 +175,7 @@ const UseCasePage: FunctionComponent = props => (
        -

        Healthy code, happy teams

        +

        Healthy code, happy teams

        Improve code health with large-scale changes and track key initiatives across your entire codebase. @@ -211,7 +211,7 @@ const UseCasePage: FunctionComponent = props => (
        -

        +

        Track and improve code health across your entire codebase

        @@ -269,7 +269,7 @@ const UseCasePage: FunctionComponent = props => (
    -
    +
    Date: Fri, 22 Apr 2022 12:57:45 -0500 Subject: [PATCH 21/43] qa copy and spacing updates --- website/src/pages/use-cases/incident-response.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 819e8af89b3..21679204f39 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -202,7 +202,7 @@ const UseCasePage: FunctionComponent = props => (
    -
    +

    Assess incidents quickly

    @@ -210,7 +210,7 @@ const UseCasePage: FunctionComponent = props => ( Understand the code's functionality to verify the issue.

    -
    +

    Plan your remediation

    @@ -218,7 +218,7 @@ const UseCasePage: FunctionComponent = props => ( all affected code.

    -
    +

    Execute your plan globally

    @@ -255,7 +255,7 @@ const UseCasePage: FunctionComponent = props => ( sustainable.

  • - Company leaders struggle for visibility into incident response in progress and to + Company leaders struggle to gain visibility into in-progress incident responses and communicate timelines to stakeholders.
  • From 6e3901a5a47c2592d26994705da070e766024848 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Fri, 22 Apr 2022 13:43:24 -0500 Subject: [PATCH 22/43] increase spacing on three columns --- website/src/pages/use-cases/incident-response.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 21679204f39..9032f58e188 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -202,7 +202,7 @@ const UseCasePage: FunctionComponent = props => (
    -
    +

    Assess incidents quickly

    @@ -210,7 +210,7 @@ const UseCasePage: FunctionComponent = props => ( Understand the code's functionality to verify the issue.

    -
    +

    Plan your remediation

    @@ -218,7 +218,7 @@ const UseCasePage: FunctionComponent = props => ( all affected code.

    -
    +

    Execute your plan globally

    From bbaabba18bb68d9f360cf0adf36d728f2dc0db38 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Fri, 22 Apr 2022 15:12:03 -0500 Subject: [PATCH 23/43] small change --- website/src/pages/use-cases/incident-response.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 9032f58e188..ff254e07e1e 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -101,7 +101,7 @@ const quoteCarouselItems = [ logoImage: '/external-logos/quantcast-logo.svg', linkText: 'Read the case study', link: '/case-studies/quantcast-large-scale-refactoring', - logoAlt: 'Quantcast', + logoAlt: 'Quantcast Logo', }, { header: 'Nutanix proves the Log4j vulnerability no longer affects its codebase', @@ -110,7 +110,7 @@ const quoteCarouselItems = [ logoImage: '/external-logos/nutanix-logo.svg', linkText: 'Read the case study', link: '/case-studies/nutanix-fixed-log4j-with-sourcegraph', - logoAlt: 'Nutanix', + logoAlt: 'Nutanix Logo', }, ] From 7140251b4999e63b2ba5b8f6a835c7fdd417a965 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Fri, 22 Apr 2022 16:07:37 -0500 Subject: [PATCH 24/43] break line in hero header --- website/src/pages/use-cases/code-health.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index cfa3c267f31..e438219e8ba 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -175,7 +175,9 @@ const UseCasePage: FunctionComponent = props => (

    -

    Healthy code, happy teams

    +

    + Healthy code, happy teams +

    Improve code health with large-scale changes and track key initiatives across your entire codebase. From 75976e05eeca1bf60aa59c59ba6c56427af6dad1 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Fri, 22 Apr 2022 16:42:43 -0500 Subject: [PATCH 25/43] header breakpoints --- website/src/pages/use-cases/code-health.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index e438219e8ba..557d56eda4c 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -175,7 +175,7 @@ const UseCasePage: FunctionComponent = props => (
    -

    +

    Healthy code, happy teams

    From f5faedb6057e9ab7923a06b964a25054caf17a2a Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Mon, 25 Apr 2022 16:41:11 -0500 Subject: [PATCH 26/43] refactor blockquote styling --- website/src/components/Blockquote.tsx | 11 ++++++----- website/src/css/pages/__case_studies.scss | 20 ++------------------ 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/website/src/components/Blockquote.tsx b/website/src/components/Blockquote.tsx index f6264ca6536..207a8f5b3e4 100644 --- a/website/src/components/Blockquote.tsx +++ b/website/src/components/Blockquote.tsx @@ -13,27 +13,28 @@ export const Blockquote: FunctionComponent<{ link?: string linkText?: string }> = ({ quote, by, logoImage, border, headline, logoAlt, link, linkText }) => { - const quoteStyles = 'p-3 rounded rounded-lg text-center' + const quoteStyles = 'p-3 text-center' return ( <>
    {border && headline ? ( -
    -
    {headline}
    -
    “{quote}”
    +
    +

    {headline}

    +
    “{quote}”
    ) : (

    “{quote}”

    )} {by &&
    — {by}
    }
    + {logoImage && logoAlt && (
    {logoAlt} diff --git a/website/src/css/pages/__case_studies.scss b/website/src/css/pages/__case_studies.scss index cca22d0ae19..2c742f00dd2 100644 --- a/website/src/css/pages/__case_studies.scss +++ b/website/src/css/pages/__case_studies.scss @@ -54,24 +54,8 @@ font-weight: 400; } - &--in-content { - margin: 2rem 0; - - p { - padding-left: 1rem; - border-left: 3px solid #f86012; - font-weight: 600; - font-size: 1.2rem; - line-height: 1.5; - } - - &--section { - padding-left: 1rem; - border-left: 3px solid #f86012; - font-weight: 600; - font-size: 1.2rem; - line-height: 1.5; - } + &--border { + border-left: 3px solid #f86012; } } } From a6f9ce3bf3a2363f328248626ded35d1bf25cddd Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Mon, 25 Apr 2022 16:50:28 -0500 Subject: [PATCH 27/43] more blockquote refactoring --- website/src/components/Blockquote.tsx | 5 ++--- website/src/css/pages/__case_studies.scss | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/website/src/components/Blockquote.tsx b/website/src/components/Blockquote.tsx index 207a8f5b3e4..85b048ac560 100644 --- a/website/src/components/Blockquote.tsx +++ b/website/src/components/Blockquote.tsx @@ -13,15 +13,14 @@ export const Blockquote: FunctionComponent<{ link?: string linkText?: string }> = ({ quote, by, logoImage, border, headline, logoAlt, link, linkText }) => { - const quoteStyles = 'p-3 text-center' return ( <>
    {border && headline ? ( diff --git a/website/src/css/pages/__case_studies.scss b/website/src/css/pages/__case_studies.scss index 2c742f00dd2..fc727ddc0de 100644 --- a/website/src/css/pages/__case_studies.scss +++ b/website/src/css/pages/__case_studies.scss @@ -55,7 +55,7 @@ } &--border { - border-left: 3px solid #f86012; + border-left: 3px solid; } } } From e050e5f3b9149fc6ca01616181c2fc77e4a827fb Mon Sep 17 00:00:00 2001 From: zlonko Date: Mon, 25 Apr 2022 21:52:23 +0000 Subject: [PATCH 28/43] squash! Prettier --- website/src/components/Blockquote.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/website/src/components/Blockquote.tsx b/website/src/components/Blockquote.tsx index 85b048ac560..91f95b5d6b2 100644 --- a/website/src/components/Blockquote.tsx +++ b/website/src/components/Blockquote.tsx @@ -13,7 +13,6 @@ export const Blockquote: FunctionComponent<{ link?: string linkText?: string }> = ({ quote, by, logoImage, border, headline, logoAlt, link, linkText }) => { - return ( <>
    Date: Mon, 25 Apr 2022 17:09:15 -0500 Subject: [PATCH 29/43] adjust blockquote spacing and align left border --- website/src/components/Blockquote.tsx | 2 +- website/src/css/pages/__case_studies.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/components/Blockquote.tsx b/website/src/components/Blockquote.tsx index 85b048ac560..b0131ce1d44 100644 --- a/website/src/components/Blockquote.tsx +++ b/website/src/components/Blockquote.tsx @@ -19,7 +19,7 @@ export const Blockquote: FunctionComponent<{
    diff --git a/website/src/css/pages/__case_studies.scss b/website/src/css/pages/__case_studies.scss index fc727ddc0de..e18932fb8a1 100644 --- a/website/src/css/pages/__case_studies.scss +++ b/website/src/css/pages/__case_studies.scss @@ -55,7 +55,7 @@ } &--border { - border-left: 3px solid; + border-left: 2px solid; } } } From 2e4b7345f896f98a5c1ad117be905013b1423b15 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Tue, 26 Apr 2022 10:55:08 -0500 Subject: [PATCH 30/43] white nav bar in code health --- website/src/pages/use-cases/code-health.tsx | 70 ++++++++++----------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index 557d56eda4c..35390680e95 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -166,43 +166,43 @@ const UseCasePage: FunctionComponent = props => ( 'Tackle refactoring efforts and tech debt from legacy systems with automated pull requests across your entire codebase to boost code health.', image: 'https://about.sourcegraph.com/sourcegraph-og.png', }} - className="use-cases-page" - heroAndHeaderClassName={`${styles.useCaseHeader} navbar-light`} + className="use-cases-page navbar-light" hero={ <> -
    -
    -
    -
    - -

    - Healthy code, happy teams -

    -
    - Improve code health with large-scale changes and track key initiatives across your - entire codebase. -
    -
    - - Request a demo - - - Try Sourcegraph now - +
    +
    +
    +
    + +

    + Healthy code, happy teams +

    +
    + Improve code health with large-scale changes and track key initiatives across your + entire codebase. +
    +
    + + Request a demo + + + Try Sourcegraph now + +
    From a568bc20086702e99b656951429007706bdb0128 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Tue, 26 Apr 2022 11:05:32 -0500 Subject: [PATCH 31/43] update other use case page nav bars --- website/src/pages/use-cases/code-health.tsx | 2 +- .../src/pages/use-cases/incident-response.tsx | 70 +++++----- website/src/pages/use-cases/index.tsx | 121 +++++++++--------- website/src/pages/use-cases/onboarding.tsx | 66 +++++----- .../src/pages/use-cases/vulnerabilities.tsx | 68 +++++----- 5 files changed, 167 insertions(+), 160 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index 35390680e95..c096e7b2db1 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -169,7 +169,7 @@ const UseCasePage: FunctionComponent = props => ( className="use-cases-page navbar-light" hero={ <> -
    +
    diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 819e8af89b3..9703f5c8753 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -150,43 +150,43 @@ const UseCasePage: FunctionComponent = props => ( 'Identify the root cause of an incident, understand its potential impact, fix the issue everywhere in your codebase. Incident response from Sourcegraph.', image: 'https://about.sourcegraph.com/sourcegraph-og.png', }} - className="use-cases-page" - heroAndHeaderClassName={`${styles.useCaseHeader} navbar-light`} + className="use-cases-page navbar-light" hero={ <> -
    -
    -
    -
    - -

    - Resolve incidents quickly and confidently -

    -
    - Identify the root cause of an incident, understand its potential impact on other - services, and fix the issue everywhere in your codebase so it won't reoccur. -
    -
    - - Request a demo - - - Try Sourcegraph now - +
    +
    +
    +
    + +

    + Resolve incidents quickly and confidently +

    +
    + Identify the root cause of an incident, understand its potential impact on other + services, and fix the issue everywhere in your codebase so it won't reoccur. +
    +
    + + Request a demo + + + Try Sourcegraph now + +
    diff --git a/website/src/pages/use-cases/index.tsx b/website/src/pages/use-cases/index.tsx index dc6d6cb9247..7ee2cf49327 100644 --- a/website/src/pages/use-cases/index.tsx +++ b/website/src/pages/use-cases/index.tsx @@ -19,65 +19,70 @@ export default ((props: any) => ( 'See how the most productive dev teams use Sourcegraph to build software you rely on. From remediating vulnerabilities to streamlining code reuse, our customers use Sourcegraph to solve big code problems.', image: 'https://about.sourcegraph.com/sourcegraph-og.png', }} - heroAndHeaderClassName={styles.headerAndHero} + className="use-cases-page navbar-light" hero={ -
    -
    -
    -

    Our customers move faster with Sourcegraph

    -

    - Companies of all sizes and in all industries use Sourcegraph universal code search to solve - big code problems. -

    -
    -
    -
    See how customers use Sourcegraph to
    -
    - - Find and fix security vulnerabilities - - - Accelerate developer onboarding - - - Resolve incidents faster - - - Streamline code reuse - - - Boost code health - +
    +
    +
    +
    +

    + Our customers move faster with Sourcegraph +

    +

    + Companies of all sizes and in all industries use Sourcegraph universal code search to + solve big code problems. +

    +
    +
    +
    See how customers use Sourcegraph to
    +
    + + Find and fix security vulnerabilities{' '} + + + + Accelerate developer onboarding + + + Resolve incidents faster + + + Streamline code reuse + + + Boost code health + +
    diff --git a/website/src/pages/use-cases/onboarding.tsx b/website/src/pages/use-cases/onboarding.tsx index c0d344b222b..d2988c719f3 100644 --- a/website/src/pages/use-cases/onboarding.tsx +++ b/website/src/pages/use-cases/onboarding.tsx @@ -132,41 +132,41 @@ const UseCasePage: FunctionComponent = props => ( 'Decrease time to first commit for new developers, help existing engineers master your codebase, and fast-track full codebase understanding.', image: 'https://about.sourcegraph.com/sourcegraph-og.png', }} - className="use-cases-page" - heroAndHeaderClassName={`${styles.useCaseHeader} navbar-light`} + className="use-cases-page navbar-light" hero={ <> -
    -
    -
    -
    - -

    Accelerate developer onboarding

    -
    - Decrease time to first commit for new developers, help existing engineers master your - codebase, and fast-track full codebase understanding. -
    -
    - - Request a demo - - - Try Sourcegraph now - +
    +
    +
    +
    + +

    Accelerate developer onboarding

    +
    + Decrease time to first commit for new developers, help existing engineers master + your codebase, and fast-track full codebase understanding. +
    +
    + + Request a demo + + + Try Sourcegraph now + +
    diff --git a/website/src/pages/use-cases/vulnerabilities.tsx b/website/src/pages/use-cases/vulnerabilities.tsx index af914bb0a18..14fa682c830 100644 --- a/website/src/pages/use-cases/vulnerabilities.tsx +++ b/website/src/pages/use-cases/vulnerabilities.tsx @@ -175,41 +175,43 @@ const UseCasePage: FunctionComponent = props => ( 'Search across all your repositories to find and resolve vulnerabilities in minutes, not days.', image: 'https://about.sourcegraph.com/sourcegraph-og.png', }} - className="use-cases-page" - heroAndHeaderClassName={`${styles.useCaseHeader} navbar-light`} + className="use-cases-page navbar-light" hero={ <> -
    -
    -
    -
    - -

    Find and fix security vulnerabilities

    -
    - Search across all your repositories to find and resolve vulnerabilities in minutes, not - days. -
    -
    - - Request a demo - - - Try Sourcegraph now - +
    +
    +
    +
    + +

    + Find and fix security vulnerabilities +

    +
    + Search across all your repositories to find and resolve vulnerabilities in minutes, + not days. +
    +
    + + Request a demo + + + Try Sourcegraph now + +
    From 2154e0ad6578e3b8bd2266fe056172963c8899de Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Tue, 26 Apr 2022 15:30:48 -0500 Subject: [PATCH 32/43] copy updates from marketing --- .../src/pages/use-cases/incident-response.tsx | 19 +++++++++++-------- .../src/pages/use-cases/vulnerabilities.tsx | 5 ++++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index ff254e07e1e..8f017b0fd2b 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -1,5 +1,5 @@ import { Link, PageProps } from 'gatsby' -import CrosshairsGpsIcon from 'mdi-react/CrosshairsGpsIcon' +import MagnifyIcon from 'mdi-react/MagnifyIcon' import ClockTimeThreeOutlineIcon from 'mdi-react/ClockTimeThreeOutlineIcon' import WebIcon from 'mdi-react/WebIcon' import React, { FunctionComponent, ReactNode } from 'react' @@ -68,7 +68,7 @@ const items = [

    Visualize fixes in progress and track their deployment. With{' '} Code Insights, get visibility into remediation efforts and - share progress with team leaders and customers. + share progress with team leaders and and all of your customers.

    } /> @@ -79,7 +79,7 @@ const items = [ buttonLabel: 'Monitor for the introduction of unsafe code', text: ( Close the loop on your incident response efforts. After finding the root cause, use{' '} @@ -118,7 +118,7 @@ const blogListItems = [ { title: 'Log4j Log4Shell 0-day: find, fix, and track affected code', description: - 'In the biggest security vulnerability incident since Heartbleed, Sourcegraph co-founder and CEO Quinn Slack shared how you can find affected code, automate fixes, and track progress.', + 'In the biggest security vulnerability incident since Heartbleed, Sourcegraph co-founder and CEO Quinn Slack shares how you can find affected code, automate fixes, and track progress.', type: 'Blog post', image: 'https://sourcegraphstatic.com/blog/log4j/log4j-blog-thumbnail.png', href: '/blog/log4j-log4shell-0-day', @@ -126,7 +126,7 @@ const blogListItems = [ { title: `The real weakest link in software supply chain security (it's not open source)`, description: - 'Using open source code can jump-start development but it can also expose you to security vulnerabilities. In this post, learn how to design an effective vulnerability management process that can make dependencies visible and mitigation less time-consuming.', + 'Using open source code can jump start development, but it can also expose you to security vulnerabilities. In this post, learn how to design an effective vulnerability management process that can make dependencies visible and mitigation less time-consuming.', type: 'Blog post', image: 'https://storage.googleapis.com/sourcegraph-assets/blog/third-party-open-source-vulnerabilities.png', href: '/blog/real-weakest-link-in-software-supply-chain-security', @@ -134,7 +134,7 @@ const blogListItems = [ { title: 'How to remove secrets from your codebase', description: - 'Back in early 2021, Sourcegraph stored infrastructure and service passwords in private repositories. Security engineer André Eleuterio moved every secret to a secure vault and used code search to ensure the move was successful and complete.', + 'In early 2021, Sourcegraph stored infrastructure and service passwords in private repositories. Learn how Sourcegraph Security Engineer André Eleuterio moved every secret to a secure vault and used Code Search to ensure the move was successful and complete.', type: 'Blog post', image: 'https://sourcegraphstatic.com/blog/securing-sourcegraph-eliminating-secrets.png', href: '/blog/eliminate-secrets-from-codebase-with-universal-code-search', @@ -203,7 +203,7 @@ const UseCasePage: FunctionComponent = props => (
    - +

    Assess incidents quickly

    Pinpoint the code responsible for the incident and find the root cause in your codebase. @@ -239,7 +239,10 @@ const UseCasePage: FunctionComponent = props => (

    Current tools don't enable teams to quickly get to the root cause of an incident and ensure - it doesn't reoccur. What does that mean for you? + it doesn't reoccur. +

    +

    + What does that mean for you?

    • diff --git a/website/src/pages/use-cases/vulnerabilities.tsx b/website/src/pages/use-cases/vulnerabilities.tsx index af914bb0a18..f2b5385b5b7 100644 --- a/website/src/pages/use-cases/vulnerabilities.tsx +++ b/website/src/pages/use-cases/vulnerabilities.tsx @@ -262,7 +262,10 @@ const UseCasePage: FunctionComponent = props => (

      Existing tooling doesn't enable teams to be agile and effective when responding to security - vulnerabilities. What does that mean for you? + vulnerabilities. +

      +

      + What does that mean for you?

      • Finding vulnerabilities scattered across codebases takes extra time and resources.
      • From d212c68480e7fb0d23dd3ea35807cbc8ec40b8c7 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 27 Apr 2022 11:47:28 -0500 Subject: [PATCH 33/43] center cloudflare logo --- website/src/pages/use-cases/incident-response.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 8f017b0fd2b..92eed79053e 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -279,7 +279,7 @@ const UseCasePage: FunctionComponent = props => ( > Read the Cloudflare case study - +
    From 8e1097f1b0f9a7a75533df081322fef5bbd94493 Mon Sep 17 00:00:00 2001 From: zlonko Date: Wed, 27 Apr 2022 16:48:53 +0000 Subject: [PATCH 34/43] squash! Prettier --- website/src/pages/use-cases/incident-response.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 92eed79053e..a95dcfb1081 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -279,7 +279,10 @@ const UseCasePage: FunctionComponent = props => ( > Read the Cloudflare case study - +
    From 9c910181605bfc1f2d8362378ae7a6bfe6a02429 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 27 Apr 2022 11:59:37 -0500 Subject: [PATCH 35/43] What does that mean for you, copy update --- website/src/pages/use-cases/incident-response.tsx | 5 +---- website/src/pages/use-cases/onboarding.tsx | 5 +---- website/src/pages/use-cases/vulnerabilities.tsx | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 92eed79053e..729283c2f30 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -239,10 +239,7 @@ const UseCasePage: FunctionComponent = props => (

    Current tools don't enable teams to quickly get to the root cause of an incident and ensure - it doesn't reoccur. -

    -

    - What does that mean for you? + it doesn't reoccur. What does that mean for you?

    • diff --git a/website/src/pages/use-cases/onboarding.tsx b/website/src/pages/use-cases/onboarding.tsx index c0d344b222b..a6153649df6 100644 --- a/website/src/pages/use-cases/onboarding.tsx +++ b/website/src/pages/use-cases/onboarding.tsx @@ -217,10 +217,7 @@ const UseCasePage: FunctionComponent = props => (

      Developer onboarding is slow and expensive

      Current tools and practices don't enable teams to onboard developers effectively or - efficiently. -

      -

      - What does that mean for you? + efficiently. What does that mean for you?

      • New developers are left confused, struggling in front of an opaque codebase.
      • diff --git a/website/src/pages/use-cases/vulnerabilities.tsx b/website/src/pages/use-cases/vulnerabilities.tsx index f2b5385b5b7..af914bb0a18 100644 --- a/website/src/pages/use-cases/vulnerabilities.tsx +++ b/website/src/pages/use-cases/vulnerabilities.tsx @@ -262,10 +262,7 @@ const UseCasePage: FunctionComponent = props => (

        Existing tooling doesn't enable teams to be agile and effective when responding to security - vulnerabilities. -

        -

        - What does that mean for you? + vulnerabilities. What does that mean for you?

        • Finding vulnerabilities scattered across codebases takes extra time and resources.
        • From 40377bbbf5ce863032b3a8cdf50b15d34aa23638 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 27 Apr 2022 12:04:45 -0500 Subject: [PATCH 36/43] revert logo size --- website/src/pages/use-cases/incident-response.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index adc0849bec7..4ee042fa6ff 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -278,7 +278,7 @@ const UseCasePage: FunctionComponent = props => (
    From 9c9cbded90a3ca4186c5f470eb5f4c80981c5a64 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 27 Apr 2022 14:09:17 -0500 Subject: [PATCH 37/43] copy update --- website/src/pages/use-cases/incident-response.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 4ee042fa6ff..a079433022d 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -76,7 +76,7 @@ const items = [ itemClass: 'd-none', }, { - buttonLabel: 'Monitor for the introduction of unsafe code', + buttonLabel: 'Monitor for unsafe code', text: ( Date: Thu, 28 Apr 2022 12:25:57 -0500 Subject: [PATCH 38/43] spacing adjustment --- website/src/pages/use-cases/incident-response.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index ff254e07e1e..2a334f6ed83 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -10,7 +10,7 @@ import { BlogListItem } from '../../components/BlogListItem' import { QuoteCarousel } from '../../components/QuoteCarousel' import CustomCarousel from '../../components/CustomCarousel' import { ContentSection } from '../../components/content/ContentSection' -import { CustomerLogosSectionAnimated } from '../../components/product/CustomerLogosSectionAnimated' +import { CustomerLogos } from '../../components/CustomerLogos' import { buttonStyle, buttonLocation } from '../../tracking' import styles from './useCases.module.scss' @@ -302,11 +302,11 @@ const UseCasePage: FunctionComponent = props => (
    -
    +
    -
    -
    -

    Get started with Sourcegraph

    +
    +
    +

    Get started with Sourcegraph

    Respond to incidents with confidence and speed, and remediate issues at their root to ensure they don't reoccur. @@ -329,7 +329,10 @@ const UseCasePage: FunctionComponent = props => (

    - + +
    + +
    From 56bc8c06bad28b0065caef582fc7e78560938741 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Thu, 28 Apr 2022 12:52:33 -0500 Subject: [PATCH 39/43] swap in new CustomerLogos component --- website/src/pages/use-cases/code-health.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index c096e7b2db1..dada5a692d1 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -11,9 +11,8 @@ import { BlogListItem } from '../../components/BlogListItem' import { QuoteCarousel } from '../../components/QuoteCarousel' import CustomCarousel from '../../components/CustomCarousel' import { ContentSection } from '../../components/content/ContentSection' -import { CustomerLogosSectionAnimated } from '../../components/product/CustomerLogosSectionAnimated' +import { CustomerLogos } from '../../components/CustomerLogos' import { buttonStyle, buttonLocation } from '../../tracking' - import styles from './useCases.module.scss' const CarouselItem: FunctionComponent<{ header: string; text: ReactNode }> = ({ header, text }) => ( @@ -306,11 +305,11 @@ const UseCasePage: FunctionComponent = props => (
    -
    +
    -
    -
    -

    Get started with Sourcegraph

    +
    +
    +

    Get started with Sourcegraph

    Give your team the tools they need to build a healthier codebase.

    @@ -327,7 +326,10 @@ const UseCasePage: FunctionComponent = props => (
    - + +
    + +
    From 089f52e14692fe31251eb75a2cafa6be21b2360c Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Thu, 28 Apr 2022 14:47:00 -0500 Subject: [PATCH 40/43] qa feedback --- website/src/pages/use-cases/code-health.tsx | 17 ++++++++++------- .../src/pages/use-cases/incident-response.tsx | 2 +- website/src/pages/use-cases/onboarding.tsx | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index dada5a692d1..ee8c7fd0cba 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -107,7 +107,7 @@ const items = [ const quoteCarouselItems = [ { header: 'Indeed improves code health at scale', - quote: 'The ability to automate downstream changes that Sourcegraph Batch Changes provides is a key capability for reducing the hidden burden of updates pushed across teams and enabling us to increase our engineering velocity.', + quote: `On average, I'd say that for every automated merge request that we're able to merge we save an hour…if we are doing several thousand automated merges in a year, we're saving several employee's worth of time.`, by: 'Jared Hodge, Senior Manager, Developer Experience at Indeed', logoImage: '/external-logos/indeed-logo.svg', linkText: 'Read the case study', @@ -124,7 +124,7 @@ const quoteCarouselItems = [ }, { header: 'Workiva efficiently pays down tech debt', - quote: `As an organization that values paying down tech debt, Workiva’s Client Platform team started using Sourcegraph to help them efficiently propagate updates to dependencies across all of their repositories without any ongoing maintenance.`, + quote: `As an organization that values paying down tech debt, Workiva's Client Platform team started using Sourcegraph to help them efficiently propagate updates to dependencies across all of their repositories without any ongoing maintenance.`, logoImage: '/external-logos/workiva-vector-logo.svg', linkText: 'Read the case study', link: '/case-studies/workiva-automates-large-scale-code-changes', @@ -217,7 +217,7 @@ const UseCasePage: FunctionComponent = props => (
    -
    +

    Find unhealthy code

    @@ -225,7 +225,7 @@ const UseCasePage: FunctionComponent = props => ( patterns, and more across all your repositories.

    -
    +

    Remediate code health issues

    @@ -233,7 +233,7 @@ const UseCasePage: FunctionComponent = props => ( with automated pull requests across your entire codebase.

    -
    +

    Monitor code health initiatives

    @@ -252,8 +252,8 @@ const UseCasePage: FunctionComponent = props => (

    Improving code health can be daunting

    Engineering teams need to track and measure code quality consistently to monitor code health - across their entire codebase, but current tools don't make this easy.{' '} - What does that mean for you? + across their entire codebase, but current tools don't make this easy. What does that mean + for you?

    • @@ -323,6 +323,9 @@ const UseCasePage: FunctionComponent = props => ( > Request a demo + +

      Explore other use cases

      +
    diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 15188bd5d4d..f5de90737b7 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -201,7 +201,7 @@ const UseCasePage: FunctionComponent = props => ( Identify the root cause of an incident and fix it everywhere, fast
    -
    +

    Assess incidents quickly

    diff --git a/website/src/pages/use-cases/onboarding.tsx b/website/src/pages/use-cases/onboarding.tsx index 5d30ad364a6..fcf0c824c04 100644 --- a/website/src/pages/use-cases/onboarding.tsx +++ b/website/src/pages/use-cases/onboarding.tsx @@ -180,7 +180,7 @@ const UseCasePage: FunctionComponent = props => ( Make your codebase accessible for your entire team
    -
    +

    Find answers across all repositories

    From f76e7e7312266c06b314774d58a86f839c512089 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Thu, 28 Apr 2022 17:43:41 -0500 Subject: [PATCH 41/43] progressive spacing on Get Started, from Code Reuse --- website/src/pages/use-cases/incident-response.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index 2a334f6ed83..ba37b2ff60e 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -157,7 +157,7 @@ const UseCasePage: FunctionComponent = props => (
    -
    +

    Resolve incidents quickly and confidently @@ -305,16 +305,16 @@ const UseCasePage: FunctionComponent = props => (
    -
    +

    Get started with Sourcegraph

    Respond to incidents with confidence and speed, and remediate issues at their root to ensure they don't reoccur.

    -
    +
    Date: Thu, 28 Apr 2022 18:00:40 -0500 Subject: [PATCH 42/43] progressive spacing from Code Reuse --- website/src/pages/use-cases/code-health.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index ee8c7fd0cba..c2cbfecb719 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -171,7 +171,7 @@ const UseCasePage: FunctionComponent = props => (
    -
    +

    Healthy code, happy teams @@ -308,13 +308,13 @@ const UseCasePage: FunctionComponent = props => (
    -
    +

    Get started with Sourcegraph

    Give your team the tools they need to build a healthier codebase.

    -
    +
    Date: Tue, 3 May 2022 12:45:14 -0500 Subject: [PATCH 43/43] copy edit to Track and Improve section --- website/src/pages/use-cases/code-health.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/pages/use-cases/code-health.tsx b/website/src/pages/use-cases/code-health.tsx index c2cbfecb719..4976a093b31 100644 --- a/website/src/pages/use-cases/code-health.tsx +++ b/website/src/pages/use-cases/code-health.tsx @@ -229,16 +229,16 @@ const UseCasePage: FunctionComponent = props => (

    Remediate code health issues

    - Efficiently tackle refactoring efforts and tech debt from legacy systems and acquisitions - with automated pull requests across your entire codebase. + Tackle refactoring efforts and tech debt from legacy systems and acquisitions with automated + pull requests across your entire codebase.

    Monitor code health initiatives

    - Stay on top of changes to your code health. Monitor and measure code health initiatives and - get actionable insights into the impact of large-scale changes. + Stay on top of code health changes. Monitor and measure code health initiatives and get + actionable insights into the impact of large-scale changes.