From a5ac80c94e34479b51f1c798aff33d79aeabe805 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Wed, 13 Apr 2022 11:55:02 -0500 Subject: [PATCH 01/31] 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/31] 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/31] 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/31] 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/31] 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/31] 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/31] 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/31] 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/31] 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/31] 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/31] 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/31] 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 20:13:21 -0500 Subject: [PATCH 13/31] 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 14/31] 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 15/31] 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: Fri, 22 Apr 2022 12:57:45 -0500 Subject: [PATCH 16/31] 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 17/31] 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 18/31] 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 2154e0ad6578e3b8bd2266fe056172963c8899de Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Tue, 26 Apr 2022 15:30:48 -0500 Subject: [PATCH 19/31] 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 20/31] 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 21/31] 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 22/31] 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 23/31] 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 24/31] 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 25/31] 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 f76e7e7312266c06b314774d58a86f839c512089 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Thu, 28 Apr 2022 17:43:41 -0500 Subject: [PATCH 26/31] 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 17:49:41 -0500 Subject: [PATCH 27/31] add progressive spacing in Get Started section --- 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 7f53f1db5e7..53e6b28cfe3 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 @@ -308,16 +308,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: Mon, 2 May 2022 09:49:09 -0500 Subject: [PATCH 28/31] update 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 ba37b2ff60e..49aa801ed10 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -276,7 +276,7 @@ const UseCasePage: FunctionComponent = props => ( > Read the Cloudflare case study - +
    From 7b1d034fd40229ea2797ae99f8867ba751e67467 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Mon, 2 May 2022 10:48:55 -0500 Subject: [PATCH 29/31] update logo path --- 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 53e6b28cfe3..ba2753dcdb5 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -277,7 +277,7 @@ const UseCasePage: FunctionComponent = props => ( Read the Cloudflare case study
    From 6c4bcba9f29cedb42c8d1e79732ac339bb2055c3 Mon Sep 17 00:00:00 2001 From: zlonko Date: Mon, 2 May 2022 15:50:20 +0000 Subject: [PATCH 30/31] squash! Prettier --- website/src/pages/use-cases/incident-response.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/website/src/pages/use-cases/incident-response.tsx b/website/src/pages/use-cases/incident-response.tsx index ba2753dcdb5..876e1a7127a 100644 --- a/website/src/pages/use-cases/incident-response.tsx +++ b/website/src/pages/use-cases/incident-response.tsx @@ -276,10 +276,7 @@ const UseCasePage: FunctionComponent = props => ( > Read the Cloudflare case study - +

    From b96af3b066195744642181ac2f5c8a71a9f40c60 Mon Sep 17 00:00:00 2001 From: Tim Zielonko Date: Mon, 9 May 2022 13:51:22 -0500 Subject: [PATCH 31/31] swap ctas on code search page header --- website/src/pages/code-search.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/src/pages/code-search.tsx b/website/src/pages/code-search.tsx index 1abd9aaf9e7..955d4a93407 100644 --- a/website/src/pages/code-search.tsx +++ b/website/src/pages/code-search.tsx @@ -35,21 +35,21 @@ export const CodeSearchPage: FunctionComponent = props => ( data-button-style={buttonStyle.primary} data-button-location={buttonLocation.hero} data-button-type="cta" - to="/get-started" - title="Use this if you want to search your (or your company's) code, invite teammates, and try all the features." + to="/demo" + title="Request a demo." > - Deploy locally + Request a demo - - Search open source - + Try Sourcegraph now +