diff --git a/package.json b/package.json index 50dac0df..751aaa94 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "mdi-react": "^8.2.0", "prettier": "^2.5.1", "react-bootstrap": "1.6.1", + "react-spring": "9.4.2", "sass": "^1.49.7", "typescript": "4.5.5" } diff --git a/public/external-logos/mercado-libre.svg b/public/external-logos/mercado-libre.svg new file mode 100644 index 00000000..15897e60 --- /dev/null +++ b/public/external-logos/mercado-libre.svg @@ -0,0 +1 @@ + diff --git a/src/pages/404/404.module.scss b/src/pages/404/404.module.scss new file mode 100644 index 00000000..6f0f8f67 --- /dev/null +++ b/src/pages/404/404.module.scss @@ -0,0 +1,24 @@ +.errorPage { + flex: 1 0 auto; + padding: 15% 4rem 25% 4rem; + background: url('/c-sprinkles-blank.svg'); + background-size: cover; +} + +.circle { + height: 8rem; + width: 8rem; + margin: 0 auto; + background: #afbcd4; +} + +.icon { + height: 8rem; + width: 8rem; + + svg { + height: 8rem; + width: 8rem; + fill: #e4e9f1; + } +} diff --git a/src/pages/404/index.tsx b/src/pages/404/index.tsx new file mode 100644 index 00000000..3806d6cb --- /dev/null +++ b/src/pages/404/index.tsx @@ -0,0 +1,23 @@ +import SignDirectionIcon from 'mdi-react/SignDirectionIcon' +import React from 'react' + +import { Layout } from '@components' + +import styles from './404.module.scss' + +const Custom404: React.FunctionComponent = () => ( + +
+
+
+ +
+
+ +

404: Not Found

+

Sorry, the requested URL was not found.

+
+
+) + +export default Custom404 diff --git a/src/pages/use-cases/index.tsx b/src/pages/use-cases/index.tsx new file mode 100644 index 00000000..8baaf275 --- /dev/null +++ b/src/pages/use-cases/index.tsx @@ -0,0 +1,338 @@ +import ArrowRightBoxIcon from 'mdi-react/ArrowRightBoxIcon' +import ArrowRightIcon from 'mdi-react/ArrowRightIcon' +import Link from 'next/link' +import React from 'react' + +import { Layout, ContentSection, TrySourcegraph } from '@components' +import { stringToKebabCase } from '@util' + +import styles from './useCases.module.scss' + +const features: string[] = [ + 'Find and fix security vulnerabilities', + 'Accelerate developer onboarding', + 'Resolve incidents faster', + 'Streamline code reuse', + 'Boost code health', +] + +const UseCases: React.FunctionComponent = () => ( + +
+
+

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 +

+ +
+ {features.map((feature: string) => ( + + {feature} + + + ))} +
+
+
+ + } + > +
+ {/* Todo: Add new Customer Logos Section when homepage updates are finalized */} + + +
+
+

Find and fix security vulnerabilities

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

+ You can't fix what you can't find. Remediate vulnerabilities with confidence knowing you + found every instance of affected code. Track your remediation initiatives to completion with + automated fixes and pull requests. With Sourcegraph, timely resolution is a search away. +

+
    +
  • Reduce time to recovery with a single search
  • +
  • + Automate fixing, merging, and deploying changes with{' '} + + Batch Changes + +
  • +
  • Alert for known vulnerabilities and risky code changes with code monitoring
  • +
+ + Request a demo + +
+
+
+

+ [Sourcegraph] is the best way to prove we're not vulnerable to a particular CVE, if and + when we get asked by an auditor. +

+
David Haynes, Security Engineer at Cloudflare
+
+ + + Cloudflare + + +
+
+
+
+
+ +
+ + +
+
+
+

+ For our new developers, Sourcegraph has been invaluable to get to know the repository + structure, to track down where code lives, and self-service during their investigations. +

+
Owen Kim, Senior Software Engineer, Convoy
+ +
+ + + Convoy + + +
+
+
+
+

