Merge pull request #68 from waku-org/docu-2023

This commit is contained in:
fryorcraken.eth 2023-06-13 10:44:20 +10:00 committed by GitHub
commit aa57d17a71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 1290 additions and 543 deletions

View File

@ -40,7 +40,8 @@
"Oskar", "Oskar",
"Thorén", "Thorén",
"wakunode", "wakunode",
"autoplay" "autoplay",
"classwide"
], ],
"flagWords": [], "flagWords": [],
"ignorePaths": [ "ignorePaths": [

4
Jenkinsfile vendored
View File

@ -13,8 +13,8 @@ pipeline {
environment { environment {
GIT_COMMITTER_NAME = 'status-im-auto' GIT_COMMITTER_NAME = 'status-im-auto'
GIT_COMMITTER_EMAIL = 'auto@status.im' GIT_COMMITTER_EMAIL = 'auto@status.im'
PROD_SITE = 'waku.guide' PROD_SITE = 'docs.waku.org'
DEV_SITE = 'dev.waku.guide' DEV_SITE = 'dev.docs.waku.org'
DEV_HOST = 'jenkins@node-01.do-ams3.sites.misc.statusim.net' DEV_HOST = 'jenkins@node-01.do-ams3.sites.misc.statusim.net'
SCP_OPTS = 'StrictHostKeyChecking=no' SCP_OPTS = 'StrictHostKeyChecking=no'
} }

View File

@ -4,37 +4,41 @@ title: Powered by Waku
Leap into the future with Waku! Revolutionize communication, collaboration, and connectivity. Join us and create something extraordinary! Leap into the future with Waku! Revolutionize communication, collaboration, and connectivity. Join us and create something extraordinary!
```mdx-code-block import { PoweredBy } from "@site/src/components/mdx";
import PoweredByCard from "@site/src/components/PoweredByCard";
<div className="powered-by-card-container"> <PoweredBy
<PoweredByCard items={[
appLink="https://status.im" {
logoSrc="/img/status-logo.svg" name: "Status",
appName="Status" description:
> "Status is a secure messaging app, crypto wallet, and Web3 browser built with state-of-the-art technology.",
Status is a secure messaging app, crypto wallet, and Web3 browser built with state-of-the-art technology. logoSrc: "/img/status-mark-black.svg",
</PoweredByCard> logoSrcDark: "/img/status-mark-white.svg",
<PoweredByCard link: "https://status.im",
appLink="https://xmtp.org" },
logoSrc="/img/xmtp-logo.svg" {
appName="XMTP" name: "RAILGUN",
> description:
XMTP uses the Waku Network to enable secure Web3 messaging in their open protocol and network. "RAILGUN uses Waku to offer private gas payments to users, ensuring anonymity and privacy for their transactions.",
</PoweredByCard> logoSrc: "/img/railgun-mark-black.svg",
<PoweredByCard logoSrcDark: "/img/railgun-mark-white.svg",
appLink="https://railgun.org/" link: "https://railgun.org",
logoSrc="/img/railgun-logo.png" },
appName="RAILGUN" {
> name: "The Graph",
RAILGUN uses Waku to offer private gas payments to users, ensuring anonymity and privacy for their transactions. description:
</PoweredByCard> "Waku powers the Graphcast SDK, enabling the development of gossip-powered applications within The Graph ecosystem.",
<PoweredByCard logoSrc: "/img/the-graph-mark-black.svg",
appLink="https://thegraph.com/" logoSrcDark: "/img/the-graph-mark-white.svg",
logoSrc="/img/the-graph-logo.svg" link: "https://thegraph.com/",
appName="The Graph" },
> {
Waku powers the Graphcast SDK, enabling the development of gossip-powered applications within The Graph ecosystem. name: "XMTP",
</PoweredByCard> description:
</div> "XMTP uses the Waku network to enable secure Web3 messaging in their open protocol and network.",
``` logoSrc: "/img/xmtp-mark-black.svg",
logoSrcDark: "/img/xmtp-mark-white.svg",
link: "https://xmtp.org",
},
]}
/>

72
docs/terms.md Normal file
View File

