From 52cb24b181dddd3025e089a577441093f3cd366f Mon Sep 17 00:00:00 2001 From: colmtuite Date: Wed, 26 Jul 2023 20:27:45 +0100 Subject: [PATCH 01/34] Test page, initial components, initial theme. --- gatsby-browser.js | 1 + src/pages/ds.js | 132 +++++++++++++ src/stylesheets/ds.css | 433 +++++++++++++++++++++++++++++++++++++++++ tailwind.config.js | 2 +- 4 files changed, 567 insertions(+), 1 deletion(-) create mode 100644 src/pages/ds.js create mode 100644 src/stylesheets/ds.css diff --git a/gatsby-browser.js b/gatsby-browser.js index dbde1aa39..bea0be8b1 100644 --- a/gatsby-browser.js +++ b/gatsby-browser.js @@ -1,6 +1,7 @@ import './src/stylesheets/soehne.css'; import './src/stylesheets/tailwind.css'; import './src/stylesheets/table-of-contents-sidebar.css'; +import './src/stylesheets/ds.css'; /* * Styles for Algolia Autocomplete. It would be preferential to remove these imports and use diff --git a/src/pages/ds.js b/src/pages/ds.js new file mode 100644 index 000000000..28640964f --- /dev/null +++ b/src/pages/ds.js @@ -0,0 +1,132 @@ +import React from 'react'; +import { SEO } from 'components'; + +const DS = () => ( + <> + +
+
+
+
+ + + +
+
+ + +
+
+
+ +
+
+
+
+

The quick brown fox

+
+
+

The quick brown fox

+
+
+

The quick brown fox jumps

+
+
+

The quick brown fox jumps

+
+
+
The quick brown fox jumps over the lazy dog
+
+
+
The quick brown fox jumps over the lazy dog
+
+
+

The quick brown fox jumps over the lazy dog

+
+
+
The quick brown fox jumps over the lazy dog
+
+
+ The quick brown fox jumps over the lazy dog +
+
+
+

T

+

T

+

T

+

T

+
T
+
+
+
+ +
+
+
+

The quick brown fox jumps over the lazy dog

+

The quick brown fox jumps over the lazy dog

+

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog

+
+
+

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.

+
I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.
+

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.

+
+
+

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space.

+
+
+
+ I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. +
+
+ I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. +
+
+
+
+ +
+
+
+

SaaS Backstage. Simpler, safer, and more powerful.

+

Get automatic upgrades, instant Catalog updates, and ready-to-use integrations with Roadie’s Backstage-as-a-Service.

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

Write Checks

+

Create a culture of quality and accountability

+

Checks run against source code and the APIs your tools expose. They find software which is not meeting expectations and report this to the people who can get it fixed.

+

Scorecards group checks together into concepts your teams understand. Like “Security best practices - Level 1” or “Production SRE requirements - Level 3”.

+
+
+
+
+ +); + +export default DS; + diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css new file mode 100644 index 000000000..a87b7af50 --- /dev/null +++ b/src/stylesheets/ds.css @@ -0,0 +1,433 @@ +:root { + --indigo-1: hsl(225, 60%, 99%); + --indigo-2: hsl(223, 100%, 98%); + --indigo-3: hsl(223, 98%, 97%); + --indigo-4: hsl(223, 93%, 95%); + --indigo-5: hsl(224, 87%, 92%); + --indigo-6: hsl(224, 82%, 88%); + --indigo-7: hsl(225, 77%, 82%); + --indigo-8: hsl(226, 75%, 75%); + --indigo-9: hsl(226, 78%, 58%); + --indigo-10: hsl(226, 59%, 51%); + --indigo-11: hsl(226, 55%, 49%); + --indigo-12: hsl(226, 62%, 17%); + + --gray-1: hsl(221, 30%, 99%); + --gray-2: hsl(225, 17%, 98%); + --gray-3: hsl(224, 13%, 95%); + --gray-4: hsl(224, 12%, 93%); + --gray-5: hsl(223, 12%, 91%); + --gray-6: hsl(223, 11%, 89%); + --gray-7: hsl(222, 11%, 86%); + --gray-8: hsl(220, 11%, 78%); + --gray-9: hsl(221, 6%, 56%); + --gray-10: hsl(221, 6%, 52%); + --gray-11: hsl(221, 6%, 44%); + --gray-12: hsl(221, 24%, 9%); + + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-7: 32px; + --space-8: 48px; + --space-9: 64px; + + --fs-1: 10px; + --fs-2: 12px; + --fs-3: 14px; + --fs-4: 17px; + --fs-5: 20px; + --fs-6: 27px; + --fs-7: 34px; + --fs-8: 53px; + --fs-9: 57px; + + --lh-1: 14px; + --lh-2: 17px; + --lh-3: 19px; + --lh-4: 22px; + --lh-5: 24px; + --lh-6: 28px; + --lh-7: 36px; + --lh-8: 54px; + + --ls-1: -.36px; + --ls-2: -.68px; + --ls-3: -1.15px; + --ls-4: -1.92px; + + --ff-sans: 'Soehne', -apple-system, + BlinkMacSystemFont, + "helvetica neue", + helvetica, + arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji"; + --ff-mono: 'Soehne-Mono', + ui-monospace, + SFMono-Regular, + "SF Mono", + Menlo, + Consolas, + "Liberation Mono", + monospace; + + --fw-1: 400; + --fw-2: 600; + + --br-1: 4px; + --br-2: 8px; + --br-3: 12px; + --br-4: 16px; + --br-pill: 9999px; + --br-circle: 50%; + + --td-1: 25ms; + --td-2: 75ms; + --td-3: 125ms; +} + +.Button { + all: unset; + line-height: 1; + display: inline-flex; + align-items: center; + box-sizing: border-box; + appearance: none; + font-family: inherit; + border: none; + outline: none; + cursor: default; + font-weight: var(--fw-2); + user-select: none; + flex-shrink: 0; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.Button.size-1 { + height: var(--space-6); + font-size: var(--fs-2); + padding-right: var(--space-2); + padding-left: var(--space-2); + border-radius: var(--br-1); + gap: var(--space-1); +} + +.Button.size-2 { + height: var(--space-7); + font-size: var(--fs-3); + padding-right: var(--space-3); + padding-left: var(--space-3); + border-radius: var(--br-1); + gap: var(--space-2); +} + +.Button.size-3 { + height: var(--space-8); + font-size: var(--fs-4); + padding-right: var(--space-4); + padding-left: var(--space-4); + border-radius: var(--br-2); + gap: var(--space-3); +} + +.Button.neutral { + box-shadow: inset 0 0 0 1px var(--gray-7); + color: var(--gray-12); +} +.Button.neutral:hover { + box-shadow: inset 0 0 0 1px var(--gray-8); +} + +.Button.accent { + background-color: var(--indigo-9); + color: white; +} +.Button.accent:hover { + background-color: var(--indigo-10); +} + +.Text { + font-family: var(--ff-sans); + color: var(--gray-12); + margin: 0; + display: block; + font-feature-settings: "tnum"; + font-style: normal; + max-width: 60ch; +} + +.Text.size-1 { + font-size: var(--fs-1); + line-height: var(--lh-1); + letter-spacing: 0; + font-weight: var(--fw-1); +} + +.Text.size-2 { + font-size: var(--fs-2); + line-height: var(--lh-2); + letter-spacing: 0; + font-weight: var(--fw-1); +} + +.Text.size-3 { + font-size: var(--fs-3); + line-height: var(--lh-3); + letter-spacing: 0; + font-weight: var(--fw-1); +} + +.Text.size-4 { + font-size: var(--fs-4); + line-height: var(--lh-4); + letter-spacing: 0; + font-weight: var(--fw-1); +} + +.Text.size-5 { + font-size: var(--fs-5); + line-height: var(--lh-5); + letter-spacing: var(--ls-1); + font-weight: var(--fw-2); +} + +.Text.size-6 { + font-size: var(--fs-6); + line-height: var(--lh-6); + letter-spacing: var(--ls-1); + font-weight: var(--fw-2); + text-indent: -.2px; +} + +.Text.size-7 { + font-size: var(--fs-7); + line-height: var(--lh-7); + letter-spacing: var(--ls-3); + font-weight: var(--fw-2); + text-indent: -.35px; +} + +.Text.size-8 { + font-size: var(--fs-8); + line-height: var(--lh-8); + letter-spacing: var(--ls-4); + font-weight: var(--fw-2); + text-indent: -.6px; +} + +.Text.size-9 { + font-size: var(--fs-9); + line-height: var(--lh-8); + letter-spacing: var(--ls-4); + font-weight: var(--fw-2); + text-indent: -.75px; +} + +.Text.highContrast { + color: var(--gray-12); +} + +.Text.lowContrast { + color: var(--gray-11); +} + +.Text.indigo { + color: var(--indigo-11); +} + +.Text.weight-1 { + font-weight: var(--fw-1); +} + +.Text.weight-2 { + font-weight: var(--fw-2); +} + +.Text.string { + line-height: 1; +} + +.Container { + max-width: 1064px; + margin-left: auto; + margin-right: auto; + padding-left: var(--space-6); + padding-right: var(--space-6); +} + +.Flex { + display: flex; + align-items: start; +} + +.Flex.row { + flex-direction: row; +} + +.Flex.column { + flex-direction: column; +} + +.Flex.rowReverse { + flex-direction: row-reverse; +} + +.Flex.columnReverse { + flex-direction: column-reverse; +} + +.Flex.ai-start { + align-items: start; +} + +.Flex.ai-end { + align-items: end; +} + +.Flex.ai-center { + align-items: center; +} + +.Flex.ai-baseline { + align-items: baseline; +} + +.Flex.ai-stretch { + align-items: stretch; +} + +.Flex.gap-1 { + gap: var(--space-1); +} + +.Flex.gap-2 { + gap: var(--space-2); +} + +.Flex.gap-3 { + gap: var(--space-3); +} + +.Flex.gap-4 { + gap: var(--space-4); +} + +.Flex.gap-5 { + gap: var(--space-5); +} + +.Flex.gap-6 { + gap: var(--space-6); +} + +.Flex.gap-7 { + gap: var(--space-7); +} + +.Flex.gap-8 { + gap: var(--space-8); +} + +.Flex.gap-9 { + gap: var(--space-9); +} + +.Section { + position: relative; +} + +.Section.size-1 { + padding-top: var(--space-5); + padding-bottom: var(--space-5); +} + +.Section.size-2 { + padding-top: var(--space-7); + padding-bottom: var(--space-7); +} + +.Section.size-3 { + padding-top: var(--space-9); + padding-bottom: var(--space-9); +} + +.Grid { + display: grid; +} + +.Grid.columns-1 { + grid-template-columns: repeat(1, 1fr); +} + +.Grid.columns-2 { + grid-template-columns: repeat(2, 1fr); +} + +.Grid.columns-3 { + grid-template-columns: repeat(3, 1fr); +} + +.Grid.columns-4 { + grid-template-columns: repeat(4, 1fr); +} + +.Grid.gap-1 { + gap: var(--space-1); +} + +.Grid.gap-2 { + gap: var(--space-2); +} + +.Grid.gap-3 { + gap: var(--space-3); +} + +.Grid.gap-4 { + gap: var(--space-4); +} + +.Grid.gap-5 { + gap: var(--space-5); +} + +.Grid.gap-6 { + gap: var(--space-6); +} + +.Grid.gap-7 { + gap: var(--space-7); +} + +.Grid.gap-8 { + gap: var(--space-8); +} + +.Grid.gap-9 { + gap: var(--space-9); +} + +.Grid.ai-start { + align-items: start; +} + +.Grid.ai-end { + align-items: end; +} + +.Grid.ai-center { + align-items: center; +} + +.Grid.ai-baseline { + align-items: baseline; +} + +.Grid.ai-stretch { + align-items: stretch; +} \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js index 605e468b8..e4579ae9f 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -10,7 +10,7 @@ module.exports = { extend: { fontFamily: { sans: ['Soehne', ...defaultTheme.fontFamily.sans], - highlight: ['Montserrat', 'Source\\ Sans\\ 3', ...defaultTheme.fontFamily.sans], + highlight: ['Soehne', ...defaultTheme.fontFamily.sans], }, letterSpacing: { tighter: '0.025em', From 1c40d8c8d231fb628015913a93cb6434460c8b0b Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 15:55:35 +0100 Subject: [PATCH 02/34] More scales. Badge component. --- src/pages/ds.js | 40 +++++++++-- src/stylesheets/ds.css | 146 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 176 insertions(+), 10 deletions(-) diff --git a/src/pages/ds.js b/src/pages/ds.js index 28640964f..afa021f3d 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -9,8 +9,8 @@ const DS = () => ( />
-
-
+
+
-
+
+ + +
+
+
+ +
+
+
+ + Coming Soon + + + Coming Soon + +
+
+ + Coming Soon + + + Owner + + + Approved + + + Pending + + + Declined +
@@ -103,7 +135,7 @@ const DS = () => (

SaaS Backstage. Simpler, safer, and more powerful.

Get automatic upgrades, instant Catalog updates, and ready-to-use integrations with Roadie’s Backstage-as-a-Service.

- +
diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index a87b7af50..cc33f5fa3 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -12,6 +12,19 @@ --indigo-11: hsl(226, 55%, 49%); --indigo-12: hsl(226, 62%, 17%); + --violet-1: hsl(255, 65%, 99%); + --violet-2: hsl(252, 100%, 99%); + --violet-3: hsl(252, 97%, 97%); + --violet-4: hsl(252, 92%, 95%); + --violet-5: hsl(252, 85%, 93%); + --violet-6: hsl(252, 78%, 89%); + --violet-7: hsl(252, 71%, 84%); + --violet-8: hsl(252, 69%, 76%); + --violet-9: hsl(252, 56%, 58%); + --violet-10: hsl(251, 48%, 54%); + --violet-11: hsl(250, 43%, 48%); + --violet-12: hsl(254, 60%, 19%); + --gray-1: hsl(221, 30%, 99%); --gray-2: hsl(225, 17%, 98%); --gray-3: hsl(224, 13%, 95%); @@ -25,6 +38,45 @@ --gray-11: hsl(221, 6%, 44%); --gray-12: hsl(221, 24%, 9%); + --green-1: hsl(136, 50%, 99%); + --green-2: hsl(138, 63%, 97%); + --green-3: hsl(139, 55%, 95%); + --green-4: hsl(140, 49%, 91%); + --green-5: hsl(141, 44%, 86%); + --green-6: hsl(143, 40%, 79%); + --green-7: hsl(146, 39%, 69%); + --green-8: hsl(151, 40%, 54%); + --green-9: hsl(151, 55%, 42%); + --green-10: hsl(152, 58%, 38%); + --green-11: hsl(153, 67%, 29%); + --green-12: hsl(155, 40%, 14%); + + --yellow-1: hsl(60, 54%, 98.5%); + --yellow-2: hsl(52, 100%, 96%); + --yellow-3: hsl(55, 100%, 91%); + --yellow-4: hsl(54, 100%, 87%); + --yellow-5: hsl(52, 98%, 82%); + --yellow-6: hsl(50, 89%, 76%); + --yellow-7: hsl(47, 80%, 68%); + --yellow-8: hsl(48, 100%, 46%); + --yellow-9: hsl(53, 92%, 50%); + --yellow-10: hsl(50, 100%, 49%); + --yellow-11: hsl(42, 100%, 29%); + --yellow-12: hsl(40, 55%, 14%); + + --red-1: hsl(359, 100%, 99%); + --red-2: hsl(359, 100%, 98%); + --red-3: hsl(360, 100%, 96%); + --red-4: hsl(360, 98%, 95%); + --red-5: hsl(360, 90%, 92%); + --red-6: hsl(360, 82%, 88%); + --red-7: hsl(359, 74%, 82%); + --red-8: hsl(359, 70%, 74%); + --red-9: hsl(358, 75%, 59%); + --red-10: hsl(358, 69%, 55%); + --red-11: hsl(358, 65%, 49%); + --red-12: hsl(354, 50%, 15%); + --space-1: 4px; --space-2: 8px; --space-3: 12px; @@ -32,8 +84,8 @@ --space-5: 20px; --space-6: 24px; --space-7: 32px; - --space-8: 48px; - --space-9: 64px; + --space-8: 40px; + --space-9: 48px; --fs-1: 10px; --fs-2: 12px; @@ -106,6 +158,9 @@ user-select: none; flex-shrink: 0; -webkit-tap-highlight-color: rgba(0,0,0,0); + text-decoration: none; + justify-content: center; + white-space: nowrap; } .Button.size-1 { @@ -129,10 +184,10 @@ .Button.size-3 { height: var(--space-8); font-size: var(--fs-4); - padding-right: var(--space-4); - padding-left: var(--space-4); - border-radius: var(--br-2); - gap: var(--space-3); + padding-right: var(--space-3); + padding-left: var(--space-3); + border-radius: var(--br-1); + gap: var(--space-2); } .Button.neutral { @@ -151,6 +206,24 @@ background-color: var(--indigo-10); } +.Button.green { + background-color: var(--green-9); + color: white; +} + +.Button.green:hover { + background-color: var(--green-10); +} + +.Button.red { + box-shadow: inset 0 0 0 1px var(--gray-7); + color: var(--red-11); +} + +.Button.red:hover { + box-shadow: inset 0 0 0 1px var(--gray-8); +} + .Text { font-family: var(--ff-sans); color: var(--gray-12); @@ -430,4 +503,65 @@ .Grid.ai-stretch { align-items: stretch; +} + +.Badge { + all: unset; + line-height: 1; + display: inline-flex; + align-items: center; + box-sizing: border-box; + appearance: none; + font-family: inherit; + border: none; + outline: none; + cursor: default; + user-select: none; + flex-shrink: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + text-decoration: none; + justify-content: center; + white-space: nowrap; + border-radius: var(--br-pill); +} + +.Badge.size-1 { + height: var(--space-5); + font-size: var(--fs-2); + padding-left: var(--space-2); + padding-right: var(--space-2); + gap: var(--space-1); +} + +.Badge.size-2 { + height: var(--space-6); + font-size: var(--fs-3); + padding-left: var(--space-2); + padding-right: var(--space-2); + gap: var(--space-2); +} + +.Badge.gray { + background-color: var(--gray-3); + color: var(--gray-11); +} + +.Badge.indigo { + background-color: var(--indigo-3); + color: var(--indigo-11); +} + +.Badge.green { + background-color: var(--green-3); + color: var(--green-11); +} + +.Badge.yellow { + background-color: var(--yellow-3); + color: var(--yellow-11); +} + +.Badge.red { + background-color: var(--red-3); + color: var(--red-11); } \ No newline at end of file From 88e3978c2c5b8145d74559a0365a1b850c7f6269 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 16:08:54 +0100 Subject: [PATCH 03/34] Sup component --- src/pages/ds.js | 2 +- src/stylesheets/ds.css | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pages/ds.js b/src/pages/ds.js index afa021f3d..a0a4207d7 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -117,7 +117,7 @@ const DS = () => (

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.

-

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space.

+

I encourage my team to keep learning.1 Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space.

diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index cc33f5fa3..cec9d5456 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -564,4 +564,11 @@ .Badge.red { background-color: var(--red-3); color: var(--red-11); +} + +.Sup { + font-feature-settings: "sups"; + font-size: 100%; + line-height: 1; + vertical-align: -webkit-baseline-middle; } \ No newline at end of file From 6f464a03b107917f19e99cee394c02cf89c08e8f Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 16:10:19 +0100 Subject: [PATCH 04/34] Sub component --- src/pages/ds.js | 2 +- src/stylesheets/ds.css | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pages/ds.js b/src/pages/ds.js index a0a4207d7..53f8aad3f 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -114,7 +114,7 @@ const DS = () => (

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.
-

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.

+

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.1

I encourage my team to keep learning.1 Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space.

diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index cec9d5456..f2f7cca70 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -571,4 +571,11 @@ font-size: 100%; line-height: 1; vertical-align: -webkit-baseline-middle; +} + +.Sub { + font-feature-settings: "subs"; + font-size: 100%; + line-height: 1; + vertical-align: -webkit-baseline-middle; } \ No newline at end of file From 3b46c07c29aab31b9132405f0310ddf00d82d84f Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 16:25:18 +0100 Subject: [PATCH 05/34] Code component --- src/pages/ds.js | 4 ++-- src/stylesheets/ds.css | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pages/ds.js b/src/pages/ds.js index 53f8aad3f..a9c6aca4f 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -114,10 +114,10 @@ const DS = () => (

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.
-

I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.1

+

I encourage my team to keep learning. Ideas in different topics or fields can often inspire console.log('Roadie').console new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution.1

-

I encourage my team to keep learning.1 Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space.

+

I encourage my team to keep learning.1 Ideas in different topics or fields can often inspire new ideas console.log('Roadie').console and broaden the potential solution space. I encourage my team to keep learning. Ideas in different topics or fields can often inspire new ideas and broaden the potential solution space.

diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index f2f7cca70..ec418de94 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -577,5 +577,14 @@ font-feature-settings: "subs"; font-size: 100%; line-height: 1; - vertical-align: -webkit-baseline-middle; + vertical-align: text-bottom; +} + +.Code { + font-family: var(--ff-mono); + font-size: max(12px, 87%); + white-space: nowrap; + padding: 0 3px 2px 3px; + background-color: var(--violet-3); + color: var(--violet-11); } \ No newline at end of file From 57a169ab18c1ac3baab57dd30c4ce6d2108fbeb1 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 16:53:05 +0100 Subject: [PATCH 06/34] Image component --- src/pages/ds.js | 4 ++++ src/stylesheets/ds.css | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/pages/ds.js b/src/pages/ds.js index a9c6aca4f..b3ee6982a 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -63,6 +63,10 @@ const DS = () => (
+
+ Colm Tuite +
+
diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index ec418de94..1e99763b0 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -587,4 +587,10 @@ padding: 0 3px 2px 3px; background-color: var(--violet-3); color: var(--violet-11); +} + +.Image { + display: block; + vertical-align: middle; + max-width: 100%; } \ No newline at end of file From c7085cfe186580c7d1999094f5c021af95f7bc63 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 17:07:35 +0100 Subject: [PATCH 07/34] Separator component --- src/pages/ds.js | 8 ++++++++ src/stylesheets/ds.css | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/pages/ds.js b/src/pages/ds.js index b3ee6982a..1498f7bb8 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -67,6 +67,14 @@ const DS = () => ( Colm Tuite
+
+
+
+
+
+
+
+
diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index 1e99763b0..bc4a43231 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -593,4 +593,31 @@ display: block; vertical-align: middle; max-width: 100%; +} + +.Separator { + box-sizing: border-box; + background-color: var(--gray-6); + height: 1px; +} + +.Separator.size-1 { + width: var(--space-5); +} + +.Separator.size-2 { + width: var(--space-8); +} + +.Separator.vertical { + width: 1px; + height: 100%; +} + +.Separator.vertical.size-1 { + height: var(--space-5); +} + +.Separator.vertical.size-2 { + height: var(--space-8); } \ No newline at end of file From 936942b551019177a02f7bbdacd08032477419b6 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 17:14:39 +0100 Subject: [PATCH 08/34] Fix bug with Sup --- src/stylesheets/ds.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index bc4a43231..af641b528 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -570,7 +570,7 @@ font-feature-settings: "sups"; font-size: 100%; line-height: 1; - vertical-align: -webkit-baseline-middle; + vertical-align: text-bottom; } .Sub { From 77e7ed80ddd1e0603cfadf5dc0fec20edbfd49f0 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 19:47:31 +0100 Subject: [PATCH 09/34] Avatar component --- src/pages/ds.js | 17 +++++++++++++++ src/stylesheets/ds.css | 47 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/src/pages/ds.js b/src/pages/ds.js index 1498f7bb8..2e35b22eb 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -75,6 +75,23 @@ const DS = () => (
+
+
+
+ Colm Tuite +
+
+ Colm Tuite +
+
+ Colm Tuite +
+
+ Colm Tuite +
+
+
+
diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index af641b528..7a314ef2b 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -620,4 +620,51 @@ .Separator.vertical.size-2 { height: var(--space-8); +} + +.Avatar { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: var(--br-circle); + overflow: hidden; + position: relative; +} + +.Avatar::after { + box-sizing: border-box; + position: absolute; + top: 0; + left: 0; + content: "''"; + width: 100%; + height: 100%; + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.04); + border-radius: var(--br-circle); +} + +.Avatar img { + width: 100%; + height: 100%; + vertical-align: middle; +} + +.Avatar.size-1 { + width: var(--space-6); + height: var(--space-6); +} + +.Avatar.size-2 { + width: var(--space-7); + height: var(--space-7); +} + +.Avatar.size-3 { + width: var(--space-8); + height: var(--space-8); +} + +.Avatar.size-4 { + width: var(--space-9); + height: var(--space-9); } \ No newline at end of file From 76247dfda7e2635e9ee718360939c9896abec60e Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 20:50:07 +0100 Subject: [PATCH 10/34] TextField component --- src/pages/ds.js | 8 ++++++++ src/stylesheets/ds.css | 46 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/pages/ds.js b/src/pages/ds.js index 2e35b22eb..d54c448e7 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -75,6 +75,14 @@ const DS = () => (
+
+
+ + + +
+
+
diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index 7a314ef2b..98cd1a34b 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -667,4 +667,50 @@ .Avatar.size-4 { width: var(--space-9); height: var(--space-9); +} + +.TextField { + color: var(--gray-12); + font-family: inherit; + padding: 0; + border: none; + box-shadow: inset 0 0 0 1px var(--gray-7); + outline: none; + width: 100%; + appearance: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + box-sizing: border-box; + background-color: white; +} + +.TextField.size-1 { + height: var(--space-6); + font-size: var(--fs-2); + border-radius: var(--br-1); + padding-left: var(--space-2); + line-height: var(--space-6); +} + +.TextField.size-2 { + height: var(--space-7); + font-size: var(--fs-3); + border-radius: var(--br-1); + padding-left: var(--space-3); + line-height: var(--space-7); +} + +.TextField.size-3 { + height: var(--space-8); + font-size: var(--fs-4); + border-radius: var(--br-1); + padding-left: var(--space-3); + line-height: var(--space-8); +} + +.TextField:focus { + box-shadow: inset 0 0 0 1px var(--indigo-8), 0 0 0 1px var(--indigo-8); +} + +.TextField::placeholder { + color: var(--gray-9); } \ No newline at end of file From 39a9ad633f08121aebb69eab630e5b24a8fe0744 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 20:55:32 +0100 Subject: [PATCH 11/34] Remove smooth scroll behaviour --- src/stylesheets/tailwind.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stylesheets/tailwind.css b/src/stylesheets/tailwind.css index be9707593..ec6f5fe05 100644 --- a/src/stylesheets/tailwind.css +++ b/src/stylesheets/tailwind.css @@ -13,7 +13,7 @@ } html { - scroll-behavior: smooth; + /* scroll-behavior: smooth; */ } @layer base { From a2d277a9b912ad0b9955c91e386f850ed806d034 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 27 Jul 2023 21:20:46 +0100 Subject: [PATCH 12/34] Link component --- src/pages/ds.js | 6 ++++++ src/stylesheets/ds.css | 25 +++++++++++++++++++++++-- src/stylesheets/tailwind.css | 4 ---- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/pages/ds.js b/src/pages/ds.js index d54c448e7..6ae5bdaa6 100644 --- a/src/pages/ds.js +++ b/src/pages/ds.js @@ -83,6 +83,12 @@ const DS = () => (
+
+ +
+
diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index 98cd1a34b..8261a7675 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -8,8 +8,8 @@ --indigo-7: hsl(225, 77%, 82%); --indigo-8: hsl(226, 75%, 75%); --indigo-9: hsl(226, 78%, 58%); - --indigo-10: hsl(226, 59%, 51%); - --indigo-11: hsl(226, 55%, 49%); + --indigo-10: hsl(226, 59%, 55%); + --indigo-11: hsl(226, 55%, 54%); --indigo-12: hsl(226, 62%, 17%); --violet-1: hsl(255, 65%, 99%); @@ -713,4 +713,25 @@ .TextField::placeholder { color: var(--gray-9); +} + +.Link { + align-items: center; + gap: var(--space-1); + flex-shrink: 0; + outline: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + text-decoration-line: none; + text-decoration-thickness: 1px; + text-underline-offset: 3px; + text-decoration-color: var(--indigo-4); + color: var(--indigo-11); +} + +.Link:hover { + text-decoration-line: underline; +} + +.Link .Text { + color: inherit; } \ No newline at end of file diff --git a/src/stylesheets/tailwind.css b/src/stylesheets/tailwind.css index ec6f5fe05..927b38ed1 100644 --- a/src/stylesheets/tailwind.css +++ b/src/stylesheets/tailwind.css @@ -12,10 +12,6 @@ @apply items-center; } -html { - /* scroll-behavior: smooth; */ -} - @layer base { html { @apply text-blueroadie; From be8b92bb373c17afea539a09c1036c9a71f3c404 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Tue, 1 Aug 2023 10:05:37 +0100 Subject: [PATCH 13/34] Update Footer. IconButton. Tons of improvements. --- src/components/SitewideFooter/index.js | 126 ++++++++++------------- src/components/icons/BackstageIcon.js | 2 + src/components/icons/DiscordIcon.js | 14 +++ src/components/icons/GitHubIcon.js | 8 +- src/components/icons/RoadieRacksIcon.js | 22 ++-- src/components/icons/TwitterIcon.js | 4 +- src/components/icons/index.js | 1 + src/stylesheets/ds.css | 129 +++++++++++++++++++++++- src/stylesheets/tailwind.css | 4 + 9 files changed, 212 insertions(+), 98 deletions(-) create mode 100644 src/components/icons/DiscordIcon.js diff --git a/src/components/SitewideFooter/index.js b/src/components/SitewideFooter/index.js index fc946d608..0efd1db96 100644 --- a/src/components/SitewideFooter/index.js +++ b/src/components/SitewideFooter/index.js @@ -1,6 +1,6 @@ import React from 'react'; import { Link } from 'components'; -import { TwitterIcon, GitHubIcon, BackstageIcon, RoadieRacksIcon } from 'components/icons'; +import { TwitterIcon, GitHubIcon, DiscordIcon, BackstageIcon, RoadieRacksIcon } from 'components/icons'; import camelCase from 'lodash/camelCase'; import soc2Seal from '../../../content/assets/logos/soc2/aicpa.jpg'; @@ -11,15 +11,8 @@ const navigation = { product: [ { name: 'Catalog', href: '/product/catalog' }, { name: 'Scaffolder', href: '/product/scaffolder' }, - ], - - support: [ - { name: 'Documentation', href: '/docs/' }, - { name: 'Case Studies', href: '/case-studies/' }, - { name: 'Backstage Plugins', href: '/backstage/plugins/' }, - { name: 'FAQs', href: '/faqs/' }, - { name: 'Changelog', href: '/changelog/' }, - { name: 'Backstage Bites', href: '/backstage-bites/' }, + { name: 'Documentation', href: '/product/documentation' }, + { name: 'Tech Insights', href: '/product/tech-insights' }, ], company: [ @@ -28,16 +21,26 @@ const navigation = { { name: 'Careers', href: 'https://careers.roadie.io' }, ], - legalSecurity: [ + resources: [ + { name: 'Docs', href: '/docs/' }, + { name: 'Case Studies', href: '/case-studies/' }, + { name: 'Backstage Plugins', href: '/backstage/plugins/' }, + { name: 'Changelog', href: '/changelog/' }, + { name: 'Backstage Bites', href: '/backstage-bites/' }, { name: 'Terms', href: '/legal-notices/terms-of-service/' }, { name: 'Privacy', href: '/legal-notices/privacy-notice/' }, { name: 'Cookies', href: '/legal-notices/cookies-policy/' }, ], + social: [{ name: 'Twitter', href: 'https://twitter.com/roadiehq', icon: TwitterIcon, + }, { + name: 'Discord', + href: 'https://discord.com/invite/W3qEMhmx4f', + icon: DiscordIcon, }, { name: 'GitHub', href: 'https://github.com/RoadieHQ', @@ -50,98 +53,77 @@ const navigation = { }; const NavItem = ({ name, href }) => ( -
  • +
  • - {name} + + {name} +
  • ); const SocialItem = ({ item }) => ( - + {item.name} - ); const TitledLinkList = ({ title, linkListKey = camelCase(title) }) => ( - <> -

    {title}

    -
      +
      +

      {title}

      +
        {navigation[linkListKey].map((item) => ( ))}
      - +
      ); const CopyrightNotice = () => ( -

      - © {new Date().getFullYear()} Larder Software Limited. All rights reserved. -

      + + © {new Date().getFullYear()} Larder Software Ltd. + ); -const SitewideFooter = ({ maxWidth = '7xl' }) => { +const SitewideFooter = () => { return ( -
      - - -
      -
      -
      - - -

      - SaaS Backstage for scale-ups. -

      - -
      - {navigation.social.map((item) => ( - - ))} +
      +
      +
      +
      +
      + + + Roadie has gained SOC2 Type 2 compliance. + +
      + {navigation.social.map((item) => ( + + ))} +
      -
      - AICPA seal. Blue circle with the name AICPA inside. -

      Roadie has gained SOC2 Type 2 compliance

      +
      +
      -
      -
      -
      - -
      - -
      - -
      -
      - -
      -
      - -
      +
      + +
      -
      - -
      -
      +
      +
      -
      -
      - +
      + +
      diff --git a/src/components/icons/BackstageIcon.js b/src/components/icons/BackstageIcon.js index b45622564..14e0d8b8d 100644 --- a/src/components/icons/BackstageIcon.js +++ b/src/components/icons/BackstageIcon.js @@ -4,6 +4,8 @@ const BackstageIcon = (props) => { return ( ( + + + +); + +export default DiscordIcon; diff --git a/src/components/icons/GitHubIcon.js b/src/components/icons/GitHubIcon.js index 7fa1d2abb..86f162731 100644 --- a/src/components/icons/GitHubIcon.js +++ b/src/components/icons/GitHubIcon.js @@ -1,13 +1,7 @@ import React from 'react'; const GitHubIcon = (props) => ( - - - + ); export default GitHubIcon; diff --git a/src/components/icons/RoadieRacksIcon.js b/src/components/icons/RoadieRacksIcon.js index 43b4adb26..c68566317 100644 --- a/src/components/icons/RoadieRacksIcon.js +++ b/src/components/icons/RoadieRacksIcon.js @@ -1,17 +1,15 @@ import React from 'react'; -import theme from '../../theme'; - -const RoadieRacksIcon = ({ fill = theme.COLORS_PRIMARY_600, ...rest }) => ( - - +const RoadieRacksIcon = (props) => ( + + + + + + + + + ); diff --git a/src/components/icons/TwitterIcon.js b/src/components/icons/TwitterIcon.js index 4158f88b0..a7edfdcf7 100644 --- a/src/components/icons/TwitterIcon.js +++ b/src/components/icons/TwitterIcon.js @@ -1,9 +1,7 @@ import React from 'react'; const TwitterIcon = (props) => ( - - - + ); export default TwitterIcon; diff --git a/src/components/icons/index.js b/src/components/icons/index.js index 545cf15e2..f68358517 100644 --- a/src/components/icons/index.js +++ b/src/components/icons/index.js @@ -6,3 +6,4 @@ export { default as QuoteIcon } from './QuoteIcon'; export { default as LinkedinIcon } from './LinkedinIcon'; export { default as RoadieRacksAndWordIcon } from './RoadieRacksAndWordIcon'; export { default as RoadieRacksIcon } from './RoadieRacksIcon'; +export { default as DiscordIcon } from './DiscordIcon'; diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index 8261a7675..8aa1ba6d1 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -89,7 +89,7 @@ --fs-1: 10px; --fs-2: 12px; - --fs-3: 14px; + --fs-3: 15px; --fs-4: 17px; --fs-5: 20px; --fs-6: 27px; @@ -99,8 +99,8 @@ --lh-1: 14px; --lh-2: 17px; - --lh-3: 19px; - --lh-4: 22px; + --lh-3: 21px; + --lh-4: 23px; --lh-5: 24px; --lh-6: 28px; --lh-7: 36px; @@ -325,6 +325,10 @@ line-height: 1; } +.Text.inline { + display: inline; +} + .Container { max-width: 1064px; margin-left: auto; @@ -374,6 +378,22 @@ align-items: stretch; } +.Flex.jc-start { + justify-content: start; +} + +.Flex.jc-end { + justify-content: end; +} + +.Flex.jc-between { + justify-content: space-between; +} + +.Flex.jc-center { + justify-content: center; +} + .Flex.gap-1 { gap: var(--space-1); } @@ -723,7 +743,7 @@ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-decoration-line: none; text-decoration-thickness: 1px; - text-underline-offset: 3px; + text-underline-offset: 4px; text-decoration-color: var(--indigo-4); color: var(--indigo-11); } @@ -732,6 +752,107 @@ text-decoration-line: underline; } +.Link.lowContrast { + color: var(--gray-11); + text-decoration-color: var(--gray-4); +} + +.Link.highContrast { + color: var(--gray-12); +} + .Link .Text { color: inherit; +} + +.List { + display: flex; + flex-direction: column; + list-style: none; + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.List.gap-1 { + gap: var(--space-1); +} + +.List.gap-2 { + gap: var(--space-2); +} + +.List.gap-3 { + gap: var(--space-3); +} + +.List.gap-4 { + gap: var(--space-4); +} + +.List.gap-5 { + gap: var(--space-5); +} + +.List.gap-6 { + gap: var(--space-6); +} + +.List.gap-7 { + gap: var(--space-7); +} + +.List.gap-8 { + gap: var(--space-8); +} + +.List.gap-9 { + gap: var(--space-9); +} + +.ListItem { + line-height: 1; + box-sizing: border-box; +} + +.IconButton { + all: unset; + line-height: 1; + display: inline-flex; + align-items: center; + box-sizing: border-box; + appearance: none; + border: none; + outline: none; + cursor: default; + user-select: none; + flex-shrink: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + text-decoration: none; + justify-content: center; + border-radius: var(--br-circle); + color: var(--gray-12); +} + +.IconButton.size-1 { + height: var(--space-6); + width: var(--space-6); +} + +.IconButton.size-2 { + height: var(--space-7); + width: var(--space-7); +} + +.IconButton.size-3 { + height: var(--space-8); + width: var(--space-8); +} + +.IconButton.neutral { + color: var(--gray-12); +} + +.IconButton.neutral:hover { + background-color: var(--gray-4); } \ No newline at end of file diff --git a/src/stylesheets/tailwind.css b/src/stylesheets/tailwind.css index 927b38ed1..514c63580 100644 --- a/src/stylesheets/tailwind.css +++ b/src/stylesheets/tailwind.css @@ -12,6 +12,10 @@ @apply items-center; } +body { + color: var(--gray-12); +} + @layer base { html { @apply text-blueroadie; From 5e19ccf287f310996bc3dfec170ce48bcf829fcd Mon Sep 17 00:00:00 2001 From: colmtuite Date: Tue, 1 Aug 2023 10:54:16 +0100 Subject: [PATCH 14/34] Remove redundant imports --- src/components/SitewideFooter/index.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/components/SitewideFooter/index.js b/src/components/SitewideFooter/index.js index 0efd1db96..41eef144d 100644 --- a/src/components/SitewideFooter/index.js +++ b/src/components/SitewideFooter/index.js @@ -3,10 +3,6 @@ import { Link } from 'components'; import { TwitterIcon, GitHubIcon, DiscordIcon, BackstageIcon, RoadieRacksIcon } from 'components/icons'; import camelCase from 'lodash/camelCase'; -import soc2Seal from '../../../content/assets/logos/soc2/aicpa.jpg'; - -import theme from '../../theme'; - const navigation = { product: [ { name: 'Catalog', href: '/product/catalog' }, From a6cda7b19c6b46c6681d63ce9a8e269adc2b2829 Mon Sep 17 00:00:00 2001 From: colmtuite Date: Wed, 2 Aug 2023 16:49:53 +0100 Subject: [PATCH 15/34] First pass on homepage and component abstractions --- src/components/Logo.js | 7 +- .../SitewideHeader/SitewideHeader.js | 40 +++--- .../SitewideHeader/TopNavDropdownItem.js | 61 ++++------ src/components/SitewideHeader/TopNavItem.js | 2 +- src/components/icons/CaretDownIcon.js | 20 +++ .../icons/RoadieRacksAndWordIcon.js | 29 +++-- src/components/icons/index.js | 1 + .../FeatureBlocks/AlternatingFeatureBlock.js | 88 +++++--------- .../landing/SideBySideHero/SideBySideHero.js | 67 +++++----- .../landing/SimpleCenteredHeading.js | 15 +-- .../landing/SplitGridLogoCloud/index.js | 20 ++- .../landing/Testimonials/TestimonialsCloud.js | 22 ++-- src/pages/index.js | 114 +++++++++--------- src/pages/product/catalog.js | 50 ++++---- src/pages/product/tech-insights.js | 43 ++----- src/stylesheets/ds.css | 37 +++++- 16 files changed, 302 insertions(+), 314 deletions(-) create mode 100644 src/components/icons/CaretDownIcon.js diff --git a/src/components/Logo.js b/src/components/Logo.js index 4cd4ef12c..a96e1f2dd 100644 --- a/src/components/Logo.js +++ b/src/components/Logo.js @@ -1,16 +1,13 @@ import React from 'react'; import { Link } from 'components'; -import { RoadieRacksIcon, RoadieRacksAndWordIcon } from 'components/icons'; +import { RoadieRacksAndWordIcon } from 'components/icons'; const Logo = () => ( Roadie - + - - - ); diff --git a/src/components/SitewideHeader/SitewideHeader.js b/src/components/SitewideHeader/SitewideHeader.js index d3094a19e..3cc68c593 100644 --- a/src/components/SitewideHeader/SitewideHeader.js +++ b/src/components/SitewideHeader/SitewideHeader.js @@ -89,8 +89,6 @@ const learn = [ ]; const SitewideHeader = ({ - maxWidth = '7xl', - borderBottom = true, ctaTo = '/request-demo/', ctaText = 'Get a Demo', }) => ( @@ -102,29 +100,31 @@ const SitewideHeader = ({
      -
      - -
      +
      +
      + +
      -
      - -
      +
      +
      + +
      - - - - - - + + + + + + + +
      -
      -
      diff --git a/src/components/SitewideHeader/TopNavDropdownItem.js b/src/components/SitewideHeader/TopNavDropdownItem.js index a19570807..5eafec163 100644 --- a/src/components/SitewideHeader/TopNavDropdownItem.js +++ b/src/components/SitewideHeader/TopNavDropdownItem.js @@ -1,8 +1,7 @@ import React, { Fragment } from 'react'; import { Popover, Transition } from '@headlessui/react'; -import classnames from 'classnames'; -import { ChevronDownIcon } from '@heroicons/react/solid'; import { Link } from 'components'; +import { CaretDownIcon } from 'components/icons'; const DropdownNavItem = ({ item }) => ( ( const TopNavDropdownItem = ({ text, subItems }) => ( - {({ open }) => ( - <> - - {text} - +
      + + {text} + + - - -
      -
      - {subItems.map((item) => ( - - ))} -
      + + +
      +
      + {subItems.map((item) => ( + + ))}
      - - - - )} +
      +
      +
      +
      ); diff --git a/src/components/SitewideHeader/TopNavItem.js b/src/components/SitewideHeader/TopNavItem.js index 9ee20cb26..3c9d2aa6e 100644 --- a/src/components/SitewideHeader/TopNavItem.js +++ b/src/components/SitewideHeader/TopNavItem.js @@ -2,7 +2,7 @@ import React from 'react'; import { Link } from 'components'; const TopNavItem = ({ to, text }) => ( - + {text} ); diff --git a/src/components/icons/CaretDownIcon.js b/src/components/icons/CaretDownIcon.js new file mode 100644 index 000000000..401299b1d --- /dev/null +++ b/src/components/icons/CaretDownIcon.js @@ -0,0 +1,20 @@ +import React from 'react'; + +const CaretDownIcon = (props) => ( + + + +); + +export default CaretDownIcon; \ No newline at end of file diff --git a/src/components/icons/RoadieRacksAndWordIcon.js b/src/components/icons/RoadieRacksAndWordIcon.js index 72280fb31..b9e982372 100644 --- a/src/components/icons/RoadieRacksAndWordIcon.js +++ b/src/components/icons/RoadieRacksAndWordIcon.js @@ -1,18 +1,21 @@ import React from 'react'; -import theme from '../../theme'; - -const RoadieRacksAndWordIcon = ({ fill = theme.COLORS_PRIMARY_600, ...rest }) => ( - - - +const RoadieRacksAndWordIcon = () => ( + + + + + + + + + + + + + + + ); diff --git a/src/components/icons/index.js b/src/components/icons/index.js index f68358517..14d309da2 100644 --- a/src/components/icons/index.js +++ b/src/components/icons/index.js @@ -7,3 +7,4 @@ export { default as LinkedinIcon } from './LinkedinIcon'; export { default as RoadieRacksAndWordIcon } from './RoadieRacksAndWordIcon'; export { default as RoadieRacksIcon } from './RoadieRacksIcon'; export { default as DiscordIcon } from './DiscordIcon'; +export { default as CaretDownIcon } from './CaretDownIcon'; diff --git a/src/components/landing/FeatureBlocks/AlternatingFeatureBlock.js b/src/components/landing/FeatureBlocks/AlternatingFeatureBlock.js index 047e1c40e..1f24c440f 100644 --- a/src/components/landing/FeatureBlocks/AlternatingFeatureBlock.js +++ b/src/components/landing/FeatureBlocks/AlternatingFeatureBlock.js @@ -1,5 +1,4 @@ import React from 'react'; -import { DotPattern, Title } from 'components'; import classnames from 'classnames'; import camelCase from 'lodash/camelCase'; @@ -14,37 +13,39 @@ const FeatureBlock = ({ illustration, ctaPrompt, comingSoon, - illustrationSide = 'right', }) => ( -
      -
      +
      -
      ); @@ -88,34 +77,13 @@ export const AlternatingFeatureWrapper = ({ className, children, id }) => ( id={id} className={classnames( className, - 'relative overflow-hidden max-w-xl mx-auto px-4 sm:px-6 lg:px-28 lg:max-w-7xl' + 'Section size-3' )} > {children}
    ); -export const AlternatingFeatureBlock = ({ featureItem, illustrationSide = 'right' }) => ( -
    - {illustrationSide === 'right' ? ( - - ) : ( -
    +export const AlternatingFeatureBlock = ({ featureItem }) => ( + ); diff --git a/src/components/landing/SideBySideHero/SideBySideHero.js b/src/components/landing/SideBySideHero/SideBySideHero.js index f1b56e632..b6f9b45be 100644 --- a/src/components/landing/SideBySideHero/SideBySideHero.js +++ b/src/components/landing/SideBySideHero/SideBySideHero.js @@ -1,6 +1,5 @@ import React from 'react'; -import { Button, Headline } from 'components'; -import CatalogScreenshot from '../../../../content/assets/home/illustrations/home-product-screenshot.svg'; +import { Button } from 'components'; import { LOGOS } from '../CustomerLogoCloud'; import has from 'lodash/has'; @@ -8,44 +7,42 @@ const SideBySideHero = () => { const whiteLogos = [...LOGOS].filter(({ src }) => has(src, 'white')).slice(0, 5); return ( -
    -
    - - Batteries included Backstage - +
    +
    +
    +
    +

    + Batteries included Backstage +

    -

    - Easier, scalable and zero-maintenance. With security, scorecards and customizability built-in. -

    +

    + Easier, scalable and zero-maintenance. With security, scorecards and customizability built-in. +

    -
    +
    + + Trusted by dozens of scale-ups + +
    + {whiteLogos.map((logo) => ( + {logo.alt} + ))} +
    -
    - -
    ); }; diff --git a/src/components/landing/SimpleCenteredHeading.js b/src/components/landing/SimpleCenteredHeading.js index cfd3e3c7e..3cd17bf31 100644 --- a/src/components/landing/SimpleCenteredHeading.js +++ b/src/components/landing/SimpleCenteredHeading.js @@ -1,19 +1,16 @@ import React from 'react'; -import { Headline, Lead } from 'components'; const SimpleCenteredHeading = ({ headline, lead, - headlineSize = 'large', - headlineEl = 'h2', }) => ( -
    -
    -
    - {headline} +
    +
    +
    +

    {headline}

    -
    - {lead} +
    +

    {lead}

    diff --git a/src/components/landing/SplitGridLogoCloud/index.js b/src/components/landing/SplitGridLogoCloud/index.js index 7cc1baa70..201ba2cca 100644 --- a/src/components/landing/SplitGridLogoCloud/index.js +++ b/src/components/landing/SplitGridLogoCloud/index.js @@ -14,27 +14,25 @@ const LogoItem = ({ src }) => ( ); const SplitGridOnRight = ({ content }) => ( -
    -
    -
    -
    - {content.title} - +
    +
    +
    +
    +

    {content.title}

    +

    {content.subTitle}

    {content.link && ( -
    - {content.link.text} → -
    + {content.link.text} → )}
    -
    +
    {content.logos.map((logo) => ( ))}
    -
    +
    ); export default SplitGridOnRight; diff --git a/src/components/landing/Testimonials/TestimonialsCloud.js b/src/components/landing/Testimonials/TestimonialsCloud.js index f21445cb1..f8687c54b 100644 --- a/src/components/landing/Testimonials/TestimonialsCloud.js +++ b/src/components/landing/Testimonials/TestimonialsCloud.js @@ -15,8 +15,8 @@ const TESTIMONIALS = [{ title: 'Incredible', text: ( <> -

    The Roadie team have been incredible to work with. They're obviously Backstage experts, and their platform provides us with a ton of flexibility and integrations.

    -

    We've been able to start using Backstage must faster and we don't have to worry about the maintenance.

    +

    The Roadie team have been incredible to work with. They're obviously Backstage experts, and their platform provides us with a ton of flexibility and integrations.

    +

    We've been able to start using Backstage must faster and we don't have to worry about the maintenance.

    ), author: { @@ -33,8 +33,8 @@ const TESTIMONIALS = [{ title: 'Tremendous', text: ( <> -

    Backstage has been pivotal for our growth. And Roadie has been pivotal in supporting us at the operations, feature enhancements / roadmap, and onboarding level.

    -

    The Roadie team provides frequent updates on their offering and even more frequent answers to our questions - their support is tremendous and has eased and sped up our adoption of Backstage.

    +

    Backstage has been pivotal for our growth. And Roadie has been pivotal in supporting us at the operations, feature enhancements / roadmap, and onboarding level.

    +

    The Roadie team provides frequent updates on their offering and even more frequent answers to our questions - their support is tremendous and has eased and sped up our adoption of Backstage.

    ), author: { @@ -51,8 +51,8 @@ const TESTIMONIALS = [{ title: 'Responsive', text: ( <> -

    Having a place to gather documentation of our systems and APIs, while keeping those definitions close to the source, has been a real win.

    -

    The Roadie team has been incredibly proactive in communicating updates and responsive to all our questions.

    +

    Having a place to gather documentation of our systems and APIs, while keeping those definitions close to the source, has been a real win.

    +

    The Roadie team has been incredibly proactive in communicating updates and responsive to all our questions.

    ), author: { @@ -92,19 +92,19 @@ const Testimonial = ({ ); const Testimonials = ({ testimonials = TESTIMONIALS }) => ( -
    -
    +
    +
    -

    What our customers say

    +

    What our customers say

    -
    +
    {testimonials.map((props) => ( ))}
    -
    +
    ); export default Testimonials; diff --git a/src/pages/index.js b/src/pages/index.js index 2327985d8..ebfe41fed 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -50,32 +50,30 @@ const LEAD = `Easier, scalable and zero-maintenance. With security, scorecards a const PRODUCT = { features: [ { - title: 'Keep your Developer Portal safe', - description: 'Roadie updates your Backstage instance automatically', + title: 'Automatic Updates', + description: 'Keep your Developer Portal safe with automatic updates', illustration: { png: KeepSafeImg, alt: '', }, paragraphs: [ - 'As highlighted by Gartner’s report on Developer Portals, standing up and maintaining Backstage takes significant effort. Roadie gives you a production-grade Backstage instance and keeps it safe through regular upgrades, SSO and dedicated infrastructure.', - 'Roadie is SOC2 Type 2 Certified and uses ephemeral environments for your Scaffolder actions, a common source of risk for Open Source adopters.', + 'Keep your Backstage instance safe with automatic upgrades, SSO, dedicated infrastructure, ephemeral environments for your Scaffolder actions. Roadie is SOC2 Type 2 Certified.', ], }, { - title: 'Get all the OSS features, simplified', - description: 'Roadie brings no-code management to Backstage', + title: 'Easy-to-Use', + description: 'No-Code UI for hassle-free Backstage management', illustration: { png: NoCodeImg, alt: '', }, paragraphs: [ - 'With a vibrant community of contributors, new Backstage plugins and features are popping up regularly. Roadie brings all these features, while smoothening out rough edges like GitHub rate limits.', - 'Roadie enables plugins and integrations through a UI, which also lets you manage access and permissions. Roadie also provides advanced debugging capabilities to make it easy to navigate the unexpected, if it happens.', + 'Install plugins and integrations, manage permissions, and debug issues. All via our simple UI.', ], }, { - title: 'Make your Developer Portal truly yours', - description: 'Roadie lets you install private plugins and renderers', + title: 'Make it your own', + description: 'Install custom Backstage plugins and private renderers', illustration: { png: CustomPluginsImg, alt: '', @@ -86,8 +84,8 @@ const PRODUCT = { ], }, { - title: 'Integrate with your Kubernetes Clusters', - description: 'Roadie connects to your infrastructure using a broker ', + title: 'Kubernetes Integration', + description: 'Connect to your infrastructure using a broker', illustration: { png: KubernetesImg, alt: '', @@ -250,25 +248,26 @@ const Home = ({ data }) => { + +
    + + + + + + +
    - - - - - - - -
    -
    - + <section className="Section size-3"> + <div className="Container"> + <h3 className='Text size-7'> Leading architectural change through <nobr>Roadie Backstage</nobr> - -

    - Andy Hoffman, Caribou -
    - BackstageCon, Detroit 2022 -

    -

    + +

    + Andy Hoffman, Caribou + BackstageCon, Detroit 2022 +
    +

    Yesterday you’re a scrappy startup; today, you’re funded and have 12 months to 10x your team and system capacity. In this talk, Andy shows how Backstage—via Roadie—can help wrangle unintuitive architectures, overwhelming options, and unfamiliar patterns for @@ -276,7 +275,7 @@ const Home = ({ data }) => {

    Watch talk on YouTube → @@ -288,43 +287,40 @@ const Home = ({ data }) => {
    -
    - - Adopt Backstage through Roadie - -
    -
    - “Roadie has been fantastic to work with and allowed us to adopt Backstage without the - overhead.” -
    -
    - Andy Hoffman, DevOps Engineer Manager, Caribou -
    -
    -
    - {/* */} - -
    +
    -
    +
    diff --git a/src/pages/product/catalog.js b/src/pages/product/catalog.js index 00b28e794..944b8c4e1 100644 --- a/src/pages/product/catalog.js +++ b/src/pages/product/catalog.js @@ -126,30 +126,36 @@ const Home = ({ data }) => { -
    -
    - Yotpo logo -
    - “The Roadie team have been incredible to work with. Their platform provides us with a - ton of flexibility and integrations. We’ve been able to start using Backstage must - faster and we don’t have to worry about the maintenance.” -
    -
    Ron Barabash, Team Lead, Yotpo
    -
    - - - See the Roadie Catalog in action - -
    diff --git a/src/stylesheets/ds.css b/src/stylesheets/ds.css index 8aa1ba6d1..0c75323fb 100644 --- a/src/stylesheets/ds.css +++ b/src/stylesheets/ds.css @@ -101,8 +101,8 @@ --lh-2: 17px; --lh-3: 21px; --lh-4: 23px; - --lh-5: 24px; - --lh-6: 28px; + --lh-5: 26px; + --lh-6: 32px; --lh-7: 36px; --lh-8: 54px; @@ -329,7 +329,20 @@ display: inline; } +.Text.ta-start { + text-align: start; +} + +.Text.ta-center { + text-align: center; +} + +.Text.ta-end { + text-align: end; +} + .Container { + width: 100%; max-width: 1064px; margin-left: auto; margin-right: auto; @@ -855,4 +868,24 @@ .IconButton.neutral:hover { background-color: var(--gray-4); +} + +.HoverMenuTrigger { + all: unset; + line-height: 1; + display: inline-flex; + align-items: center; + box-sizing: border-box; + appearance: none; + font-family: inherit; + border: none; + outline: none; + cursor: default; + font-weight: var(--fw-2); + user-select: none; + flex-shrink: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + justify-content: center; + white-space: nowrap; + font-size: var(--fs-3); } \ No newline at end of file From e212d8e35cf1bfc1889ddbb2cd36d663c4e8d70b Mon Sep 17 00:00:00 2001 From: colmtuite Date: Thu, 3 Aug 2023 08:34:05 +0100 Subject: [PATCH 16/34] Second pass on global improvements --- .../illustrations/home-no-code-backstage.svg | 1 - .../assets/home/illustrations/home-nocode.png | Bin 0 -> 86828 bytes .../SitewideHeader/MobileFreeTrialButton.js | 3 +- .../SitewideHeader/SitewideHeader.js | 42 +++---- src/components/SitewideHeader/TopNavItem.js | 6 +- src/components/TopBanner/Whitepaper.js | 17 +-- src/components/TopBanner/index.js | 8 +- src/components/forms/Button.js | 57 ++++----- .../landing/FeatureBlocks/FeatureBullet.js | 23 ++-- .../FeatureBlocks/TextBasedFeatureBlock.js | 30 ++--- .../landing/SideBySideHero/SideBySideHero.js | 15 +++ .../landing/Testimonials/TestimonialsCloud.js | 30 ++--- src/components/landing/faqs.js | 14 +-- .../pricing/FeatureComparisonTable.js | 34 +++--- src/components/pricing/SectionHeader.js | 9 +- src/components/pricing/TeamsTier.js | 2 +- src/components/pricing/TierDescription.js | 2 +- src/components/pricing/TierName.js | 4 +- src/pages/index.js | 30 ++--- src/pages/pricing/index.js | 34 +++--- src/stylesheets/ds.css | 108 +++++++++++++++++- 21 files changed, 282 insertions(+), 187 deletions(-) delete mode 100644 content/assets/home/illustrations/home-no-code-backstage.svg create mode 100644 content/assets/home/illustrations/home-nocode.png diff --git a/content/assets/home/illustrations/home-no-code-backstage.svg b/content/assets/home/illustrations/home-no-code-backstage.svg deleted file mode 100644 index 478bc61f4..000000000 --- a/content/assets/home/illustrations/home-no-code-backstage.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/content/assets/home/illustrations/home-nocode.png b/content/assets/home/illustrations/home-nocode.png new file mode 100644 index 0000000000000000000000000000000000000000..c80ba0c03c6494414d31314dfb00def3073f66d8 GIT binary patch literal 86828 zcmeFZ_g7P0&_5cwNK;XfCa4spOO*}+0@4(u_b$En5(Je8=^a8<>48upy+lN5AruJ- zMTpXSl|TrPoA|!pd;fyF*8SnGvsfX?%-*x-%Ayre%eZ9|@Y;)i4bhMG?SkWr2e;u}g=RXtSz zpfQ#1+@1D4iJL#$w(h8; zKD+Fg>{tS4(qFWl$Zg<{YYli&%vYSCwDxahCy~|qoS1$IrnQ8(C13L^D}{d=HCor*=zQ*(}hsuZhYZBWntWW(uoC!pz#-9u?wBSJF`LN$2HN-s54;? z@z8U>kexHeqfQhE=$?$@m57iYwUWoLTTl??2dLOSWJ(~yV(xo}`16{6&qR)a!FOfC5mQ$fx9P_(|I&4s(8jYLGq z)Kvd=bopcX;G9V^68+%HHw{Od@S(g!mZY%VFvsY_+Q(xGM*8*UM|m^$O42^13Z^mV zr>651zAi!V;}V4fp_w%TI!B<{Az%Rid^k$ZUP8dnRSa_AOeAlh?V{2A3C)M5#^ z9h^s)u{hc~yj%m0<`J-neygbLf3w=bPd93Vah(KHRw0%$*dgPQXg`vViF%L#CyaHw z&gUx^b$6MNFJAaO@<{o|FiJAoZ!_)l*peLoVNy$&%&b^OQD?fTS%a!+!;n%yOd4X9U zV4Zz=11nO!k4fLzO>J<8Awcq%FoF;Moo}&zj1X=6i2f09#KuO)_usPfuHNENmQRcz zaM>?Hnnz`V^9h7)82U_UfHVL=_s#b<*q7GOu)21$77)sUtm&`3^ys}Hef{AUjR*H8X+JPmTZI%0myb#W6Jh#6uve7u{%d~gwLV4?OHw@to_(Tuunxw zYS7y?zwwOgg8YBQ?XWp=cZ|MV`;d!<>`8KACldkY?y0WELwo6H$vTp+0CeYp_|?O( z+c$x)Z!_Ckc1ycN#pAeEaBI;J??eU?#aAcoZT#kaA#eBekYOMSH4>jBvC3lWle1f% zn-q3XIofsl=`o9F&LpJmQ>0br0H{bFVd!;&`Db)lWmL_7HHxP=2(abuTU15l37q_z2zbm-|W1>e& zc+Z|Iew_p*(&*f~QuU8Yc%^f4x?mzc!J=-j`Kz1m8U?Ur>}dh5qq#^l4ML{Y=H0%l zT=lFTmyKNujc}oN$YPPrA0;4$xm_3&iAF183OwxE=@K2K_sJ;?TKlJH)y;w<{NP8j zjKsqKp_yCJyy3q(+dTSxMEVBznSI)66p8n%c-6g2Bfa7-@BQH zoy-5xfnUyDZrgxnsl*Nk^de^ETh64{MSS)q92BlO$d z1uq$-LjM1#e#FrzBT!p!UE#vbdBNi(&$9);_s{y@dp(colE!DFZCy2|%AO;tM>=!- z5dY7&77uJ_Pi>As;($o3xuZ=FwPgx%BrDNU?~8n+tq zzaMg9K7rVr{t?iViT``0BLDy2lN9m)0e!?6J0to%|Ki!3^I^dD)?0(gM?jCu+W=hv znfM_z{RA36HP%=^Q|wHCk)tQde;jdi`K*n@gQd`iQMxH=3HA%xbse)&gbsG$`tb}q z@vU=!w<2|(Ad-g$C0lEa;;m)Y&eM;f)rVdWe2mT60zBn2z0OaQaXpuJ*9f771jQ!= zS>hGZ^KYP;!!_jwC(6O~)>Ak_~P1Z=X7;odv8RJMcs93!@#=F2MD@=A0=D z*xzj9ZqD8iD-W(tY}agu1VRatTNC}W8uvkV4#sNE!UECk_N>f((xvCPMu#;Hn~uHM z#MF1L0_r+NMOBfe8e!j23J#s-E#Ij*R6uisw!cGh7L(oC>~ zt)Rmcn{1%yCVFMUS$M-}U1oKsaCmf7sMYeh=$Nc&30=w&%&5ZX34vh^_W1n~#`n@- z`8;(;#tWi@OkSYuYk3;eRaCyK1y9_Cu}tBy%4R#jD@bK4$OX+b6)+I2+}95=U#j8q z+|3!5JWkbf<@7q(hkKzuH zC{r%w?qq+VW99x!nZz}B0?zWRuBkLN)y>CfE01!3KhkSzC%D_YLiWohR{+c!)pjO7 z@0<%}|7FsO0LgBN4tjPML1x_`0f$wX@h!Kc+1t$X3l%txfZaS)Ky!i#Cmhw|)*@pg z@~Zc6fZwdgc;!WIk-JQD^yD6}d+%E!1c|e)&BP3hs$V|yyJYXfarLa8%M=o(UX2pm zd26!GvyU+9qXb{rySc92Z%4J=gv|n8hi+MdGZm88HG{Wmq2)?i>&G*$`?%DjwP;+t zWA_o$=d-0H(L1`Q@e3yKWJOcLwHmrBpL_NQ_XID~UxZX869$@3VaexeH^Il>Gy>Ha#)`7iO+wD{(O<@y1%q31G=?8P~Vvn4O~yOWj{|`j#Q=Z!JIpK zZytMJyl$W;up=79g4*j+O^w#KoCi=tT$WLdHH2P~RWyrW|I|v$x%S-5z@Nu0m!Dci zDBO!T@7EqPb$Q%9jt<&9_uo0(%jL95`hx16J^NN=#8i7^mcCr7ZWw53Zecb2 zO+~~+S?BN)gu znrN;-*Tkz_KwWq>r2Q2m_M}{AMef#QO`_vP>o#Alz6pe8b6l*vX+lqSSaZZ* zZ?sk>$ln%ZsRRb1gGW2fz&RF%a(z9UhhYWf9%1Mq zOlyQTX9nStBVf-lD@b}Zs%#I#zhJGKuQ3{7rPAK`d z9-G$e@shjNijXhgn&{b@FG5icAd2LuDXJ+Qn*~Xk+L-tB zgihp_T#Oharoqd8{@pt@l!1*F&K_4XOex6@O-zck8fP6bjh}Zr?cqv_hnK^G=qpLY z040WZx_$C?YOZbY4>gg=M5hH4-Y~i|ab}@Zqjl)f!Hy zycJ34uQ#my-U$noN1sg|i{t97;!LwGKWV$WOhG5YMz3VGazCxE8|DAy-}vPm0+Cv1 z?92Cn*gSYbVwFyy>@yvM^p=k`S?)>VB$Xa|y8=wP9O3s0XP@8K`*eIIN$-A46Yf2i z%>D<#r1s4kDbOoY;8-w1Gt>!r7(Xu%U+JF8R2OeK`5 zD9|l99E84$3d?_Q5ki0E3p zCI1OgPl^q#lzI&OtrIzlD%(>+Heqe&SJFf?7qkA8tl#HR-Ef>HcL?X1g}GsT>~cQDwfMPB~aGgzHr6sP{X5>A`(ay62aj=P{t~%}G)K_*0ce zk9*ynPsSh%7GcfLN4O-E5*teU1HJThvO_+>&O2FpHOJhGL5QZS#ao#lucp=axL1-m z8{~p_YC-03sf+M1Yg?%CO1|4-T*r)Cr3-7p8$ehljweW@En-=>bI&io3fwix!#@EE z(vVglvI4-4YeFhHiTEH)kzsQD_L4pGDz~_?XQ|-m6)I^e;=He!hF<0DHsRiS8JH~Z zW*F5cGLsUDufy#QxpkW5k01wqAo0n&yUp3-aH=sgflm;pAkiH{)!$05UKlb{oF=%wby;9FR z>W%Eaj*?{3+TZmRZ1q2wyv(_~4ii7_^2I&hyguP&c|JrVl_Wx+te=dVe%INO+&DnU36pGzGYFH^fRYiS49~^`e6F37)&Xu(B|9(60STT5he- zw4NruW9Y3i?YC&EsRsQNvR9d=f-HC2SKHKX}4YC2NGHHJ#s{8WG7eSmGg$ z4KOK4WVAJM{o)-@G0$zzd-3D&8n>wNOn?m&)|$@!z2ypQGjPu%!|gQ*ovCeE{jeZy z>|#%U?e&lA_FcM#T{kHQb&yFx6=!s9S{O1k!ooV_WyNojk|tkBl?2z&xp4B+JdPC< z7(vN5s!9CK?7cypAVH+9uBTs#H$uX(Qnq;%qtQ;nZ}>_%CaV9$dmgf!w_JE`xs*o- z&lB<<+M5%l|6Y@|Q@0%urQI6)Z7bMXSP)z4iH2;ZqQw3B#!WpgU0+xJB)>X=qoKdMA{;kJ zs{H!gUzKj+)VL?*-f&xNjGe@FZc)`Q*WzWuEoQ($MjlgPCCsF~FOM4Y6=_Txww2K9 z3}YLu*afk=xhTGxO!{$+d+ikqQtJ_?M6gkA5*kPHh-y&@QcAGU|_ZKew?D7JSV36rT{PO=DV=gsdQ25#h z-V+7gnUUG-tkf@(uGBAqVD@I9_@>>sOn#W#XrZDd3>Lk&Fyj~2*(>?h`M7_kab8}& zpXg267Qz~Oli$AVmglcSSap9kQXSq`85IuZAIO=ER829t8!~HjO7?SvN82tE6U79Y z6u5)r5tH{{o>+9a_}x2)Pz(Vgh33p}UHPCvK{X@NUE8^LIk*lmC(qHmi(5j;S&ag4 z>y3`9(~Y82d%RDg&joFz;r^HBIPZ1XB^NVGE!gmfiEh6^x z_2=p1q`2oz`dS?9T+&zWN9K-(dcM(^_%7F~r5V#<;8*l<7C62O+{WB|XN{0-CMOI& zC=qL&4~`Ijf?8g*Chu>(?4Ofkxon?5{;2#gdO(>+Yhd*Zy2NiW@LMsYYs^lmb#zp? zn<+PHfoN@h!#WqBZ|#p z>+N_!W>HsZ9Rgx3HO{14bD%S`zOnqiw^5Ry5V?j&d{m>^`fawFIcu43ijLN{9g<(b zM<3O}&gm%Zmauz3_%=tR+Qnt~85aehK^;K_Lo&|k4=iFm4P~rkK6xJ-nKTcVHIAkL z!pt3t$O4btF(1O`^Yr!nJ-B@(SPiK4a{fpEn}5@V@SM3rrMumGWC4rc(H}N$r~o%J zfewJ>gXuM8SE7Ngy78|WUiVR~3-{`@McPjEDdxX&5EXh0kgfb=t0EB^(#vO~NrCA= zs2h*)-{c%SRY7;!b2~yJvDF3_)$PZqkXu6q4!waN46r<@TlKK$IiB#@4|BqG0O^1z z{~e0?@IU@e!Kk@=L&GhG!5hw55=EuSy0d_oM>PRV?W@TF;yI0i@*Hz~w#)uPg@6j}GxT8_MKISaY3e1zzx|W>NAjn7GXfC*(?+iw<2C85$`| zZP}(Vz|IiOx(qrmJ0CvR>4L{spItbX5Ii3%WFs$ijKaE=s+YL+)|}`29Jw**IsEtl zmt^a&pNP$!)b0^3K2x0w7u_0qZNNjAAl|S7FaDs6BR;>|5wDI~T5l8`&AIroC^2J# zv&s9T5G3^O*DE>6xfEZ^lre9md6_xPeIb0t7r|yo^>LvqCJQbMMZi1CM~$K&8$kzi z?002mp3Pt=;eZ%7zbR)J(+6fKPEJNS(W}QNY1l^3vyhX_{~5#^Z}+OMv2KC-4J4=r zsCry@rL6MC{Vh8qt>nYJKSY?GTSx4ks)>MOeWZwaO}TA=8FSHD3MHj|Ow+BmTXVUm zwe+itb45N;#qM>Plur*M8l%=ytCz+%EV~E&ML9l$mlfil=_1BKBPW1B|R;{gT~c>{VDUH#S9nq2&CRYeDXB z923{sv?o`$glq}QG}u{rumwxCLp&fQ=MRyfK!o38Yvb=zC36)&+-%=*tUkTHmE<|z zxB&A*JTWL5Jt_K=deJoU<%}!w0>AJxT=Y#Mk`YTq={V>=3~KoE$20QUms=DVjdF5& zFNs!s51xzTyvQv1&wZ!P1;0r|04ILBOHH+fKVk9qqx#fHhtLQh0m77O6U>_Az1_vC z<6h~*ZXWDJ(1s^I-ny+b%Tl1}9Z3cdqm4?4q*?Wfb+ml@L(joZzDsE29ous4xt;T~ z5Pt8in>Oe$?_}525vTjkZsM#q*YIrmVOmEo38&2$c+F#vzbxbSP=}$UZeR=jJ%mLn zm-5T82N>Mvc;%PKz-&D=_-ak~T|c<+USVC|U8sN)Y+fAPo(T%Cwx=)nwz;!F-(%i{ z^e$Gq*wNp|?bl+*Wlpk>a~%Ijz{KSz{-#HTCjijb|}vNBL37*@<%0vP95KceImiacjNr z%Oh*4dF*>^W7_QDM-GZVE&VAlTbh{)v&nE`(4#+pede^W_=D9{jp38L*6@#KtXn?g zG_u4fRJYb^aoU8AW`1BgU?<>#MdEe`SDjotAm{h?!tdBQI(+IGKtm+Sh-LQAix)p{ z8pU#PUK#WsUARd9R53xrXnVfMf`E0beRjUzARvLQ>-~ZIBfsZKZW4K!1+t{wX5m%!oH1zK2JUroD%|+>d!0PD-R!t^@B5n1DGE6gA5UsKva8onZh z;+!;Kp)UUePSl+WEyS7(42Lk;X+WO8)6>@2bO^UiTh|2D>Gyst-X8f$i5>5qv(%dl z_$k=V748^`s*8;u00n&Gc<`ES|c_S_k|-?Brt>qE9sqf@8C@&4g&P z62L_J-q14Ha>hPVR>bS+g=qdafhg-%E|~wiIagA>vh&~(3&5@^wyY=pAcZdBPx_V{ z#5ztl0}@G$Sp%vWkHedW?dn`4hmx$BS16p@2XnbK+>agl{)URDBBRf?yA7z1w3D+H z`a#d@kS~5e(lZK*sV$HeRm-chqNAwND0->JOgmHIdkR(xfBo4P__q1WM|PjC-jS^w zilqV?IF9>Gc_B@cx7tN+?#j@puelHF`6z>o*3a(MQ*3r~j|mSt^$s~BAZCi0esQzY z-sF}Win_NUSpnVN5&OrPHU)Z5WpvnNhd?8DP18MoE-Hh0YM7Z<>RSg>d74uE&qz7X z#Ya*@8QfYu0nu>?oiS=vlt9M8`}ntdqq#FeA<)9B?lLU5*rnZHYkkx>^GV$>{LTEI zaOZnq?fy9%l;Mwp(L-X=xBRo?d#+6ND8vNu`G)V5uo1J=_+PcrIHf_I@d9lT)U*2> zlOrtyWolfh_1|A$pm{Jrs%?RZV><1T!0YTkp?mdxik05AP*C0V+v__I{+_uerIJ=zD= zrP`Y>7!LBB4Tnt>2BA{9GX82#gDS20095SV_@uXqeb@6Y-P(XEm z>$qQmg{G~ER(lRLUF>1bPBcum;(nyP$gM<$rXLA* z^+JK<&J2JUtNUu)V<%q56DBV8km7`7=zSHN*kGf0@1c-t&mg(+Vl!W%sD!AUT!ntr z+aIyFxW?ZueJajF$lv^Lc<(M<{}{pxnD*HGe4?+-y3F9@(;C#P;p_L-)ME;@A3NnY@1Ph|VQ<#AUI@@( zuV$)iolxs(MS1z#HrzY<6@rPYbMx=riHlb>_OCw+87-38YhQ{Q;>M+$`|_~tXI#-1 zzsp1==X#s|Q{P+1rx}UbzPBx9^7-^U`;ODux*n6gr~F#IJ)f#h{tYRnYx%Oq+($Oj zI6}V6`Kf>wcEAQ}`~-sSRilw7+wg*&K+H?eUw12n4e~^qC$1dk{JQN z@EBh4a(d;dWxr?-G5q(|J28(aUw!2c#_kBlr^^C&tNxkkIHMCG1+RGG9~bUdc{n11hTckPh&* z<@dA5-T3gs`ShtkMMqA}JC0SVqlp07c!9yXxTQ_ES6quV`vWeh{94l@tM9;zv6BB# zhuLIbKgYq_B5nu1mojYnr5w5LSjVQy6*|^kYyP4fpL=^K^HmIw_Sb&u+#3pSw^ni= zrG7jBIbW=L6$_}^+19mr)>A52&h%&<1$J9E8AQei%{{=IacwmYT-v?B3n6M(D&8Y+ zFhQ1tLJ_h#Uyyciz5872I=**N{S{hb!dv%cN);Y`KI5Q+A0*e@>Q5_NV*vnO)IzMb zB9UEJVwc1p=Mvf?vn?2Jt1)lUgFX&hv96&gLS>Gg%opD;>si9{cWO&QyfYJb24IKf z`o7}oBCF-n&)w@BcDs%!0-VKi5>KX^c5C}hM>SA7sEA?})o9z;X=F=((oC@VE-{hV z&SA1Bla}F_1*c~5&I~xF&i$ErtiNM9^maa^>%0-y7k^h$c1T+1nq2>zQdr=~AMJHD%PMM`)&$9U->rK7Meuw)!r)k{F zmOva!9BcTBM7vmSQjeNyGo?&){v$*DLn*K7#1Pt7JqO49O?52S!2A7aM|)5JfC? zJ6RPqKe-G=eTs>w7OU%Mp>S~&AnP-B$_LEjka3A<(lx(SfcNYk!=}Rtf0-_OqOCno zj0~pWcQ;Eqrf?U$bKH)bDKiE?_h$DnM1vtEg9*$AH}$r8r*{i%J1Exq;61nHS!|=< z)ean^_mUy0BOwsE(J1)O6|*yEpDzk;*U&eIiCsVie+Xy0Oe3S#ogwsN+D& zry;k@_117mg|SghnN`J zv8JTbBT1JgiUZ≶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­-s`~r8H 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 C^IGZv literal 0 HcmV?d00001 diff --git a/src/components/SitewideHeader/MobileFreeTrialButton.js b/src/components/SitewideHeader/MobileFreeTrialButton.js index 7281773c2..cf851cc6d 100644 --- a/src/components/SitewideHeader/MobileFreeTrialButton.js +++ b/src/components/SitewideHeader/MobileFreeTrialButton.js @@ -5,10 +5,9 @@ const MobileFreeTrialButton = () => (
    + + + + + + + +
    + +
    +
    diff --git a/src/components/SitewideHeader/TopNavItem.js b/src/components/SitewideHeader/TopNavItem.js index 3c9d2aa6e..afd895718 100644 --- a/src/components/SitewideHeader/TopNavItem.js +++ b/src/components/SitewideHeader/TopNavItem.js @@ -2,8 +2,10 @@ import React from 'react'; import { Link } from 'components'; const TopNavItem = ({ to, text }) => ( - - {text} + + + {text} + ); diff --git a/src/components/TopBanner/Whitepaper.js b/src/components/TopBanner/Whitepaper.js index c28a05458..f0b040b2a 100644 --- a/src/components/TopBanner/Whitepaper.js +++ b/src/components/TopBanner/Whitepaper.js @@ -2,13 +2,16 @@ import React from 'react'; import { Link } from 'components'; const WhitepaperVs = () => ( - - Whitepaper - Self-hosting Backstage vs managed Backstage - +
    + Whitepaper + Self-hosting Backstage vs managed Backstage + + Learn more + +
    ); export default WhitepaperVs; diff --git a/src/components/TopBanner/index.js b/src/components/TopBanner/index.js index 556286658..10a8f00b5 100644 --- a/src/components/TopBanner/index.js +++ b/src/components/TopBanner/index.js @@ -1,11 +1,9 @@ import React from 'react'; const TopBanner = ({ children }) => ( -
    -
    -
    - {children} -
    +
    +
    + {children}
    ); diff --git a/src/components/forms/Button.js b/src/components/forms/Button.js index 90f431ab2..cefc119cd 100644 --- a/src/components/forms/Button.js +++ b/src/components/forms/Button.js @@ -14,15 +14,15 @@ const Button = ({ postfixIcon, ...props }) => { - const baseClassName = 'flex items-center justify-center border border-transparent text-base font-medium rounded-md disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-300 disabled:text-gray-900'; - const buttonBaseClassName = 'shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-2'; - const primaryBaseClass = 'text-white font-bold tracking-wide bg-primary-700 hover:bg-primary-600'; - const secondaryBaseClass = 'text-blueroadie bg-white hover:bg-gray-50'; - const insetBaseClass = 'text-primary-700 bg-primary-100 hover:bg-primary-200'; + const baseClassName = ''; + const buttonBaseClassName = ''; + const primaryBaseClass = ''; + const secondaryBaseClass = ''; + const insetBaseClass = ''; - const smallBaseClass = 'px-3 py-1'; - const mediumBaseClass = 'px-5 py-3 text-lg'; - const largeBaseClass = 'px-8 py-3 md:py-4 md:text-lg md:px-10'; + const smallBaseClass = ''; + const mediumBaseClass = ''; + const largeBaseClass = ''; // Maintain backwards compatability. if (icon) { @@ -34,31 +34,24 @@ const Button = ({ if (link) { return ( -
    - - {prefixIcon} - {text} - {postfixIcon} - -
    + {prefixIcon} + {text} + {postfixIcon} + ); } diff --git a/src/components/landing/FeatureBlocks/FeatureBullet.js b/src/components/landing/FeatureBlocks/FeatureBullet.js index faf4bb208..7a61a86e8 100644 --- a/src/components/landing/FeatureBlocks/FeatureBullet.js +++ b/src/components/landing/FeatureBlocks/FeatureBullet.js @@ -3,28 +3,23 @@ import React from 'react'; import classnames from 'classnames'; const FeatureBulletPoint = ({ item, boxedIcons = true }) => ( -
    -
    -
    +
    +
    +
    -

    {item.name}

    +
    {item.name}
    -
    {item.description}
    +
    +

    {item.description}

    +
    ); diff --git a/src/components/landing/FeatureBlocks/TextBasedFeatureBlock.js b/src/components/landing/FeatureBlocks/TextBasedFeatureBlock.js index c5454bed0..558def966 100644 --- a/src/components/landing/FeatureBlocks/TextBasedFeatureBlock.js +++ b/src/components/landing/FeatureBlocks/TextBasedFeatureBlock.js @@ -1,5 +1,4 @@ import React from 'react'; -import { Lead, Headline } from 'components'; import Bullet from './FeatureBullet'; @@ -9,24 +8,19 @@ const FeatureBlock = ({ bullets, prompt, }) => ( -
    -
    -
    - {prompt && ( -

    - {prompt} -

    - )} - {title} - -
    - {description} -
    +
    +
    + {prompt && ( + {prompt} + )} +

    {title}

    +
    +

    {description}

    -
    -
    +
    +
    {bullets.map((item) => ())}
    @@ -34,9 +28,9 @@ const FeatureBlock = ({ ); const TextBasedFeatureBlock = ({ content }) => ( -
    +
    {content.features.map((props) => ( -
    +
    ))} diff --git a/src/components/landing/SideBySideHero/SideBySideHero.js b/src/components/landing/SideBySideHero/SideBySideHero.js index b6f9b45be..8a923bcb3 100644 --- a/src/components/landing/SideBySideHero/SideBySideHero.js +++ b/src/components/landing/SideBySideHero/SideBySideHero.js @@ -42,6 +42,21 @@ const SideBySideHero = () => {
    +
    +
    +
    + Tech Insights +
    +
    +
    +
    + Tech Insights +
    +
    + Tech Insights +
    +
    +
    ); diff --git a/src/components/landing/Testimonials/TestimonialsCloud.js b/src/components/landing/Testimonials/TestimonialsCloud.js index f8687c54b..9a23fafd6 100644 --- a/src/components/landing/Testimonials/TestimonialsCloud.js +++ b/src/components/landing/Testimonials/TestimonialsCloud.js @@ -12,11 +12,10 @@ import jonAvatar from '../../../../content/assets/home/testimonial/jon-ncsa/avat import jonAvatarJpeg from '../../../../content/assets/home/testimonial/jon-ncsa/avatar.jpeg'; const TESTIMONIALS = [{ - title: 'Incredible', + title: '“Incredible”', text: ( <> -

    The Roadie team have been incredible to work with. They're obviously Backstage experts, and their platform provides us with a ton of flexibility and integrations.

    -

    We've been able to start using Backstage must faster and we don't have to worry about the maintenance.

    +

    “The Roadie team have been incredible to work with. Their platform provides us with a ton of flexibility and integrations and we don't have to worry about maintenance.”

    ), author: { @@ -30,11 +29,11 @@ const TESTIMONIALS = [{ }, }, }, { - title: 'Tremendous', + title: '“Tremendous”', text: ( <> -

    Backstage has been pivotal for our growth. And Roadie has been pivotal in supporting us at the operations, feature enhancements / roadmap, and onboarding level.

    -

    The Roadie team provides frequent updates on their offering and even more frequent answers to our questions - their support is tremendous and has eased and sped up our adoption of Backstage.

    +

    “Backstage has been pivotal for our growth. And Roadie has been pivotal in supporting us at the operations, feature enhancements / roadmap, and onboarding level.

    +

    The Roadie team provides frequent updates on their offering and even more frequent answers to our questions - their support is tremendous and has eased and sped up our adoption of Backstage.”

    ), author: { @@ -48,11 +47,11 @@ const TESTIMONIALS = [{ }, }, }, { - title: 'Responsive', + title: '“Responsive”', text: ( <> -

    Having a place to gather documentation of our systems and APIs, while keeping those definitions close to the source, has been a real win.

    -

    The Roadie team has been incredibly proactive in communicating updates and responsive to all our questions.

    +

    “Having a place to gather documentation of our systems and APIs, while keeping those definitions close to the source, has been a real win.

    +

    The Roadie team has been incredibly proactive in communicating updates and responsive to all our questions.”

    ), author: { @@ -74,17 +73,17 @@ const Testimonial = ({ }) => (
    -
    -

    {title}

    +
    + {title} {text}
    -
    {author.name}
    -
    {author.role}
    -
    {author.company}
    +
    {author.name}
    +
    {author.role}
    +
    {author.company}
    @@ -94,7 +93,8 @@ const Testimonial = ({ const Testimonials = ({ testimonials = TESTIMONIALS }) => (
    -
    +
    +

    Testimonials

    What our customers say

    diff --git a/src/components/landing/faqs.js b/src/components/landing/faqs.js index 965914596..865190af2 100644 --- a/src/components/landing/faqs.js +++ b/src/components/landing/faqs.js @@ -68,19 +68,19 @@ const FAQ_CONTENT = [ const Item = ({ question, answer }) => (
    -
    {question}
    -
    {answer()}
    +
    {question}
    +
    {answer()}
    ); const FAQs = ({ faqs = FAQ_CONTENT, heading = 'Frequently asked questions' }) => ( -
    - +
    +

    {heading} - +

    -
    -
    +
    +
    {faqs.map((faq) => ( ))} diff --git a/src/components/pricing/FeatureComparisonTable.js b/src/components/pricing/FeatureComparisonTable.js index a6f734e01..761429779 100644 --- a/src/components/pricing/FeatureComparisonTable.js +++ b/src/components/pricing/FeatureComparisonTable.js @@ -83,21 +83,27 @@ const sections = [{ const FeatureNameHeaderCell = ({ feature }) => ( - - {feature.name} + + + {feature.name} + ); const FeatureInTierIndicatorText = ({ text }) => ( - {text} + + {text} + ); const FeatureInTierIndicatorIcon = ({ featureTier, tier }) => ( <> {featureTier === true ? ( -