Accelerate developer onboarding

+
+ Decrease time to first commit with self-serve onboarding, codebase exploration, and + knowledge sharing. +
+

+ Onboard teammates faster and improve dev velocity by making it easy to search and find code + and context. Unlike splintered tooling and knowledge management systems that require manual + interaction and upkeep, Sourcegraph helps devs self-serve. +

+
    +
  • + Search across all repositories and multiple branches to find answers in staging, dev, + and production environments +
  • +
  • + Navigate large codebases with definitions and references with advanced Code Intelligence +
  • +
  • Get answers faster with shareable links to specific code
  • +
+ + Request a demo + +
+
+
+ +
+ + +
+
+

Resolve incidents faster

+
Identify the root cause in code and fix the issue everywhere.
+

+ Every minute matters when responding to a business-critical incident. Downtime = revenue + lost. Sourcegraph helps development teams identify the root cause in code, understand why + the problem occurred and its potential impact on other services, fix the issue everywhere so + it won't reoccur, and assure incident responders that all holes are plugged. +

+
    +
  • + Quickly understand all context & dependencies around the codebase to self-serve or + involve relevant teams +
  • +
  • + Refactor code to replace insecure functions, update vulnerable packages, or modify + container configurations across hundreds of repositories +
  • +
  • + Document your solution by sharing links to searches and files and recording work in a + search notebook +
  • +
+ + Request a demo + +
+
+
+

+ 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. +

+
Simon Law, Staff Software Engineer, Quantcast
+
+ + + Quantcast + + +
+
+
+
+
+ +
+ + +
+
+
+

+ If I'm developing code for a library that might draw charts, for example, we don't want + 30 different ways to draw a chart at FactSet. With Sourcegraph, I can search the code to + find other chart examples, and simply copy the code. This saves us time and ensures + consistency. +

+
Joseph Majesky, Software Engineer, FactSet
+
+ + + FactSet + + +
+
+
+
+

Streamline code reuse

+
Stop wasting time rewriting code.
+

+ With Sourcegraph, you can find existing code libraries for reuse and avoid spending time on + problems you know a teammate already solved. This means a more secure and coherent codebase + and more time for you to spend on more interesting work. Sourcegraph makes it easy to: +

+
    +
  • + Quickly discover code you can trust for reuse by typing your query and getting an answer +
  • +
  • + Evaluate signals from multiple sources and tools to help you assess if you should use + the code +
  • +
  • + Safely and efficiently maintain code that is being reused and easily make changes + everywhere with Batch Changes +
  • +
  • Add a code monitor to alert you of commits using an out-of-date library
  • +
+ + Request a demo + +
+
+
+ +
+ + +
+
+

Boost code health

+
+ Improve code posture with large-scale changes and track code health initiatives towards + completion. +
+

+ Engineering teams need to monitor code health across their entire codebase to track and + measure code quality consistently. Sourcegraph helps teams figure out the components of code + health they have all agreed on and work towards a healthier codebase. +

+
    +
  • + Search for and refactor references to deprecated services, libraries, URL patterns, and + more across all your repositories with confidence +
  • +
  • + Understand the impact of changes on health and find interventions for improving code + health +
  • +
  • Efficiently tackle tech debt from legacy systems and acquisitions
  • +
+ + Request a demo + +
+
+
+

+ 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. +