@ -0,0 +1,72 @@
---
displayed_sidebar: null
sidebar_class_name: hidden
---
# Terms of Use
These terms and conditions (“**Website Terms of Use**”) are entered into by you and us, and they govern your access and use of the Website, including any content and functionality contained in the Website.
It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use.
If you do not agree with these Website Terms of Use, you must not access or use the Website.
### Content provided for informational purposes only
Content available on the Website is for informational purposes only and is not intended to address the specific circumstances of any particular individual or entity. Such content may not always be entirely accurate, complete or up to date, and may also include inaccuracies or typographical errors. You are solely responsible for verifying their adequacy, completeness and accuracy, and any reliance you place on such content is at your own risk.
None of the content on this Website should be considered by you as legal, tax, investment, financial, professional or any other type of advice. You should always conduct your own research and seek independent professional advice if necessary. You are solely responsible for the decisions or actions you might take in this respect. We are not liable for any loss resulting from your action (or inaction) and decisions based on this content on this Website.
Additionally, we are not responsible for any information, content or services contained in any third-party content or on any third-party websites accessible or linked through this Website.
### Intellectual property rights
The Website and its contents are made available under free and open-source licenses. This means that anyone can use, share and modify such content, as long as they follow the terms of the applicable license.
### Third party website links
To the extent the Website provides any links to a third-party website, then its terms and conditions, including privacy policies, govern your use of those third-party websites. We have no control over such third-party websites and will not be liable for your use of or activities on any third-party websites accessed through the Website. If you access such third-party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third-party websites.
### Disclaimer
The Website is provided by us on an as is basis, and you use the Website at your own sole discretion and risk.
We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content, or on any sites linked to this site.
We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws. These disclaimers will apply to the maximum extent permitted by applicable law.
### Limitation of liability
We will not be held liable to you under any contract, negligence, strict liability or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law.
### Indemnity
You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys fees arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use.
### Modifications
We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website.
### Governing law
Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions.
### Disputes
In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website or your use of the Website
We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost-effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions.
If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute and the claim you are making; and (ii) the remedy you are seeking.
If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees, will be in accordance with the Swiss Rules of International Arbitration.
Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us.
### About these Website Terms of Use
These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website.
The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit or affect the interpretation of any provisions of these Website Terms of Use.
If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them.

View File

