Skip to content
This repository was archived by the owner on Sep 11, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c45a2db
Code reuse page start
Apr 13, 2022
f25fa30
UseCase index CodeReuse link
Apr 13, 2022
f3f4bd9
all Code Reuse content
Apr 14, 2022
c68cfb0
Port in ThreeUpText component
Apr 14, 2022
0b8b058
Invoke ThreeUpText to nutanix casestudy & onboarding pages
Apr 14, 2022
bc850c7
Flip CTA buttons
Apr 19, 2022
daf3c93
Spacing adjustments
Apr 19, 2022
4c08d58
squash! Prettier
st0nebraker Apr 19, 2022
12e045a
Merge branch 'main' into feature/code-reuse-usecase
Apr 26, 2022
03a5ad0
Img alt tag, more progressive sizing
Apr 26, 2022
6ec5dbd
resolve merge conflict
Apr 26, 2022
a39184b
squash! Prettier
st0nebraker Apr 26, 2022
22d9014
Keep new BlogListItem alt tag
Apr 26, 2022
2683eb1
Merge branch 'feature/code-reuse-usecase' of github.com:sourcegraph/a…
Apr 26, 2022
87b115a
Require alt tag for BlogItem image
Apr 27, 2022
aaa7b79
Make CustomCarousel responsive center to md screens
Apr 27, 2022
0c8c873
squash! Prettier
st0nebraker Apr 27, 2022
1cfd491
Unbold 'what does that mean...'
Apr 28, 2022
f0cbd4e
BlogListItem Image interface
Apr 28, 2022
6145ee5
Center 'Get started' h1
Apr 28, 2022
8b17788
Make CustomCarousel progressive to md screens
Apr 28, 2022
d3b1ac7
Add missing explore use cases link
Apr 28, 2022
c523fd6
Use Case/ Onboarding & Vulnerabilities progressive btn sizes
Apr 28, 2022
9da11dc
Resolve merge conflict
Apr 28, 2022
96fac4f
Add btn tracking
Apr 28, 2022
e19ab6c
QA feedback: unify icon weight & text copy change
May 2, 2022
ca7d660
Resolve merge conflict
May 2, 2022
310999b
Cont. text content change
May 2, 2022
bc1a500
squash! Prettier
st0nebraker May 2, 2022
8f53623
Use ThreeUpText component on Incident-Response use case
May 2, 2022
7cf516d
Merge branch 'feature/code-reuse-usecase' of github.com:sourcegraph/a…
May 2, 2022
a1171c3
squash! Prettier
st0nebraker May 2, 2022
bde55df
Resolve merge conflicts
May 4, 2022
301cb3a
Use ThreeUpText in code-health use-case
May 4, 2022
88094c7
Use updated Blockquote component in use case
May 4, 2022
8ea9db5
Merge branch 'feature/code-reuse-usecase' of github.com:sourcegraph/a…
May 4, 2022
74de240
squash! Prettier
st0nebraker May 4, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions website/src/components/BlogListItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@ interface Blog {
description: string
type: string
href: string
image?: string
img?: Image
}

interface Image {
src: string
alt: string
}