+
Justin Phillips, Software Engineer, Lyft
+
+ + + Lyft + + +
+
+
+
+
+ +
+ + +
+
+) + +export default UseCases diff --git a/src/pages/use-cases/useCases.module.scss b/src/pages/use-cases/useCases.module.scss new file mode 100644 index 00000000..3ab1bf6c --- /dev/null +++ b/src/pages/use-cases/useCases.module.scss @@ -0,0 +1,12 @@ +.headerAndHero { + background: url('/customers-page-bg.svg') no-repeat; + background-size: cover; +} + +.seeHow { + font-size: 1.25rem; +} + +.listGroupItem { + background-color: rgba(255, 255, 255, 0.75); +} diff --git a/src/styles/globals.scss b/src/styles/globals.scss index dcbffa6f..5926694e 100644 --- a/src/styles/globals.scss +++ b/src/styles/globals.scss @@ -248,7 +248,6 @@ table { @import 'components/PrismTheme'; @import 'components/TestimonialCarousel'; @import 'components/Tweets'; -@import 'pages/404'; @import 'pages/about'; @import 'pages/batch-changes'; @import 'pages/cloud-beta'; @@ -271,7 +270,6 @@ table { @import 'pages/support'; @import 'pages/uninstall'; @import 'pages/universal-code-search'; -@import 'pages/use-cases'; @import 'templates/PostTemplate'; @import 'pages/dev-tools-quiz'; diff --git a/src/styles/pages/_404.scss b/src/styles/pages/_404.scss deleted file mode 100644 index f8d704a5..00000000 --- a/src/styles/pages/_404.scss +++ /dev/null @@ -1,30 +0,0 @@ -// stylelint-disable declaration-property-unit-whitelist - -.error-page { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - flex: 1 0 auto; - padding: 15% 4rem 25% 4rem; - background: url('/c-sprinkles-blank.svg'); - background-size: cover; - - &__circle { - height: 8rem; - width: 8rem; - margin: 0 auto; - background: #afbcd4; - } - - &__icon { - height: 8rem; - width: 8rem; - margin: 0 auto; - svg { - height: 8rem; - width: 8rem; - fill: #e4e9f1; - } - } -} diff --git a/src/styles/pages/_use-cases.scss b/src/styles/pages/_use-cases.scss deleted file mode 100644 index 188404e7..00000000 --- a/src/styles/pages/_use-cases.scss +++ /dev/null @@ -1,15 +0,0 @@ -.use-cases-page { - &__header-and-hero { - background: url('/customers-page-bg.svg') no-repeat; - background-size: cover; - } - &__see-how { - font-size: 1.25rem; - } - .list-group-item { - background-color: rgba(255, 255, 255, 0.75); - display: flex; - justify-content: space-between; - align-items: center; - } -} diff --git a/yarn.lock b/yarn.lock index bc2fa573..5d73a7cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -388,6 +388,92 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== +"@react-spring/animated@~9.4.3-beta.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.4.3.tgz#2f8d2b50dfc1975fa490ed3bc03f5ad865180866" + integrity sha512-hKKmeXPoGpJ/zrG/RC8stwW8PmMH0BbewHD8aUPLbyzD9fNvZEJ0mjKmOI0CcSwMpb43kuwY2nX3ZJVImPQCoQ== + dependencies: + "@react-spring/shared" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + +"@react-spring/core@~9.4.0", "@react-spring/core@~9.4.3-beta.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.4.3.tgz#95c883fa53ff534ff882ba42f863a26a26a6a1c8" + integrity sha512-Jr6/GjHwXYxAtttcYDXOtH36krO0XGjYaSsGR6g+vOUO4y0zAPPXoAwpK6vS7Haip5fRwk7rMdNG+OzU7bB4Bg== + dependencies: + "@react-spring/animated" "~9.4.3-beta.0" + "@react-spring/rafz" "~9.4.3-beta.0" + "@react-spring/shared" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + +"@react-spring/konva@~9.4.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.4.3.tgz#ef5332fc0960fa4313ac0ab6a122fd9247b3b111" + integrity sha512-JWxx0YIwipjJTDs7q9XtArlBCTjejyAJZrbhvxmizOM6ZukUj8hcEFYU03Vt5HUTSC4WfG0rkg2O9V1EAXuzCQ== + dependencies: + "@react-spring/animated" "~9.4.3-beta.0" + "@react-spring/core" "~9.4.3-beta.0" + "@react-spring/shared" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + +"@react-spring/native@~9.4.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.4.3.tgz#748ee1f588c1515a76766e319aa48151308bd5ad" + integrity sha512-dfOwzSxJcbHKTNJ26pceZ7xCrqf2+L6W/U17/7aogQwGec4yf1zocWXV3QS+h0HDuY0Bk/yYa7PEy+D+HWc7Og== + dependencies: + "@react-spring/animated" "~9.4.3-beta.0" + "@react-spring/core" "~9.4.3-beta.0" + "@react-spring/shared" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + +"@react-spring/rafz@~9.4.3-beta.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.4.3.tgz#0d578072c9692ef5ab74a3b1d49c1432dce32ab6" + integrity sha512-KnujiZNIHzXsRq1D4tVbCajl8Lx+e6vtvUk7o69KbuneSpEgil9P/x3b+hMDk8U0NHGhJjzhU7723/CNsQansA== + +"@react-spring/shared@~9.4.3-beta.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.4.3.tgz#86e03ddd47911ba89be1d0f5a6d11966e305ee04" + integrity sha512-mB1UUD/pl1LzaY0XeNWZtvJzxMa8gLQf02nY12HAz4Rukm9dFRj0jeYwQYLdfYLsGFo1ldvHNurun6hZMG7kiQ== + dependencies: + "@react-spring/rafz" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + +"@react-spring/three@~9.4.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.4.3.tgz#1836ea12f7cb7ccb4c4a1f39101f4fb17955c386" + integrity sha512-AhCPqoZZXUnzVcKal01sdYBRqkVd2iNxDMk7BGXZsQNWeqaOMaaBT/a6d3oG3wwPX6xIa9ogBtzmzEasN6HYzA== + dependencies: + "@react-spring/animated" "~9.4.3-beta.0" + "@react-spring/core" "~9.4.3-beta.0" + "@react-spring/shared" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + +"@react-spring/types@~9.4.3-beta.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.4.3.tgz#8926d7a09812374127b1f8a904a755c7579124e6" + integrity sha512-dzJrPvUc42K2un9y6D1IsrPQO5tKsbWwUo+wsATnXjG3ePWyuDBIOMJuPe605NhIXUmPH+Vik2wMoZz06hD1uA== + +"@react-spring/web@~9.4.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.4.3.tgz#b59c1491de344545590598b7fde52b607c4e5d10" + integrity sha512-llKve/uJ73JVagBAVvA74S/LfZP4oSB3XP1qmggSUNXzPZZo5ylIMrs55PxpLyxgzzihuhDU5N17ct3ATViOHw== + dependencies: + "@react-spring/animated" "~9.4.3-beta.0" + "@react-spring/core" "~9.4.3-beta.0" + "@react-spring/shared" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + +"@react-spring/zdog@~9.4.0": + version "9.4.3" + resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.4.3.tgz#0a76564ea635ab00a1720a3843faf4f46ca3c82a" + integrity sha512-ujRJBKEWC6miwPhCwHkn13h9OfqK+Kkq49crebo5neY4kCK2efNoagQo54DwXFgbVNFJV+6GwcAZVI2ybS5L1Q== + dependencies: + "@react-spring/animated" "~9.4.3-beta.0" + "@react-spring/core" "~9.4.3-beta.0" + "@react-spring/shared" "~9.4.3-beta.0" + "@react-spring/types" "~9.4.3-beta.0" + "@restart/context@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" @@ -2468,6 +2554,18 @@ react-overlays@^5.0.1: uncontrollable "^7.2.1" warning "^4.0.3" +react-spring@9.4.2: + version "9.4.2" + resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.4.2.tgz#71fcbe2d317fae9271058c8b70823af0c3b8ad4d" + integrity sha512-mK9xdq1kAhbe5YpP4EG2IzRa2C1M1UfR/MO1f83PE+IpHwCm1nGQhteF3MGyX6I3wnkoBWTXbY6n4443Dp52Og== + dependencies: + "@react-spring/core" "~9.4.0" + "@react-spring/konva" "~9.4.0" + "@react-spring/native" "~9.4.0" + "@react-spring/three" "~9.4.0" + "@react-spring/web" "~9.4.0" + "@react-spring/zdog" "~9.4.0" + react-transition-group@^4.4.1: version "4.4.2" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"