@ -4,201 +4,181 @@ require("dotenv").config();
/** @type {import("@docusaurus/types").Config} */ /** @type {import("@docusaurus/types").Config} */
const config = { const config = {
title: "Waku Docs Portal", title: "Waku Docs Portal",
url: "https://waku.guide/", url: "https://waku.guide/",
baseUrl: "/", baseUrl: "/",
onBrokenLinks: "throw", onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn", onBrokenMarkdownLinks: "warn",
// Even if you don't use internalization, you can use this field to set useful // Even if you don't use internalization, you can use this field to set useful
// metadata like html lang. For example, if your site is Chinese, you may want // metadata like html lang. For example, if your site is Chinese, you may want
// to replace "en" with "zh-Hans". // to replace "en" with "zh-Hans".
i18n: { i18n: {
defaultLocale: "en", defaultLocale: "en",
locales: ["en"] locales: ["en"],
}, },
presets: [ presets: [
[ [
"@acid-info/logos-docusaurus-preset", "@acid-info/logos-docusaurus-preset",
({ {
businessUnit: "Waku", businessUnit: "Waku",
customSiteConfig: true, customSiteConfig: true,
docs: { docs: {
routeBasePath: "/", routeBasePath: "/",
sidebarPath: require.resolve("./sidebars.js"), path: "docs",
editUrl: "https://github.com/waku-org/waku.guide/tree/develop/" sidebarPath: require.resolve("./sidebars.js"),
}, editUrl: "https://github.com/waku-org/waku.guide/tree/develop/",
theme: { showLastUpdateAuthor: false,
name: "docusaurus-default", showLastUpdateTime: true,
options: { },
customCss: [require.resolve("./src/css/custom.scss")] theme: {
} name: "default",
} options: {
}) customCss: [require.resolve("./src/css/custom.scss")],
] },
], },
staticDirectories: ["static"], },
themeConfig: ({ ],
docs: { ],
sidebar: { staticDirectories: ["static"],
hideable: false themeConfig: {
} docs: {
}, sidebar: {
navbar: { hideable: false,
title: "Waku", },
logo: { },
srcDark: "img/logo_white.svg" navbar: {
}, hideOnScroll: true,
hideOnScroll: true, items: [
items: [ {
{ type: "search",
type: "docSidebar", },
position: "right", {
sidebarId: "main", type: "docSidebar",
label: "About Waku" position: "left",
}, sidebarId: "main",
{ label: "About Waku",
type: "dropdown", },
label: "Guides", {
position: "right", type: "dropdown",
items: [ label: "Guides",
{ position: "right",
label: "Nodes and SDKs", items: [
to: "/guides/nodes-and-sdks" {
}, label: "Nodes and SDKs",
{ to: "/guides/nodes-and-sdks",
label: "Run a Nwaku Node", },
to: "guides/run-nwaku-node" {
} label: "Run a Nwaku Node",
] to: "/guides/run-nwaku-node",
}, },
{ ],
to: "/powered-by-waku", },
label: "Powered by Waku", {
position: "right" to: "/powered-by-waku",
}, label: "Powered by Waku",
{ position: "left",
type: "dropdown", },
label: "Community", {
position: "right", type: "dropdown",
items: [ label: "Community",
{ position: "right",
label: "Join Our Community", items: [
to: "/community" {
}, label: "Join Our Community",
{ to: "/community",
label: "Contribute to Waku", },
to: "/contribute" {
}, label: "Contribute to Waku",
{ to: "/contribute",
label: "Watch Our Presentations", },
to: "/presentations" {
}, label: "Watch Our Presentations",
{ to: "/presentations",
label: "Bug Bounty Program", },
href: "https://hackenproof.com/status-dot-im/waku" {
} label: "Bug Bounty Program",
] to: "https://hackenproof.com/status-dot-im/waku",
}, },
{ ],
href: "https://github.com/waku-org", },
position: "right", {
className: "header-github-link", href: "https://github.com/waku-org",
title: "Waku GitHub repository" position: "right",
}, className: "header-github-link",
] title: "Waku GitHub repository",
}, },
footer: { ],
links: [ },
{ footer: {
title: "Guides", links: [
items: [ {
{ title: "Guides",
to: "/guides/nodes-and-sdks", items: [
label: "Nodes and SDKs" {
}, to: "/guides/nodes-and-sdks",
{ label: "Nodes and SDKs",
label: "Run a Nwaku Node", },
to: "guides/run-nwaku-node" {
} to: "/guides/run-nwaku-node",
] label: "Run a Nwaku Node",
}, },
{ ],
title: "Community", },
items: [ {
{ title: "Community",
href: "https://discord.waku.org/", items: [
label: "Discord" {
}, href: "https://discord.waku.org/",
{ label: "Discord",
href: "https://twitter.com/waku_org", },
label: "Twitter" {
}, href: "https://twitter.com/waku_org",
{ label: "Twitter",
href: "https://t.me/waku_org", },
label: "Telegram" {
}, href: "https://t.me/waku_org",
{ label: "Telegram",
href: "https://forum.vac.dev/", },
label: "Vac Forum" {
} href: "https://forum.vac.dev/",
] label: "Vac Forum",
}, },
{ ],
title: "Resources", },
items: [ {
{ title: "Resources",
href: "https://github.com/waku-org", items: [
label: "GitHub" {
}, href: "https://github.com/waku-org",
{ label: "GitHub",
href: "https://vac.dev/research", },
label: "Blog" {
}, href: "https://vac.dev/research",
{ label: "Blog",
href: "https://rfc.vac.dev/", },
label: "Vac RFCs" {
} href: "https://rfc.vac.dev/",
] label: "Vac RFCs",
}, },
{ ],
title: "Legal", },
items: [ {
{ title: "Legal",
href: "https://waku.org/terms-of-use", items: [
label: "Terms of Use" {
}, href: "/terms",
{ label: "Terms & Conditions",
href: "https://waku.org/privacy-policy", },
label: "Privacy Policy" ],
}, },
{ ],
html: "<link rel='stylesheet' href='/custom.css' />" },
} },
] themes: ["@docusaurus/theme-mermaid"],
} markdown: {
] mermaid: true,
}, },
colorMode: {
defaultMode: "light",
disableSwitch: false,
respectPrefersColorScheme: false
}
}),
plugins: [
[
"@easyops-cn/docusaurus-search-local",
{
hashed: true,
indexDocs: true,
indexPages: true
}
]
],
themes: ["@docusaurus/theme-mermaid"],
markdown: {
mermaid: true
}
}; };
module.exports = config; module.exports = config;