export const BlogListItem: FunctionComponent<Props> = ({ blog }) => (
Expand All @@ -22,7 +27,7 @@ export const BlogListItem: FunctionComponent<Props> = ({ blog }) => (
<p>{blog.description}</p>
</div>
<div className="col-sm-4 col-md-3 d-flex align-items-center">
{blog.image && <img className="flex-1 w-100" src={blog.image} />}
{blog.img && <img className="flex-1 w-100" alt={blog.img.alt} src={blog.img.src} />}
</div>
</div>
)
2 changes: 1 addition & 1 deletion website/src/components/CustomCarousel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ interface CarouselItem {
const CustomCarousel: FunctionComponent<CarouselProps> = props => {
const carouselMainStyles = 'd-flex flex-wrap'
const carouselRightPanelStyles =
'col-lg-6 col-md-8 col-sm-12 mt-lg-6 ml-md-6 px-lg-0 d-flex align-items-center align-items-lg-start'
'col-lg-6 col-md-10 col-sm-12 mt-lg-6 ml-md-6 px-lg-0 d-flex align-items-center align-items-lg-start text-lg-left text-md-center'
const { items, autoAdvance, title } = props
const carouselHook = useCarousel(items, autoAdvance ?? false)
const carouselItems = carouselHook.carouselItems.items as CarouselItem[]
Expand Down
2 changes: 1 addition & 1 deletion website/src/components/Layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export default class Layout extends React.PureComponent<LayoutProps> {
isBlog={isBlog}
isProductPage={isProductPage}
minimal={this.props.minimal}
className={`${this.props.className || ''}`}
className={this.props.className || ''}
hideGetStartedButton={this.props.hideGetStartedButton}
/>
{this.props.hero}
Expand Down
28 changes: 28 additions & 0 deletions website/src/components/ThreeUpText.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import React, { FunctionComponent } from 'react'

interface Item {
icon?: React.ReactNode
subtitle: React.ReactNode
description: string
}

interface Props {
title: string
items: Item[]
}

export const ThreeUpText: FunctionComponent<Props> = ({ title, items }) => (
<section className="row mx-lg-0 mx-4">
<h1 className="text-center col-12 max-w-lg-550 mx-auto mt-6 mb-lg-4 px-0 font-weight-bold">{title}</h1>

<div className="mb-6 d-flex flex-wrap justify-content-between">
{items.map((item, index) => (
<div key={`item-${index + 1}-${item.description}`} className="col-12 col-lg-4 text-center pt-5">
{item.icon && item.icon}
{item.subtitle}
<p className="max-w-md-400 mx-auto">{item.description}</p>
</div>
))}
</div>
</section>
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { PageProps, Link } from 'gatsby'
import slugify from 'slugify'

import { Blockquote, BlockquoteWithLogoTop } from '../../components/Blockquote'
import { ThreeUpText } from '../../components/ThreeUpText'
import { CaseStudyJumbotron, AuthorBio } from '../../components/content/CaseStudyPage'
import { CaseStudyCard, CASESTUDIES } from '../../components/product/CaseStudyCard'
import { ContentSection } from '../../components/content/ContentSection'
Expand All @@ -13,6 +14,23 @@ import ChartBarIcon from 'mdi-react/ChartBarIcon'
import CheckCircleOutlineIcon from 'mdi-react/CheckCircleOutlineIcon'
import FlagOutlineIcon from 'mdi-react/FlagOutlineIcon'

const threeUpTextItems = [
{
subtitle: <h4 className="pb-3 mx-auto max-w-300 font-weight-bold text-curious-blue">{'<'} 5 min</h4>,
description:
'Nutanix was able to see where JMSAppender existed, fix it, and send out a release in less than 5 minutes.',
},
{
subtitle: <h4 className="pb-3 mx-auto max-w-300 font-weight-bold text-curious-blue">4 days</h4>,
description:
'Nutanix was able to deliver patches to its customers that fully remediated the Log4j vulnerability.',
},
{
subtitle: <h4 className="pb-3 mx-auto max-w-300 font-weight-bold text-curious-blue">100% confidence</h4>,
description: 'Nutanix was able to confidently identify every instance of Log4j across its sprawling codebase.',
},
]

const NutanixCaseStudy: FunctionComponent<PageProps> = props => (
<Layout
location={props.location}
Expand All @@ -36,7 +54,7 @@ const NutanixCaseStudy: FunctionComponent<PageProps> = props => (

<ContentSection color="white" className="py-6 text-center max-w-600">
<BlockquoteWithLogoTop
quote={`Sourcegraph was the right product at the right time.`}
quote="Sourcegraph was the right product at the right time."
by="Jon Kohler, Technical Director of Solution Engineering at Nutanix"
logoHref="https://nutanix.com"
logoAlt="Nutanix"
Expand Down Expand Up @@ -254,33 +272,10 @@ const NutanixCaseStudy: FunctionComponent<PageProps> = props => (
</section>
</ContentSection>

<div className="bg-gradient-venus-radial py-lg-7 p-5">
<section className="container-xl">
<h2 className="text-center pb-5 display-3 font-weight-bold">Results</h2>
<div className="mb-5 row">
<div className="col-sm-12 col-md-4 text-center">
<h3 className="pb-3 font-weight-bold text-curious-blue">{'<'} 5 min</h3>
<p className="max-w-md-400 max-w-lg-250 max-w-xl-250 mx-auto">
Nutanix was able to see where JMSAppender existed, fix it, and send out a release in
less than 5 minutes.
</p>
</div>
<div className="col-sm-12 col-md-4 text-center">
<h3 className="pb-3 font-weight-bold text-curious-blue">4 days</h3>
<p className="max-w-md-400 max-w-lg-250 max-w-xl-250 mx-auto">
Nutanix was able to deliver patches to its customers that fully remediated the Log4j
vulnerability.
</p>
</div>
<div className="col-sm-12 col-md-4 text-center">
<h3 className="pb-3 font-weight-bold text-curious-blue">100% confidence</h3>
<p className="max-w-md-400 max-w-lg-250 max-w-xl-250 mx-auto">
Nutanix was able to confidently identify every instance of Log4j across its sprawling
codebase.
</p>
</div>
</div>
</section>
<div className="bg-gradient-venus-radial py-5">
<ContentSection className="my-lg-5">
<ThreeUpText title="Results" items={threeUpTextItems} />
</ContentSection>
</div>

<ContentSection color="white" className="py-6 max-w-700 col-xl-5">
Expand Down
15 changes: 12 additions & 3 deletions website/src/pages/code-insights.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -267,21 +267,30 @@ const blogListItems = [
description:
'How our Frontend Platform team used codemods to automate a challenging global migration to CSS modules, and Code Insights to track and communicate progress.',
type: 'Blog post',
image: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/migrating-to-css-modules.png',
img: {
src: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/migrating-to-css-modules.png',
alt: 'Migrating to CSS modules with codemods and code insights blog thumbnail',
},
href: '/blog/migrating-to-css-modules-with-codemods-and-code-insights',
},
{
title: 'Announcing Code Insights: analytics for engineering teams to understand and visualize their codebase over time',
description: 'Learn about why we built Code Insights from our CEO.',
type: 'Blog post',
image: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/announcement-header.png',
img: {
src: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/announcement-header.png',
alt: 'Announcing code insights blog thumbnail',
},
href: '/blog/announcing-code-insights',
},
{
title: 'Dive into documentation',
description: 'Learn everything you need to know about Code Insights.',
type: 'Docs',
image: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/code-insights-docs.png',
img: {
src: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/code-insights-docs.png',
alt: 'Code insights documentation thumbnail',
},
href: 'https://docs.sourcegraph.com/code_insights',
},
]
Expand Down
10 changes: 8 additions & 2 deletions website/src/pages/partner-podcast.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,21 @@ const resourceItems = [
description:
'Download the guide to developer onboarding and learn how to shift to a culture of continuous onboarding in your engineering organization.',
type: 'Guide',
image: '/guides/dev-onboarding/thumbnail.png',
img: {
src: '/guides/dev-onboarding/thumbnail.png',
alt: 'Continuous developer onboarding guide thumbnail',
},
href: '/guides/continuous-developer-onboarding',
},
{
title: 'Nutanix fixed Log4j quickly and confidently with Sourcegraph',
description:
'See how Nutanix was able to confidently identify every instance of Log4j across its sprwaling codebase and deliver patches to its customers that fully remediated the vulnerability within 4 days.',
type: 'Case study',
image: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/code-insights-docs.png',
img: {
src: 'https://storage.googleapis.com/sourcegraph-assets/blog/code-insights-ga-blogs/code-insights-docs.png',
alt: 'Nutanix fixed Log4j quickly with Sourcegraph case study thumbnail',
},
href: '/case-studies/nutanix-fixed-log4j-with-sourcegraph',
},
]
Expand Down
58 changes: 24 additions & 34 deletions website/src/pages/use-cases/code-health.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { QuoteCarousel } from '../../components/QuoteCarousel'
import CustomCarousel from '../../components/CustomCarousel'
import { ContentSection } from '../../components/content/ContentSection'
import { CustomerLogos } from '../../components/CustomerLogos'
import { ThreeUpText } from '../../components/ThreeUpText'
import { buttonStyle, buttonLocation } from '../../tracking'
import styles from './useCases.module.scss'

Expand Down Expand Up @@ -156,6 +157,27 @@ const blogListItems = [
},
]

const threeUpTextItems = [
{
icon: <MagnifyIcon className="mb-4 text-blurple" size={40} />,
subtitle: <h4 className="pb-3 mx-auto max-w-350 font-weight-bold">Find unhealthy code</h4>,
description:
'Build a healthier codebase by finding references to deprecated services, libraries, URL patterns, and more across all your repositories.',
},
{
icon: <WrenchOutlineIcon className="mb-4 text-blurple" size={40} />,
subtitle: <h4 className="pb-3 mx-auto max-w-350 font-weight-bold">Remediate code health issues</h4>,
description:
'Tackle refactoring efforts and tech debt from legacy systems and acquisitions with automated pull requests across your entire codebase.',
},
{
icon: <ClipBoardPulseOutlineIcon className="mb-4 text-blurple" size={40} />,
subtitle: <h4 className="pb-3 mx-auto max-w-350 font-weight-bold">Monitor code health initiatives</h4>,
description:
'Stay on top of code health changes. Monitor and measure code health initiatives and get actionable insights into the impact of large-scale changes.',
},
]

const UseCasePage: FunctionComponent<PageProps> = props => (
<Layout
location={props.location}
Expand Down Expand Up @@ -210,39 +232,7 @@ const UseCasePage: FunctionComponent<PageProps> = props => (
}
>
<ContentSection className="my-lg-5">
<div className="row mx-lg-0 mx-4">
<div className="d-flex justify-content-center w-100 mt-7 mb-lg-4 mb-0">
<h1 className="text-center font-weight-bold col-lg-10 px-lg-8">
Track and improve code health across your entire codebase
</h1>
</div>
<div className="d-flex flex-column flex-lg-row mt-lg-4 my-6">
<div className="col-lg-4 pr-lg-5 pl-lg-0 text-center mb-4">
<MagnifyIcon className="mb-4 text-blurple" size={40} />
<h4 className="font-weight-bold">Find unhealthy code</h4>
<p>
Build a healthier codebase by finding references to deprecated services, libraries, URL
patterns, and more across all your repositories.
</p>
</div>
<div className="col-lg-4 text-center mb-4">
<WrenchOutlineIcon className="mb-4 text-blurple" size={40} />
<h4 className="font-weight-bold">Remediate code health issues</h4>
<p>
Tackle refactoring efforts and tech debt from legacy systems and acquisitions with automated
pull requests across your entire codebase.
</p>
</div>
<div className="col-lg-4 pl-lg-5 pr-lg-0 text-center mb-4">
<ClipBoardPulseOutlineIcon className="mb-4 text-blurple" size={40} />
<h4 className="font-weight-bold">Monitor code health initiatives</h4>
<p>
Stay on top of code health changes. Monitor and measure code health initiatives and get
actionable insights into the impact of large-scale changes.
</p>
</div>
</div>
</div>
<ThreeUpText title="Track and improve code health across your entire codebase" items={threeUpTextItems} />
</ContentSection>

<div className="bg-gradient-venus-radial">
Expand Down Expand Up @@ -272,7 +262,7 @@ const UseCasePage: FunctionComponent<PageProps> = props => (
</div>
<div className="col-lg-5 mt-lg-6 mt-5">
<Blockquote
quote={`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.`}
quote="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."
by="Justin Phillips, Software Engineer at Lyft"
logoImage="/external-logos/lyft-logo.svg"
logoAlt="Lyft"
Expand Down
Loading