diff --git a/primers/_index.md b/primers/_index.md
index d209d3be4..1a55258ea 100644
--- a/primers/_index.md
+++ b/primers/_index.md
@@ -2,6 +2,7 @@
+++
title="Primers"
date="28 Dec 2022 12:22:11 BST"
+menu="syllabus"
+++
forhugo-->
diff --git a/primers/distributed-software-systems-architecture/_index.md b/primers/distributed-software-systems-architecture/_index.md
index 658451e71..011356b6a 100644
--- a/primers/distributed-software-systems-architecture/_index.md
+++ b/primers/distributed-software-systems-architecture/_index.md
@@ -27,7 +27,7 @@ Some workloads are too high to be served from a single machine. We use distribut
Almost all computer systems that we build today are distributed systems, whether large or small.
-{{< details summary="Glossary of Abbreviations" >}}
+Glossary of Abbreviations
API
: Application Programming Interface
@@ -94,4 +94,4 @@ UDP
3PC
: 3 Phase Commit
-{{ details >}}
+
diff --git a/projects/README.md b/projects/README.md
index cedc5af62..7a0bfd031 100644
--- a/projects/README.md
+++ b/projects/README.md
@@ -1,6 +1,7 @@
diff --git a/website/archetypes/default.md b/website/archetypes/default.md
deleted file mode 100644
index c1debbe52..000000000
--- a/website/archetypes/default.md
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/website/assets/styles/01-mixins/backdrop.scss b/website/assets/custom-theme/01-mixins/backdrop.scss
similarity index 100%
rename from website/assets/styles/01-mixins/backdrop.scss
rename to website/assets/custom-theme/01-mixins/backdrop.scss
diff --git a/website/assets/styles/01-mixins/grid-assign.scss b/website/assets/custom-theme/01-mixins/grid-assign.scss
similarity index 100%
rename from website/assets/styles/01-mixins/grid-assign.scss
rename to website/assets/custom-theme/01-mixins/grid-assign.scss
diff --git a/website/assets/styles/01-mixins/grid-breakout.scss b/website/assets/custom-theme/01-mixins/grid-breakout.scss
similarity index 100%
rename from website/assets/styles/01-mixins/grid-breakout.scss
rename to website/assets/custom-theme/01-mixins/grid-breakout.scss
diff --git a/website/assets/styles/01-mixins/grid-default.scss b/website/assets/custom-theme/01-mixins/grid-default.scss
similarity index 100%
rename from website/assets/styles/01-mixins/grid-default.scss
rename to website/assets/custom-theme/01-mixins/grid-default.scss
diff --git a/website/assets/styles/01-mixins/offscreen.scss b/website/assets/custom-theme/01-mixins/offscreen.scss
similarity index 100%
rename from website/assets/styles/01-mixins/offscreen.scss
rename to website/assets/custom-theme/01-mixins/offscreen.scss
diff --git a/website/assets/styles/01-mixins/offset.scss b/website/assets/custom-theme/01-mixins/offset.scss
similarity index 100%
rename from website/assets/styles/01-mixins/offset.scss
rename to website/assets/custom-theme/01-mixins/offset.scss
diff --git a/website/assets/styles/01-mixins/on-event.scss b/website/assets/custom-theme/01-mixins/on-event.scss
similarity index 100%
rename from website/assets/styles/01-mixins/on-event.scss
rename to website/assets/custom-theme/01-mixins/on-event.scss
diff --git a/website/assets/styles/01-mixins/patterns.scss b/website/assets/custom-theme/01-mixins/patterns.scss
similarity index 100%
rename from website/assets/styles/01-mixins/patterns.scss
rename to website/assets/custom-theme/01-mixins/patterns.scss
diff --git a/website/assets/styles/01-mixins/pin.scss b/website/assets/custom-theme/01-mixins/pin.scss
similarity index 100%
rename from website/assets/styles/01-mixins/pin.scss
rename to website/assets/custom-theme/01-mixins/pin.scss
diff --git a/website/assets/styles/01-mixins/screen.scss b/website/assets/custom-theme/01-mixins/screen.scss
similarity index 100%
rename from website/assets/styles/01-mixins/screen.scss
rename to website/assets/custom-theme/01-mixins/screen.scss
diff --git a/website/assets/styles/02-variables/borders.scss b/website/assets/custom-theme/02-variables/borders.scss
similarity index 100%
rename from website/assets/styles/02-variables/borders.scss
rename to website/assets/custom-theme/02-variables/borders.scss
diff --git a/website/assets/styles/02-variables/colors.scss b/website/assets/custom-theme/02-variables/colors.scss
similarity index 100%
rename from website/assets/styles/02-variables/colors.scss
rename to website/assets/custom-theme/02-variables/colors.scss
diff --git a/website/assets/styles/02-variables/fonts.scss b/website/assets/custom-theme/02-variables/fonts.scss
similarity index 100%
rename from website/assets/styles/02-variables/fonts.scss
rename to website/assets/custom-theme/02-variables/fonts.scss
diff --git a/website/assets/styles/02-variables/spacing.scss b/website/assets/custom-theme/02-variables/spacing.scss
similarity index 100%
rename from website/assets/styles/02-variables/spacing.scss
rename to website/assets/custom-theme/02-variables/spacing.scss
diff --git a/website/assets/styles/02-variables/type-scale.scss b/website/assets/custom-theme/02-variables/type-scale.scss
similarity index 100%
rename from website/assets/styles/02-variables/type-scale.scss
rename to website/assets/custom-theme/02-variables/type-scale.scss
diff --git a/website/assets/styles/03-elements/base.scss b/website/assets/custom-theme/03-elements/base.scss
similarity index 75%
rename from website/assets/styles/03-elements/base.scss
rename to website/assets/custom-theme/03-elements/base.scss
index 957aeef92..636cd6673 100644
--- a/website/assets/styles/03-elements/base.scss
+++ b/website/assets/custom-theme/03-elements/base.scss
@@ -1,11 +1,5 @@
-* {
- box-sizing: border-box;
-}
body,
html {
- font-family: var(--theme-font--copy);
- font-size: 100%;
- background-color: var(--theme-color--paper);
background-image: url("./pictures/svgs/neons/nnneon-hex.svg"),
url("./pictures/svgs/quads/qqquad-02.svg"),
radial-gradient(
@@ -19,7 +13,7 @@ html {
margin: 0;
padding: 0;
height: 100%;
- animation: fade-in 0.2s;
+ animation: fade-in 0.6s;
}
html {
diff --git a/website/assets/styles/03-elements/buttons.scss b/website/assets/custom-theme/03-elements/buttons.scss
similarity index 91%
rename from website/assets/styles/03-elements/buttons.scss
rename to website/assets/custom-theme/03-elements/buttons.scss
index 8674b435c..d25fc6f3a 100644
--- a/website/assets/styles/03-elements/buttons.scss
+++ b/website/assets/custom-theme/03-elements/buttons.scss
@@ -29,7 +29,8 @@
#{$rule}: var(--button-#{$rule});
}
- transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275),
+ transition:
+ all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275),
border-color 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
@include on-event {
@@ -52,9 +53,10 @@
// sometimes buttons have an icon or are only visibly an icon
&__icon,
+ &__icon svg,
&--icon {
// enforce tap sizing
- $taps: height, width, min-width, max-width;
+ $taps: height, width, min-width, max-width, font-size;
@each $rule in $taps {
#{$rule}: var(--theme-spacing--touchtarget);
}
@@ -64,6 +66,7 @@
box-shadow: none;
color: currentColor;
place-content: center;
+ border-radius: 0;
@include on-event {
background: transparent;
diff --git a/website/assets/styles/03-elements/headings.scss b/website/assets/custom-theme/03-elements/headings.scss
similarity index 90%
rename from website/assets/styles/03-elements/headings.scss
rename to website/assets/custom-theme/03-elements/headings.scss
index 7d823504c..5ffbd2d84 100644
--- a/website/assets/styles/03-elements/headings.scss
+++ b/website/assets/custom-theme/03-elements/headings.scss
@@ -13,9 +13,16 @@ $heading__levels: 1, 2, 3, 4, 5, 6;
}
}
+h1,
+.e-heading__1,
h4,
.e-heading__4 {
text-transform: uppercase;
+ background-color: transparent;
+}
+
+h4,
+.e-heading__4 {
color: var(--theme-color--accent);
}
diff --git a/website/assets/styles/04-components/contributor.scss b/website/assets/custom-theme/04-components/contributor.scss
similarity index 100%
rename from website/assets/styles/04-components/contributor.scss
rename to website/assets/custom-theme/04-components/contributor.scss
diff --git a/website/assets/styles/04-components/copy.scss b/website/assets/custom-theme/04-components/copy.scss
similarity index 79%
rename from website/assets/styles/04-components/copy.scss
rename to website/assets/custom-theme/04-components/copy.scss
index f67390809..af337b617 100644
--- a/website/assets/styles/04-components/copy.scss
+++ b/website/assets/custom-theme/04-components/copy.scss
@@ -8,3 +8,11 @@
padding: var(--theme-spacing--6);
max-width: var(--theme-spacing--linelength);
}
+
+span {
+ toggle-root: check self;
+}
+
+span:toggle(check) {
+ text-decoration: line-through;
+}
\ No newline at end of file
diff --git a/website/assets/styles/04-components/page-footer.scss b/website/assets/custom-theme/04-components/page-footer.scss
similarity index 100%
rename from website/assets/styles/04-components/page-footer.scss
rename to website/assets/custom-theme/04-components/page-footer.scss
diff --git a/website/assets/custom-theme/04-components/page-header.scss b/website/assets/custom-theme/04-components/page-header.scss
new file mode 100644
index 000000000..5b4e5d3fd
--- /dev/null
+++ b/website/assets/custom-theme/04-components/page-header.scss
@@ -0,0 +1,42 @@
+.c-page-header {
+ &__breadcrumbs {
+ padding: 0; //no emojis on this layout so no need for extra padding
+ }
+ &__container {
+ .c-page-header--toc:not(.c-page-header--solo) & {
+ @media (min-width: $c-max) {
+ grid-template:
+ ". " var(--gap)
+ "breadcrumbs " min-content
+ "toc " auto
+ ". " var(--gap)
+ "title " min-content
+ "subtitle " min-content
+ "description " min-content
+ / 1fr;
+ margin-bottom: calc(-1 * var(--theme-spacing--2));
+ }
+ }
+ }
+
+ &__toc {
+ position: sticky;
+ top: 0;
+ .c-toc {
+ max-height: none;
+ }
+ }
+ .p-home & {
+ position: absolute;
+ bottom: 0;
+ margin-bottom: calc(-1 * var(--theme-spacing--6));
+ .c-page-header__title {
+ max-width: 16ch;
+ font: var(--theme-font--brand);
+ font-size: var(--theme-type-size--1);
+ text-shadow: initial;
+ color: var(--theme-color--brand);
+ mix-blend-mode: saturation;
+ }
+ }
+}
diff --git a/website/assets/styles/04-components/person-profile.scss b/website/assets/custom-theme/04-components/person-profile.scss
similarity index 100%
rename from website/assets/styles/04-components/person-profile.scss
rename to website/assets/custom-theme/04-components/person-profile.scss
diff --git a/website/assets/custom-theme/04-components/search.scss b/website/assets/custom-theme/04-components/search.scss
new file mode 100644
index 000000000..95bc0a635
--- /dev/null
+++ b/website/assets/custom-theme/04-components/search.scss
@@ -0,0 +1,3 @@
+#search .pagefind-ui__search-input {
+ background: var(--theme-color--backdrop-to) !important;
+}
diff --git a/website/assets/styles/04-components/splash.scss b/website/assets/custom-theme/04-components/splash.scss
similarity index 71%
rename from website/assets/styles/04-components/splash.scss
rename to website/assets/custom-theme/04-components/splash.scss
index 25fe3628d..ee55e99ef 100644
--- a/website/assets/styles/04-components/splash.scss
+++ b/website/assets/custom-theme/04-components/splash.scss
@@ -1,14 +1,17 @@
.c-splash {
- // background: var(--theme-color--ink);
- // color: var(--theme-color--paper);
-
+ margin-top: var(--theme-spacing--6);
+ transform: rotate(-3.5deg);
@include backdrop(true, true, 0.6);
border-top: var(--theme-spacing--gutter) solid var(--theme-color--pop);
border-radius: 8px 8px 2px 2px;
+ box-shadow: var(--theme-box-shadow);
padding: var(--theme-spacing--gutter);
max-width: var(--theme-spacing--linelength);
+ text-wrap: balance;
font: var(--theme-font--system);
+ animation: float 6s infinite alternate ease-in-out;
+
strong,
a {
font-size: var(--theme-type-size--4);
diff --git a/website/assets/styles/04-components/timeline.scss b/website/assets/custom-theme/04-components/timeline.scss
similarity index 100%
rename from website/assets/styles/04-components/timeline.scss
rename to website/assets/custom-theme/04-components/timeline.scss
diff --git a/website/assets/styles/04-components/toc.scss b/website/assets/custom-theme/04-components/toc.scss
similarity index 78%
rename from website/assets/styles/04-components/toc.scss
rename to website/assets/custom-theme/04-components/toc.scss
index 6a64e59d6..0498e652f 100644
--- a/website/assets/styles/04-components/toc.scss
+++ b/website/assets/custom-theme/04-components/toc.scss
@@ -3,17 +3,21 @@
.c-toc {
color: var(--theme-color--accent);
- max-width: var(--theme-spacing--container);
border: var(--theme-border--thick);
+ padding: var(--gap);
ol {
color: var(--theme-color--ink);
- padding-right: var(--theme-spacing--gutter);
+ text-transform: uppercase;
+ ol {
+ padding-left: var(--theme-spacing--gutter);
+ }
}
ol li {
text-transform: uppercase;
font-family: var(--theme-font--display);
+ font-weight: 500;
a,
a:link {
diff --git a/website/assets/custom-theme/layout/header.scss b/website/assets/custom-theme/layout/header.scss
new file mode 100644
index 000000000..0b3145fc9
--- /dev/null
+++ b/website/assets/custom-theme/layout/header.scss
@@ -0,0 +1,44 @@
+.l-header {
+ grid-template:
+ " . ......... . " var(--theme-spacing--2)
+ " . container ." minmax(0, 1fr)
+ " . ......... ." var(--theme-spacing--3) / minmax(
+ var(--theme-spacing--gutter),
+ 1fr
+ )
+ var(--theme-spacing--container) minmax(var(--theme-spacing--gutter), 1fr);
+ @include pattern(dots, var(--theme-color--pop), null, false, 0.5);
+ background: initial;
+ border: initial;
+ box-shadow: initial;
+ backdrop-filter: initial;
+
+ &__container {
+ grid-template:
+ "heading . search . action" min-content/max-content var(
+ --theme-spacing--4
+ )
+ 1fr var(--theme-spacing--4) min-content;
+ }
+
+ &__action {
+ background: var(--theme-color--brand);
+ height: 100vh;
+ position: fixed;
+ right: 0;
+ top: 0;
+ align-items: flex-start;
+ padding: var(--theme-spacing--2) var(--theme-spacing--3) 0
+ var(--theme-spacing--2);
+
+ @include on-event() {
+ background-color: var(--theme-color--accent);
+ color: var(--theme-color--paper);
+ }
+
+ svg {
+ height: fit-content;
+ align-items: flex-start;
+ }
+ }
+}
diff --git a/website/assets/custom-theme/layout/layout.scss b/website/assets/custom-theme/layout/layout.scss
new file mode 100644
index 000000000..d98984ab9
--- /dev/null
+++ b/website/assets/custom-theme/layout/layout.scss
@@ -0,0 +1,10 @@
+ .l-layout {
+ grid-template:
+ " header header header header" auto
+ " ...... main ...... ......" 1fr
+ " ...... footer ...... ......" auto /
+ minmax(var(--theme-spacing--gutter), 1fr)
+ var(--theme-spacing--container)
+ var(--theme-spacing--gutter)
+ minmax(var(--theme-spacing--touchtarget), 1fr);
+ }
\ No newline at end of file
diff --git a/website/assets/custom-theme/layout/menu.scss b/website/assets/custom-theme/layout/menu.scss
new file mode 100644
index 000000000..fbb4f6fea
--- /dev/null
+++ b/website/assets/custom-theme/layout/menu.scss
@@ -0,0 +1,29 @@
+.l-menu {
+ @include pattern(graph, currentColor, b, false, 0.2);
+ @include backdrop(true, true, 0.6);
+ z-index: 5;
+ width: fit-content;
+ --box-shadow: var(--theme-color--ink-fade);
+ box-shadow: -20px -2px 30px var(--box-shadow);
+ text-transform: lowercase;
+
+ .is-dark-mode & {
+ --box-shadow: var(--theme-color--contrast-max);
+ }
+
+ &__container {
+ max-height: calc(100vh - 2 * var(--theme-spacing--4));
+ grid-template:
+ ". ....... ......... ......... ." var(--gap)
+ ". heading ......... action ." min-content
+ ". ....... ......... ......... ." var(--gap)
+ ". primary primary primary ." 1fr
+ ". secondary secondary secondary ." var(--theme-spacing--touchtarget)
+ ". ....... ......... ......... ." var(--gap) / var(--gap)
+ 1fr 1fr var(--theme-spacing--touchtarget) var(--gap);
+ }
+ &__secondary {
+ background: transparent;
+ width: auto;
+ }
+}
diff --git a/website/assets/styles/states/dark.scss b/website/assets/custom-theme/states/dark.scss
similarity index 100%
rename from website/assets/styles/states/dark.scss
rename to website/assets/custom-theme/states/dark.scss
diff --git a/website/assets/custom-theme/states/inert.scss b/website/assets/custom-theme/states/inert.scss
new file mode 100644
index 000000000..2b7c4d4db
--- /dev/null
+++ b/website/assets/custom-theme/states/inert.scss
@@ -0,0 +1,3 @@
+[inert] > * {
+ opacity: 0.5;
+}
\ No newline at end of file
diff --git a/website/assets/styles/states/light.scss b/website/assets/custom-theme/states/light.scss
similarity index 100%
rename from website/assets/styles/states/light.scss
rename to website/assets/custom-theme/states/light.scss
diff --git a/website/assets/scripts/app.js b/website/assets/scripts/app.js
deleted file mode 100644
index 73a293b99..000000000
--- a/website/assets/scripts/app.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// I haven't written anything fancy here, just a few things to make the site work
-document.addEventListener("DOMContentLoaded", () => {
- // menu toggle
- const menuToggles = document.querySelectorAll(".js-menu-toggle");
- const menu = document.getElementById("site-menu");
- const skipLink = document.getElementById("skip-link");
- function toggleMenu() {
- menu.classList.toggle("is-active");
- menu.toggleAttribute("hidden");
- if (menu.getAttribute("hidden") == null) {
- menu.focus();
- } else {
- skipLink.focus();
- }
- }
- // listeners - we allow anything to toggle Menu if nominated with the class
- menuToggles.forEach((toggle) => toggle.addEventListener("click", toggleMenu));
-
- // if the menu is open listen for escape key to close it
- window.addEventListener("keydown", (e) => {
- if (e.key === "Escape" && menu.classList.contains("is-active")) {
- toggleMenu();
- }
- // if meta plus slash key combination is pressed toggle the menu
- if (e.key === "/" && e.metaKey) {
- toggleMenu();
- }
- });
-
- // dark mode toggle
- const darkModeToggle = document.getElementById("mode-toggle");
- darkModeToggle.addEventListener("click", () => {
- document.body.classList.toggle("is-dark-mode");
- document.body.classList.toggle("is-light-mode");
- });
-
- //details toggle
- const toggleDetails = document.getElementById("toggle-details");
-
- if (toggleDetails) {
- toggleDetails.addEventListener("click", () => {
- document.querySelectorAll("details").forEach((detail) => {
- detail.open = !detail.open;
- });
- });
- if (window.location.hash === "#toggle-details") {
- toggleDetails.click(); // send people straight to the toggled details
- }
- }
-});
diff --git a/website/assets/styles/03-elements/images.scss b/website/assets/styles/03-elements/images.scss
deleted file mode 100644
index d5decfb52..000000000
--- a/website/assets/styles/03-elements/images.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-svg {
- height: 100%;
- width: auto;
- min-width: var(--theme-spacing--touchtarget);
-}
-
-img {
- width: 100%;
- height: 100%;
- max-width: 100%;
- object-fit: cover;
-}
-
-picture {
- height: auto;
- overflow: hidden;
-}
diff --git a/website/assets/styles/03-elements/links.scss b/website/assets/styles/03-elements/links.scss
deleted file mode 100644
index 9b822f62f..000000000
--- a/website/assets/styles/03-elements/links.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-a {
- color: currentColor;
- text-decoration: none;
- transition: all 0.3s;
-}
-
-a:not([class]),
-a:link:not([class]),
-a:visited:not([class]),
-.e-link {
- color: currentColor;
- text-decoration: underline;
- text-decoration-style: dotted;
-
- @include on-event {
- text-decoration: underline;
- outline: none;
- }
- &:focus {
- outline: 2px dotted;
- }
-}
diff --git a/website/assets/styles/03-elements/misc-phrasing.scss b/website/assets/styles/03-elements/misc-phrasing.scss
deleted file mode 100644
index f7e795267..000000000
--- a/website/assets/styles/03-elements/misc-phrasing.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-// if it has a class we presume it's styled
-// just a bunch of small phrasing elements that markdown might generate
-// hugo has code highlighting built in so I've tweaked that here too
-
-p {
- line-height: 1.5;
-}
-ul[class],
-ol[class],
-li[class] {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-// markdown checklist
-ul:has(input),
-li:has(input) {
- padding: 0;
- margin: var(--theme-spacing--1) 0 auto 0;
- list-style: none;
- &::marker {
- content: "✶ ";
- color: var(--theme-color--accent);
- }
-}
-ul:has(input) {
- margin: var(--theme-spacing--1) 0 var(--theme-spacing--3);
-}
-
-blockquote {
- font-size: var(--theme-type-size--4);
- margin: var(--theme-spacing--4) 0 var(--theme-spacing--6);
- @include pattern(dots, var(--theme-color--pop), b, false, 0.2);
- border-bottom: var(--theme-border--thick);
- border-image: var(--theme-border-image);
-}
-
-code,
-.code,
-pre code .highlight pre,
-time {
- font: var(--theme-font--system);
-}
-code:not([class]) {
- color: var(--theme-color--pop);
-}
-//this .highlight is goldmark
-.highlight pre {
- display: block;
- padding: var(--theme-spacing--gutter);
- overflow-x: auto;
- margin: 0;
-}
-
-.highlight {
- border: var(--theme-border);
- padding: var(--theme-spacing--1);
- max-width: var(--theme-spacing--linelength);
- @include pattern(dots, currentColor, c, false);
- margin-bottom: var(--theme-spacing--4);
-}
-
-// details could show up in github flavoured markdown so we put a basic style on here
-summary > * {
- display: inline-block;
-}
-summary::marker {
- color: var(--theme-color--accent);
- font-size: var(--theme-type-size--3);
-}
-hr {
- border: 0;
- border-bottom: var(--theme-border--thick);
- border-image: var(--theme-border-image);
- margin: var(--theme-spacing--6)
- calc(3 * calc(-1 * var(--theme-spacing--gutter)));
- max-width: 50%;
-}
diff --git a/website/assets/styles/03-elements/table.scss b/website/assets/styles/03-elements/table.scss
deleted file mode 100644
index 51567bbe8..000000000
--- a/website/assets/styles/03-elements/table.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-table {
- display: block;
- width: 100%;
- width: max-content;
- max-width: 100%;
- overflow: auto;
- border-bottom: var(--theme-border--thick);
- border-image: var(--theme-border-image);
-}
-
-thead th {
- font: var(--theme-font--system);
- background-color: var(--theme-color--block);
-}
-
-td {
- padding: var(--theme-spacing--1);
- background-color: var(--theme-color--block);
-}
diff --git a/website/assets/styles/04-components/breadcrumbs.scss b/website/assets/styles/04-components/breadcrumbs.scss
deleted file mode 100644
index b0690ab21..000000000
--- a/website/assets/styles/04-components/breadcrumbs.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-.c-breadcrumbs {
- &__list {
- display: flex;
- font: var(--theme-font--system);
- font-size: var(--theme-type-size--6);
- }
-
- &__link {
- display: inline-flex;
- align-items: center;
- @include on-event {
- text-decoration: overline 3px solid var(--theme-color--accent);
- outline: none;
- .c-breadcrumbs__icon {
- color: var(--theme-color--pop);
- }
- }
- }
-
- &__icon {
- height: 1em;
- min-width: 6px;
- }
-
- .is-current {
- color: var(--theme-color--accent);
- font-weight: 900;
- }
-}
diff --git a/website/assets/styles/04-components/card.scss b/website/assets/styles/04-components/card.scss
deleted file mode 100644
index c35f56d98..000000000
--- a/website/assets/styles/04-components/card.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-.c-card {
- @include grid-assign(image, date, byline, title);
-
- display: grid;
- grid-template:
- "image image image" 100px
- ". . ." var(--theme-spacing--1)
- ". title ." auto
- ". . ." var(--theme-spacing--1) / var(--theme-spacing--1) 1fr var(--theme-spacing--1);
-
- background-color: var(--theme-color--paper);
- box-shadow: 2px 3px 0 var(--theme-color--pop),
- 4px 5px 0 var(--theme-color--accent);
- height: 100%;
-
- @include on-event {
- transform: translate(0.5px, 1px);
- box-shadow: 0px 0px 0 var(--theme-color--pop),
- 0px 0px 0 var(--theme-color--accent);
- }
-
- &__image {
- background: var(--theme-color--ink);
- overflow: hidden;
- filter: grayscale(0.4);
- transition: filter 10s cubic-bezier(0.175, 0.885, 0.32, 1.275);
- @include on-event(false, ".c-card") {
- filter: grayscale(0) hue-rotate(360deg);
- }
- }
-}
diff --git a/website/assets/styles/04-components/cells.scss b/website/assets/styles/04-components/cells.scss
deleted file mode 100644
index 0d1ebcfb4..000000000
--- a/website/assets/styles/04-components/cells.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-.c-cells {
- display: flex;
- flex-flow: row wrap;
- gap: var(--theme-spacing--gutter);
- @include backdrop();
-
- &__cell {
- flex: 1 0 var(--theme-spacing--container-min);
- }
-}
diff --git a/website/assets/styles/04-components/page-header.scss b/website/assets/styles/04-components/page-header.scss
deleted file mode 100644
index f89f24a5d..000000000
--- a/website/assets/styles/04-components/page-header.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-.c-page-header {
- --gap: var(--theme-spacing--gutter);
- --arrow: polygon(
- 20px 0%,
- 20px 20%,
- 100% 20%,
- 100% 80%,
- 20px 80%,
- 20px 100%,
- 0% 50%
- );
-
- @include grid-assign(
- container,
- picture,
- title,
- summary,
- breadcrumbs,
- lastmod,
- toc,
- edit,
- action
- );
- @include grid-breakout();
- grid-template:
- " . ... . " var(--gap)
- " . container ." minmax(0, 1fr)
- " . ... ." 0 / minmax(var(--gap), 1fr)
- calc(var(--theme-spacing--container) - var(--theme-spacing--menu)) minmax(var(--gap), 1fr);
-
- pointer-events: none; // just make sure we retain the option of breakout hero headers without interfering with the weirdy menu button
-
- &__container {
- pointer-events: all;
- display: grid;
- grid-template:
- ". . . " var(--gap)
- "breadcrumbs . edit " min-content
- "title . . " min-content
- "toc toc toc " auto
- "action . . " auto
- ". . lastmod " min-content / 1fr var(--gap) minmax(0, 1fr);
- }
- &__title {
- line-height: 1;
- text-transform: uppercase;
- text-shadow: -2px 1px 0 var(--theme-color--pop);
- }
- &__lastmod,
- &__edit {
- background: var(--theme-color--accent);
- color: var(--theme-color--contrast-max);
- font-size: var(--theme-type-size--6);
- padding: calc(var(--theme-spacing--1) / 2);
- text-align: right;
- }
- &__edit {
- background: var(--theme-color--ink-fade);
- color: var(--theme-color--ink);
- clip-path: var(--arrow);
- }
-
- // small tweaks for list view
- &--list {
- position: sticky;
- top: 0;
- .c-page-header__container {
- position: relative;
- }
- .c-page-header__toc {
- position: absolute;
- width: fit-content;
- max-width: var(--theme-spacing--container-min);
- box-sizing: content-box;
- right: 0;
- }
- }
-}
diff --git a/website/assets/styles/04-components/skip-link.scss b/website/assets/styles/04-components/skip-link.scss
deleted file mode 100644
index b6190d00e..000000000
--- a/website/assets/styles/04-components/skip-link.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-.c-skip-link {
- @include offscreen(hide);
- @include on-event {
- @include offscreen(show);
- }
-}
diff --git a/website/assets/styles/layout/footer.scss b/website/assets/styles/layout/footer.scss
deleted file mode 100644
index cda0d36cf..000000000
--- a/website/assets/styles/layout/footer.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-.l-footer {
- @include grid-assign(github, impressum, mode);
-
- grid-template:
- "...... . ......... ." var(--theme-spacing--6)
- "github . impressum mode" minmax(0, 1fr)
- "github . ......... mode" var(--theme-spacing--touchtarget)
- "...... . ......... ." var(--theme-spacing--gutter) /
- var(--theme-spacing--touchtarget) var(--theme-spacing--1) 1fr var(--theme-spacing--touchtarget);
-}
diff --git a/website/assets/styles/layout/header.scss b/website/assets/styles/layout/header.scss
deleted file mode 100644
index 017dc5444..000000000
--- a/website/assets/styles/layout/header.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-.l-header {
- @include grid-assign(nav);
- @include pattern(dots, var(--theme-color--pop), null, true, 0.5);
- grid-template:
- " . ... . " var(--theme-spacing--gutter)
- " . nav ." minmax(0, 1fr)
- " . ... ." var(--theme-spacing--gutter) / minmax(
- var(--theme-spacing--gutter),
- 1fr
- )
- calc(var(--theme-spacing--container) - var(--theme-spacing--menu)) minmax(var(--theme-spacing--gutter), 1fr);
-
- &__heading {
- font: var(--theme-font--brand);
- color: var(--theme-color--brand);
- }
- &__home {
- @include on-event {
- color: var(--theme-color--accent);
- outline: none;
- }
- }
-
- &__icon {
- grid-area: icon;
- }
-
- &__action {
- display: flex;
- flex-flow: column;
- justify-content: flex-start;
- position: fixed;
- right: 0;
- top: 0;
- height: 100vh;
- padding-top: var(--theme-spacing--gutter);
- background-color: var(--theme-color--pop);
- border-color: var(--theme-color--pop);
- &.is-fixed {
- min-width: var(--theme-spacing--menu);
- width: var(--theme-spacing--menu);
- }
- @include on-event {
- background-color: var(--theme-color--accent);
- color: var(--theme-color--contrast-max);
- }
- }
-}
diff --git a/website/assets/styles/layout/layout.scss b/website/assets/styles/layout/layout.scss
deleted file mode 100644
index 0e7fb2dee..000000000
--- a/website/assets/styles/layout/layout.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-.l-layout {
- @include grid-assign(header, main, footer);
- grid-template:
- " header header header menu" auto
- " ...... main ...... menu" 1fr
- " ...... footer ...... menu" auto /
- minmax(var(--theme-spacing--gutter), 1fr)
- calc(var(--theme-spacing--container) - var(--theme-spacing--menu))
- minmax(var(--theme-spacing--gutter), 1fr)
- var(--theme-spacing--menu);
-
- min-height: 100vh;
-}
diff --git a/website/assets/styles/layout/main.scss b/website/assets/styles/layout/main.scss
deleted file mode 100644
index f0c480747..000000000
--- a/website/assets/styles/layout/main.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-.l-main {
- @include on-event {
- outline: none;
- }
-}
diff --git a/website/assets/styles/layout/menu.scss b/website/assets/styles/layout/menu.scss
deleted file mode 100644
index 8fc247cc7..000000000
--- a/website/assets/styles/layout/menu.scss
+++ /dev/null
@@ -1,90 +0,0 @@
-.l-menu {
- --gap: var(--theme-spacing--gutter);
- @include grid-assign(heading, action, primary, secondary, container);
- @include pattern(graph, currentColor, b, false, 0.2);
- overflow: hidden;
- position: fixed;
- top: 0;
- right: -100%;
- visibility: hidden;
- background-color: var(--theme-color--paper);
- border-right: 1px solid var(--theme-color--contrast-max);
- min-height: calc(100vh - calc(100vh - 100%));
- min-width: var(--theme-spacing--container-min);
- max-width: calc(2 * var(--theme-spacing--container-min));
- z-index: 1;
-
- --box-shadow: var(--theme-color--ink-fade);
- box-shadow: -20px -2px 30px var(--box-shadow);
-
- .is-dark-mode & {
- --box-shadow: var(--theme-color--contrast-max);
- }
-
- &.is-active {
- visibility: visible;
- right: var(--theme-spacing--menu);
- outline: none;
- animation: slide-menu 0.8s ease-out forwards;
- }
-
- grid-template: "container";
-
- &__container {
- display: grid;
- grid-template:
- ". ....... ......... ......... ." var(--gap)
- ". heading ......... action ." min-content
- ". ....... ......... ......... ." var(--gap)
- ". primary primary primary ." 1fr
- ". ....... secondary secondary ." var(--theme-spacing--touchtarget)
- ". ....... ......... ......... ." var(--gap) / var(--gap)
- 1fr 1fr var(--theme-spacing--touchtarget) var(--gap);
- align-items: center;
- }
-
- &__link {
- text-transform: lowercase;
- text-decoration: none;
- }
-
- &__heading {
- font: var(--theme-font--brand);
- }
- &__home {
- @include on-event {
- outline: 1px dotted;
- color: var(--theme-color--accent);
- }
- }
-
- &__secondary {
- display: flex;
- justify-content: flex-end;
- }
-
- &__bg {
- grid-area: container;
- object-fit: cover;
- z-index: -1;
- mix-blend-mode: darken; // might remove this, not v performant
- @media (prefers-color-scheme: dark) {
- mix-blend-mode: overlay;
- }
- }
-}
-
-@keyframes slide-menu {
- 0% {
- transform: translateX(100vw);
- }
- 40% {
- transform: translateX(100vw);
- }
- 50% {
- transform: translateX(100vw);
- }
- 100% {
- transform: translateX(0);
- }
-}
diff --git a/website/assets/styles/states/invisible.scss b/website/assets/styles/states/invisible.scss
deleted file mode 100644
index 597d33a2e..000000000
--- a/website/assets/styles/states/invisible.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-// this makes text invisible but accessible to screenreaders, unlike display:none
-.is-invisible {
- @include screen(hide);
-}
diff --git a/website/assets/styles/states/none.scss b/website/assets/styles/states/none.scss
deleted file mode 100644
index 5da7761dd..000000000
--- a/website/assets/styles/states/none.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-@use "02-variables/spacing" as *;
-
-// this removes the node
-// see is-visible / is-invisible for most use cases
-
-.is-none {
- &--gt-container {
- @media (min-width: $c-max) {
- display: none;
- }
- }
- &--lt-container {
- @media (max-width: $c-max) {
- display: none;
- }
- }
-}
diff --git a/website/assets/styles/states/visible.scss b/website/assets/styles/states/visible.scss
deleted file mode 100644
index 4d49f89d2..000000000
--- a/website/assets/styles/states/visible.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-// this makes text invisible but accessible to screenreaders, unlike display:none
-
-.is-visible {
- @include screen(show);
-}
diff --git a/website/content/about/_index.md b/website/content/about/_index.md
index 4a0b52c59..e76deaa4a 100644
--- a/website/content/about/_index.md
+++ b/website/content/about/_index.md
@@ -1,6 +1,7 @@
+++
title="About"
date="28 Dec 2022 12:22:11 BST"
+menu="syllabus"
+++
## What is CYF+?
diff --git a/website/content/about/contributors.md b/website/content/about/contributors.md
index b1e273023..91c4745f1 100644
--- a/website/content/about/contributors.md
+++ b/website/content/about/contributors.md
@@ -4,4 +4,4 @@ date="31 Dec 2022 12:22:11 BST"
showTitle=true
+++
-{{< contributors >}}
+{{< contributors "https://api.github.com/repos/CodeYourFuture/immersive-go-course" >}}
diff --git a/website/content/partnerships/_index.md b/website/content/partnerships/_index.md
index b8a4cc3c2..0b7f7e9ad 100644
--- a/website/content/partnerships/_index.md
+++ b/website/content/partnerships/_index.md
@@ -1,3 +1,8 @@
++++
+title="Partnerships"
+menu="syllabus"
++++
+
# Partnerships
CYF+ is an immersive education programme involving guided independent study and a work placement.
@@ -61,19 +66,20 @@ Our aim is to transition from 100% CYF mentorship at the start of the programme,
CYF+ caters its curriculum to the needs of the specific hiring partner. In 2023 [we partnered with Slack](https://slack.com/intl/en-gb/blog/news/slack-cyf-plus-engineering-employment-pathways-refugees) to hire two SREs for their Demand Engineering team, so put together projects and material focusing on distributed systems thinking, troubleshooting, and handling scale and failure, as well as using Go as the main programming language. [You can see the content of the first run's course here](https://systems.codeyourfuture.io/versions/1-0-0/).
The course will always include:
-* Quality code - making conscious decisions about what the best, most readable, most maintainable way to write code is.
-* Distributed systems thinking - state, failure, reliability, etc.
-* Working in existing codebases - understanding and debugging code they didn't write.
-* Troubleshooting - how to work in an environment where many systems are black boxes you don't know the details of.
-* Handling scale and failure - concurrency, error handling, retry strategies, sources of risk and failure.
+
+- Quality code - making conscious decisions about what the best, most readable, most maintainable way to write code is.
+- Distributed systems thinking - state, failure, reliability, etc.
+- Working in existing codebases - understanding and debugging code they didn't write.
+- Troubleshooting - how to work in an environment where many systems are black boxes you don't know the details of.
+- Handling scale and failure - concurrency, error handling, retry strategies, sources of risk and failure.
Additionally we can tailor specific topics or projects to the specific needs of a company or team.
## What CYF+ needs from partners
-* A collaborative attitude to understanding what knowledge and experience new-hires will need, and how best to supply them.
-* A commitment to hire at least 2 excellent junior engineers on a 9-month internship, including paying their salary and providing a supportive mentoring environment.
-* A contribution to Code Your Future of at least £20,000 per hire to support mentoring, training, and course development costs.
+- A collaborative attitude to understanding what knowledge and experience new-hires will need, and how best to supply them.
+- A commitment to hire at least 2 excellent junior engineers on a 9-month internship, including paying their salary and providing a supportive mentoring environment.
+- A contribution to Code Your Future of at least £20,000 per hire to support mentoring, training, and course development costs.
## CYF+'s track record
@@ -92,7 +98,7 @@ CYF+ has run one cohort with Slack, where both participants were converted to fu
- "CYF+ turned my life around by 180 degrees. What initially felt like a distant dream has now become my everyday reality. It was one of the biggest challenges I undertook, but every minute of it was a transformative experience to become a better, more knowledgeable, and confident software engineer. It opened doors to Big Tech and prepared me to work in a world where millions of requests flood every second. Through CYF+ I met the most amazing mentors, worked with advanced technologies, and presented at a conference. Thanks to CYF+ and everyone involved, I am finally living the life I always wanted!" - [Margarita Glushkova](https://www.linkedin.com/in/margarita-glushkova-894344105/)
+"CYF+ turned my life around by 180 degrees. What initially felt like a distant dream has now become my everyday reality. It was one of the biggest challenges I undertook, but every minute of it was a transformative experience to become a better, more knowledgeable, and confident software engineer. It opened doors to Big Tech and prepared me to work in a world where millions of requests flood every second. Through CYF+ I met the most amazing mentors, worked with advanced technologies, and presented at a conference. Thanks to CYF+ and everyone involved, I am finally living the life I always wanted!" - [Margarita Glushkova](https://www.linkedin.com/in/margarita-glushkova-894344105/)
@@ -100,7 +106,7 @@ CYF+ has run one cohort with Slack, where both participants were converted to fu
- "I learned about CYF during a very difficult time in my life right at the peak of the pandemic, when I thought there was no hope. Almost 3 years later, I’m now working as a Site Reliability Engineer at Slack and it's all thanks to CYF, CYF+, and the amazing volunteers that work tirelessly to help students become engineers. For me, CodeYourFuture isn't just a bootcamp, it's a community where everyone is welcome regardless of their background or situation." - [Berkeli Halmyradov](https://www.linkedin.com/in/berkeli/)
+"I learned about CYF during a very difficult time in my life right at the peak of the pandemic, when I thought there was no hope. Almost 3 years later, I’m now working as a Site Reliability Engineer at Slack and it's all thanks to CYF, CYF+, and the amazing volunteers that work tirelessly to help students become engineers. For me, CodeYourFuture isn't just a bootcamp, it's a community where everyone is welcome regardless of their background or situation." - [Berkeli Halmyradov](https://www.linkedin.com/in/berkeli/)
@@ -110,25 +116,27 @@ CYF+ has run one cohort with Slack, where both participants were converted to fu
- [Daniel Wagner-Hall](https://github.com/illicitonion) acts as a mentor for the trainees on the course, as well as helping to create course content. He's been a volunteer with CYF since 2020, and has worked at companies like Google, Twitter, and Apple. He's developed systems that reliably serve millions of queries per second, maintains [several](https://github.com/bazelbuild/rules_rust) [significant](https://crates.io/crates/num_enum) [open](https://www.selenium.dev/project/structure/#selenium_committers) [source](https://github.com/bazel-contrib/target-determinator) [projects](https://www.pantsbuild.org/docs/team), and loves to help people grow.
+[Daniel Wagner-Hall](https://github.com/illicitonion) acts as a mentor for the trainees on the course, as well as helping to create course content. He's been a volunteer with CYF since 2020, and has worked at companies like Google, Twitter, and Apple. He's developed systems that reliably serve millions of queries per second, maintains [several](https://github.com/bazelbuild/rules_rust) [significant](https://crates.io/crates/num_enum) [open](https://www.selenium.dev/project/structure/#selenium_committers) [source](https://github.com/bazel-contrib/target-determinator) [projects](https://www.pantsbuild.org/docs/team), and loves to help people grow.
+
- [Laura Nolan](https://www.linkedin.com/in/laura-nolan-bb7429/) is a principal software engineer, known for writing and speaking about Site Reliability Engineering (SRE) and software operations topics. She is a contributor to [the O'Reilly Site Reliability Engineering book](https://www.oreilly.com/library/view/site-reliability-engineering/9781491929117/), and contributes her knowledge to developing the CYF+ curriculum as well as mentoring trainees on the course.
+[Laura Nolan](https://www.linkedin.com/in/laura-nolan-bb7429/) is a principal software engineer, known for writing and speaking about Site Reliability Engineering (SRE) and software operations topics. She is a contributor to [the O'Reilly Site Reliability Engineering book](https://www.oreilly.com/library/view/site-reliability-engineering/9781491929117/), and contributes her knowledge to developing the CYF+ curriculum as well as mentoring trainees on the course.
+
+Laura initially worked with CYF as part of her former role at Slack, but CYF impressed her so much with its sheer efficiency and focus on its mission to diversify tech that she stayed as a volunteer.
- Laura initially worked with CYF as part of her former role at Slack, but CYF impressed her so much with its sheer efficiency and focus on its mission to diversify tech that she stayed as a volunteer.
- My name is [Radha Kumari](https://www.linkedin.com/in/kumari-radha-a3419b25/) and I'm a Staff Software Engineer at Slack. I'm part of the Demand Engineering Team, responsible for all of Slack's ingress Traffic and how internal services interact with each other.
+My name is [Radha Kumari](https://www.linkedin.com/in/kumari-radha-a3419b25/) and I'm a Staff Software Engineer at Slack. I'm part of the Demand Engineering Team, responsible for all of Slack's ingress Traffic and how internal services interact with each other.
- I have had the privilege of working alongside some amazing human beings in designing this innovative and unique course aimed at teaching infrastructure and Site Reliability Engineering (SRE) skills to Refugees and low-income people. Mentoring individuals through this program and witnessing their growth has been incredibly rewarding, reinforcing my belief in the transformative power of education and mentorship.
+I have had the privilege of working alongside some amazing human beings in designing this innovative and unique course aimed at teaching infrastructure and Site Reliability Engineering (SRE) skills to Refugees and low-income people. Mentoring individuals through this program and witnessing their growth has been incredibly rewarding, reinforcing my belief in the transformative power of education and mentorship.
@@ -136,9 +144,9 @@ CYF+ has run one cohort with Slack, where both participants were converted to fu
- [Abdirizak Mohamed](https://www.linkedin.com/in/abdirizak-mohamed-63778117b/) is a software engineer who has worked for several companies, including Zoopla and most recently Amazon. At Amazon, he works on improving the resiliency of the Prime Video platform, including owning a project to automate the management of assets required for widely distributed load tests.
+[Abdirizak Mohamed](https://www.linkedin.com/in/abdirizak-mohamed-63778117b/) is a software engineer who has worked for several companies, including Zoopla and most recently Amazon. At Amazon, he works on improving the resiliency of the Prime Video platform, including owning a project to automate the management of assets required for widely distributed load tests.
- Abdirizak has been with CYF for several years, primarily delivering course content during weekly classes, buddying with trainees, and providing feedback on coursework. For CYF+ he supports trainees by holding office hours and reviewing exercise submissions.
+Abdirizak has been with CYF for several years, primarily delivering course content during weekly classes, buddying with trainees, and providing feedback on coursework. For CYF+ he supports trainees by holding office hours and reviewing exercise submissions.
diff --git a/website/content/versions/_index.md b/website/content/versions/_index.md
index a861f3bf1..4841fc779 100644
--- a/website/content/versions/_index.md
+++ b/website/content/versions/_index.md
@@ -1,5 +1,6 @@
+++
title="Versions"
+menu="syllabus"
+++
## CYF+ Iterations Log
diff --git a/website/go.mod b/website/go.mod
new file mode 100644
index 000000000..dd4cae9d6
--- /dev/null
+++ b/website/go.mod
@@ -0,0 +1,5 @@
+module github.com/CodeYourFuture/immersive-go-course/website
+
+go 1.23.0
+
+require github.com/CodeYourFuture/curriculum/common-theme v0.0.0-20240823202329-91c5cb12720c // indirect
diff --git a/website/go.sum b/website/go.sum
new file mode 100644
index 000000000..fdbacd88f
--- /dev/null
+++ b/website/go.sum
@@ -0,0 +1,2 @@
+github.com/CodeYourFuture/curriculum/common-theme v0.0.0-20240823202329-91c5cb12720c h1:zx8kbYTh7Y1QnnBhKYP4SPQ52aHhYvqdOBHPFwL8xtQ=
+github.com/CodeYourFuture/curriculum/common-theme v0.0.0-20240823202329-91c5cb12720c/go.mod h1:kzt+J4JYp5C3GD1dX0rf7vY5fsTUc6Drrn+7p7pjmLg=
diff --git a/website/config.toml b/website/hugo.toml
similarity index 58%
rename from website/config.toml
rename to website/hugo.toml
index 6ac56e5d7..ad1557b15 100644
--- a/website/config.toml
+++ b/website/hugo.toml
@@ -1,7 +1,9 @@
-baseURL = "/"
-languageCode = "en-us"
+baseURL = "https://systems.codeyourfuture.io"
title = "CYF+"
-languageLang = "en"
+
+[module]
+[[module.imports]]
+ path = "github.com/CodeYourFuture/curriculum/common-theme"
[params]
description = "A free and open source immersive engineering programme. Practical, hands on projects in Go, distributed systems engineering, site reliability engineering, software engineering. Pace, scale, and complexity."
@@ -25,3 +27,17 @@ unsafe = true
disableKinds = ["taxonomy", "term"]
[taxonomies]
series = "versions"
+
+[menus]
+ [[menus.secondary]]
+ name = "Main Curriculum 👈🏾"
+ weight = 1
+ url = "https://curriculum.codeyourfuture.io"
+ [[menus.secondary]]
+ name = "Join Us 👋🏿"
+ weight = 2
+ url = "https://codeyourfuture.io/volunteers/"
+ [[menus.secondary]]
+ name = "Support 🫶🏼"
+ weight = 3
+ url = "https://codeyourfuture.io/donate/"
diff --git a/website/layouts/_default/_markup/render-codeblock-mermaid.html b/website/layouts/_default/_markup/render-codeblock-mermaid.html
deleted file mode 100644
index 440f81a13..000000000
--- a/website/layouts/_default/_markup/render-codeblock-mermaid.html
+++ /dev/null
@@ -1,2 +0,0 @@
-