View File

@ -16,20 +16,21 @@
"check:spell": "cspell \"**/*.{md,mdx}\"" "check:spell": "cspell \"**/*.{md,mdx}\""
}, },
"dependencies": { "dependencies": {
"@acid-info/logos-docusaurus-preset": "^0.3.0", "@acid-info/logos-docusaurus-preset": "^1.0.0-alpha.34",
"@docusaurus/core": "^2.4.0", "@docusaurus/core": "^2.4.1",
"@docusaurus/preset-classic": "^2.4.0", "@docusaurus/preset-classic": "^2.4.1",
"@docusaurus/theme-mermaid": "^2.4.0", "@docusaurus/theme-mermaid": "^2.4.1",
"@emotion/react": "^11.11.0",
"@emotion/styled": "^11.11.0",
"@mdx-js/react": "^1.6.22", "@mdx-js/react": "^1.6.22",
"add": "^2.0.6", "add": "^2.0.6",
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"prism-react-renderer": "^1.3.5", "prism-react-renderer": "^1.3.5",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2"
"yarn": "^1.22.19"
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "^2.4.0", "@docusaurus/module-type-aliases": "^2.4.1",
"@tsconfig/docusaurus": "^1.0.5", "@tsconfig/docusaurus": "^1.0.5",
"cspell": "^6.16.0", "cspell": "^6.16.0",
"docusaurus-plugin-sass": "^0.2.2", "docusaurus-plugin-sass": "^0.2.2",
@ -37,7 +38,7 @@
"lint-staged": "^13.0.3", "lint-staged": "^13.0.3",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"pretty-quick": "^3.1.3", "pretty-quick": "^3.1.3",
"sass": "^1.55.0", "sass": "^1.62.1",
"typescript": "^4.7.4" "typescript": "^4.7.4"
}, },
"browserslist": { "browserslist": {

View File

@ -13,12 +13,12 @@ const sidebars = {
"overview/why-waku", "overview/why-waku",
"overview/use-cases", "overview/use-cases",
{ {
type: "html", type: 'html',
value: "<a href='/guides/nodes-and-sdks' target='_blank' rel='noopener noreferrer' class='menu__link external-link'>Nodes and SDKs <svg width='13.5' height='13.5' viewBox='0 0 24 24'><path fill='currentColor' d='M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z'></path></svg></a>" value: '<a href="/guides/nodes-and-sdks" target="_blank" rel="noopener noreferrer" class="menu__link external-link">Nodes and SDKs<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.1918 4H3.42848V2.85715H13.1428V12.5714H11.9999V4.80813L3.83254 12.9755L3.02441 12.1674L11.1918 4Z" fill="white"/></svg>',
}, },
{ {
type: "html", type: 'html',
value: "<a href='/presentations' target='_blank' rel='noopener noreferrer' class='menu__link external-link'>Presentations <svg width='13.5' height='13.5' viewBox='0 0 24 24'><path fill='currentColor' d='M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z'></path></svg></a>" value: '<a href="/presentations" target="_blank" rel="noopener noreferrer" class="menu__link external-link">Presentations<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.1918 4H3.42848V2.85715H13.1428V12.5714H11.9999V4.80813L3.83254 12.9755L3.02441 12.1674L11.1918 4Z" fill="white"/></svg>',
}, },
{ {
type: "category", type: "category",
@ -33,16 +33,16 @@ const sidebars = {
label: "Peer Discovery", label: "Peer Discovery",
link: { link: {
type: "doc", type: "doc",
id: "overview/concepts/peer-discovery" id: "overview/concepts/peer-discovery",
}, },
items: [ items: [
"overview/concepts/peer-discovery/predefined-nodes", "overview/concepts/peer-discovery/predefined-nodes",
"overview/concepts/peer-discovery/dns-discovery", "overview/concepts/peer-discovery/dns-discovery",
"overview/concepts/peer-discovery/discv5", "overview/concepts/peer-discovery/discv5",
"overview/concepts/peer-discovery/peer-exchange" "overview/concepts/peer-discovery/peer-exchange",
] ]
}, },
"overview/concepts/transports" "overview/concepts/transports",
] ]
}, },
{ {
@ -52,7 +52,7 @@ const sidebars = {
"overview/reference/glossary", "overview/reference/glossary",
"overview/reference/security-features", "overview/reference/security-features",
"overview/reference/research-in-progress", "overview/reference/research-in-progress",
"overview/reference/waku-vs-libp2p" "overview/reference/waku-vs-libp2p",
] ]
} }
] ]
@ -65,7 +65,7 @@ const sidebars = {
collapsible: false, collapsible: false,
items: [ items: [
"guides/nodes-and-sdks", "guides/nodes-and-sdks",
"guides/run-nwaku-node" "guides/run-nwaku-node",
] ]
} }
], ],
@ -80,13 +80,12 @@ const sidebars = {
"contribute", "contribute",
"presentations", "presentations",
{ {
type: "link", type: 'html',
label: "Bug Bounty Program", value: '<a href="https://hackenproof.com/status-dot-im/waku" target="_blank" rel="noopener noreferrer" class="menu__link external-link">Bug Bounty Program<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.1918 4H3.42848V2.85715H13.1428V12.5714H11.9999V4.80813L3.83254 12.9755L3.02441 12.1674L11.1918 4Z" fill="white"/></svg>',
href: "https://hackenproof.com/status-dot-im/waku" },
}
] ]
} }
] ]
}; };
module.exports = sidebars; module.exports = sidebars;

View File

@ -1,53 +0,0 @@
import React from "react";
const PoweredByCard = ({ appLink, logoSrc, appName, children }) => (
<div
style={{
width: "100%",
border: "1px solid #666",
borderRadius: "8px",
padding: "1.5rem"
}}
>
<div style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
backgroundColor: "#fff",
marginBottom: "1rem"
}}>
<img
src={logoSrc}
alt={appName + " logo"}
style={{
height: "55px",
padding: "5px"
}}
/>
</div>
<p>{children}</p>
<a href={appLink} target="_blank" rel="noopener noreferrer">
<button
style={{
width: "100%",
padding: "1rem",
borderRadius: "8px",
backgroundColor: "#e6f6ff",
border: "1px solid #666",
fontSize: "16px",
fontWeight: 700,
cursor: "pointer",
color: "#3578e5"
}}
>
Visit { appName }&nbsp;
<svg width="16" height="16" aria-hidden="true" viewBox="0 0 24 24">
<path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z">
</path>
</svg>
</button>
</a>
</div>
);
export default PoweredByCard;

View File

@ -1,2 +1,34 @@
:root { :root {
} }
.header-github-link:hover {
opacity: 0.6;
}
.header-github-link:before {
content: "";
width: 24px;
height: 24px;
display: flex;
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
no-repeat;
}
html[data-theme="dark"] .header-github-link:before {
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
no-repeat;
}
.yt-video {
max-width: 100%;
width: 640px;
height: 360px;
}
.external-link {
margin-top: 0.25rem;
}
.hidden {
display: none;
}

View File

@ -1,51 +0,0 @@
.powered-by-card-container {
display: grid;
gap: 1rem;
justify-content: center;
}
@media (max-width: 767px) {
.powered-by-card-container {
grid-template-columns: 1fr;
}
}
@media (min-width: 768px) {
.powered-by-card-container {
grid-template-columns: repeat(2, 1fr);
}
}
.header-github-link:hover {
opacity: 0.6;
}
.header-github-link:before {
content: '';
width: 24px;
height: 24px;
display: flex;
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
no-repeat;
}
html[data-theme='dark'] .header-github-link:before {
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
no-repeat;
}
.yt-video {
max-width: 100%;
width: 640px;
height: 360px;
}
.external-link {
margin-top: 0.25rem;
}
.external-link svg {
width: 13.5px;
height: 13.5px;
margin-left: 0.3rem;
}

View File

@ -0,0 +1,3 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M50.3024 18.6316C50.3024 14.5789 48.4406 10.7719 45.3377 8.19298C42.7313 5.98246 39.5043 5 35.2843 5H15.9222V11.0175H5V18.8772H35.5326V11.6316C37.3943 11.5088 39.1319 12.1228 40.6213 13.1053C42.3589 14.4561 43.2278 16.5439 43.1036 18.6316C43.1036 22.807 40.3731 26.3684 34.6638 26.3684H15.9222V54H23.3692V33.1228H32.9261L43.1036 54H52.04L40.6213 32.1404C46.5789 30.2982 50.4265 24.7719 50.3024 18.6316Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 531 B

View File

@ -0,0 +1,3 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M50.3024 18.6316C50.3024 14.5789 48.4406 10.7719 45.3377 8.19298C42.7313 5.98246 39.5043 5 35.2843 5H15.9222V11.0175H5V18.8772H35.5326V11.6316C37.3943 11.5088 39.1319 12.1228 40.6213 13.1053C42.3589 14.4561 43.2278 16.5439 43.1036 18.6316C43.1036 22.807 40.3731 26.3684 34.6638 26.3684H15.9222V54H23.3692V33.1228H32.9261L43.1036 54H52.04L40.6213 32.1404C46.5789 30.2982 50.4265 24.7719 50.3024 18.6316Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 531 B

View File

@ -0,0 +1,3 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.6479 28.7454C30.3452 28.9357 28.2754 28.1664 24.9723 28.3571C24.1531 28.4031 23.3396 28.5219 22.5412 28.7119C23.0288 22.6035 27.3519 17.26 33.2306 16.9204C36.8381 16.7122 40.4439 18.9396 40.6394 22.5554C40.8319 26.1093 38.1221 28.4868 33.6483 28.7449L33.6479 28.7454ZM24.779 41.2399C21.323 41.4351 17.8692 39.3499 17.6817 35.9663C17.4972 32.6402 20.0937 30.4151 24.3794 30.1735C27.543 29.9952 29.5261 30.7155 32.6897 30.5368C33.4741 30.4938 34.2533 30.3827 35.0186 30.2047C34.5523 35.9213 30.411 40.9225 24.779 41.2399ZM28.9999 1.44478C13.7812 1.44434 1.44434 13.781 1.44434 28.9999C1.44434 44.2187 13.7812 56.5554 28.9999 56.5554C44.2186 56.5554 56.5554 44.2183 56.5554 28.9999C56.5554 13.7815 44.2186 1.44434 28.9999 1.44434" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 899 B

View File

@ -0,0 +1,3 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.6479 28.7454C30.3452 28.9357 28.2754 28.1664 24.9723 28.3571C24.1531 28.4031 23.3396 28.5219 22.5412 28.7119C23.0288 22.6035 27.3519 17.26 33.2306 16.9204C36.8381 16.7122 40.4439 18.9396 40.6394 22.5554C40.8319 26.1093 38.1221 28.4868 33.6483 28.7449L33.6479 28.7454ZM24.779 41.2399C21.323 41.4351 17.8692 39.3499 17.6817 35.9663C17.4972 32.6402 20.0937 30.4151 24.3794 30.1735C27.543 29.9952 29.5261 30.7155 32.6897 30.5368C33.4741 30.4938 34.2533 30.3827 35.0186 30.2047C34.5523 35.9213 30.411 40.9225 24.779 41.2399ZM28.9999 1.44478C13.7812 1.44434 1.44434 13.781 1.44434 28.9999C1.44434 44.2187 13.7812 56.5554 28.9999 56.5554C44.2186 56.5554 56.5554 44.2183 56.5554 28.9999C56.5554 13.7815 44.2186 1.44434 28.9999 1.44434" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 899 B

View File

@ -0,0 +1,3 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.6666 33.111C19.7939 33.111 14.2222 27.5397 14.2222 20.6666C14.2222 13.7935 19.7939 8.2222 26.6666 8.2222C33.5397 8.2222 39.111 13.7935 39.111 20.6666C39.111 27.5397 33.5397 33.111 26.6666 33.111ZM26.6666 2C36.9759 2 45.3332 10.3574 45.3332 20.6666C45.3332 30.9758 36.9759 39.3332 26.6666 39.3332C16.3574 39.3332 8 30.9758 8 20.6666C8 10.3574 16.3574 2 26.6666 2ZM44.4221 40.2443C45.6371 41.4593 45.6371 43.4289 44.4221 44.644L31.9773 57.0887C30.7623 58.3038 28.7927 58.3038 27.5777 57.0887C26.3627 55.8737 26.3627 53.9041 27.5777 52.6891L40.0225 40.2443C41.2375 39.0293 43.2071 39.0293 44.4221 40.2443ZM51.5554 5.1111C51.5554 6.82956 50.1628 8.2222 48.4447 8.2222C46.7262 8.2222 45.3336 6.82956 45.3336 5.1111C45.3336 3.39264 46.7262 2 48.4447 2C50.1628 2 51.5554 3.39264 51.5554 5.1111Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 960 B

View File

@ -0,0 +1,3 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.6666 33.111C19.7939 33.111 14.2222 27.5397 14.2222 20.6666C14.2222 13.7935 19.7939 8.2222 26.6666 8.2222C33.5397 8.2222 39.111 13.7935 39.111 20.6666C39.111 27.5397 33.5397 33.111 26.6666 33.111ZM26.6666 2C36.9759 2 45.3332 10.3574 45.3332 20.6666C45.3332 30.9758 36.9759 39.3332 26.6666 39.3332C16.3574 39.3332 8 30.9758 8 20.6666C8 10.3574 16.3574 2 26.6666 2ZM44.4221 40.2443C45.6371 41.4593 45.6371 43.4289 44.4221 44.644L31.9773 57.0887C30.7623 58.3038 28.7927 58.3038 27.5777 57.0887C26.3627 55.8737 26.3627 53.9041 27.5777 52.6891L40.0225 40.2443C41.2375 39.0293 43.2071 39.0293 44.4221 40.2443ZM51.5554 5.1111C51.5554 6.82956 50.1628 8.2222 48.4447 8.2222C46.7262 8.2222 45.3336 6.82956 45.3336 5.1111C45.3336 3.39264 46.7262 2 48.4447 2C50.1628 2 51.5554 3.39264 51.5554 5.1111Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 960 B

View File

@ -0,0 +1,10 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_949_40203)">
<path d="M2 29.5C2 14.3122 14.1486 2 29.1346 2C44.1109 2 55.6819 14.0833 56.0342 29.3809C56.0342 34.2619 54.3897 38.369 50.2785 42.238C46.8043 45.5077 40.8811 45.988 36.5353 43.5476C33.4334 41.7342 31.0428 37.8722 29.0171 35.0357L25.2582 40.869H17.1531L24.7884 29.3805L17.388 18.0714H25.7281L29.076 23.9048L32.3648 18.0714H40.7638L33.1285 29.3809C33.1285 29.3809 36.7699 35.0357 38.7668 37.2381C40.7638 39.4406 44.4052 39.5 46.7544 37.1191C49.3375 34.5012 49.9157 32.4168 49.9262 29.3809C49.9664 17.6303 40.7568 8.19047 29.1346 8.19047C17.5221 8.19047 8.10822 17.7311 8.10822 29.5C8.10822 41.2689 17.5221 50.8096 29.1346 50.8096C30.7409 50.8096 32.2803 50.6728 33.7745 50.3332L35.0667 56.3453C32.9406 56.8283 31.2229 57 29.1346 57C14.1486 57 2 44.6878 2 29.5Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_949_40203">
<rect width="58" height="58" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,10 @@
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1029_16174)">
<path d="M2 29.5C2 14.3122 14.1486 2 29.1346 2C44.1109 2 55.6819 14.0833 56.0342 29.3809C56.0342 34.2619 54.3897 38.369 50.2785 42.238C46.8043 45.5077 40.8811 45.988 36.5353 43.5476C33.4334 41.7342 31.0428 37.8722 29.0171 35.0357L25.2582 40.869H17.1531L24.7884 29.3805L17.388 18.0714H25.7281L29.076 23.9048L32.3648 18.0714H40.7638L33.1285 29.3809C33.1285 29.3809 36.7699 35.0357 38.7668 37.2381C40.7638 39.4406 44.4052 39.5 46.7544 37.1191C49.3375 34.5012 49.9157 32.4168 49.9262 29.3809C49.9664 17.6303 40.7568 8.19047 29.1346 8.19047C17.5221 8.19047 8.10822 17.7311 8.10822 29.5C8.10822 41.2689 17.5221 50.8096 29.1346 50.8096C30.7409 50.8096 32.2803 50.6728 33.7745 50.3332L35.0667 56.3453C32.9406 56.8283 31.2229 57 29.1346 57C14.1486 57 2 44.6878 2 29.5Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1029_16174">
<rect width="58" height="58" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

1096
yarn.lock

File diff suppressed because it is too large Load Diff