diff --git a/docusaurus.config.js b/docusaurus.config.js index 91f819db..96e70e0e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -3,6 +3,7 @@ const lightCodeTheme = require("prism-react-renderer").themes.github; const darkCodeTheme = require("prism-react-renderer").themes.dracula; +const fs = require('fs').promises; const siteName = "Runme.dev"; const twitterHandle = "@statefulhq"; @@ -55,6 +56,46 @@ const config = { }, }; }, + async function examplesInDocs(context, options) { + return { + name: 'examples-in-docs', + async contentLoaded({ content, actions }) { + const { createData, addRoute } = actions; + const examples = await fs.readFile('./examples/examples.json', 'utf8'); + const examplesJsonPath = await createData( + 'examples.json', + examples, + ); + + addRoute({ + path: '/examples', + component: '@site/src/components/ExamplesPage', + modules: { + // propName -> JSON file path + examples: examplesJsonPath, + }, + exact: true, + }); + + const examplesJson = JSON.parse(examples); + examplesJson.forEach(async (example) => { + const exampleJsonPath = await createData( + `example-${example.slug}.json`, + JSON.stringify(example), + ); + addRoute({ + path: `/examples/${example.slug}`, + component: '@site/src/components/ExamplesPage', + modules: { + // propName -> JSON file path + example: exampleJsonPath, + }, + exact: true, + }); + }); + }, + };; + }, [ "@docusaurus/plugin-pwa", { @@ -182,15 +223,15 @@ const config = { * credentials available in 1password */ ...(process.env.ALGOLIA_API_KEY && - process.env.ALGOLIA_INDEX_NAME && - process.env.ALGOLIA_APP_ID + process.env.ALGOLIA_INDEX_NAME && + process.env.ALGOLIA_APP_ID ? { - algolia: { - apiKey: process.env.ALGOLIA_API_KEY, - indexName: process.env.ALGOLIA_INDEX_NAME, - appId: process.env.ALGOLIA_APP_ID, - }, - } + algolia: { + apiKey: process.env.ALGOLIA_API_KEY, + indexName: process.env.ALGOLIA_INDEX_NAME, + appId: process.env.ALGOLIA_APP_ID, + }, + } : {}), }), }; diff --git a/examples/examples.json b/examples/examples.json new file mode 100644 index 00000000..ed631870 --- /dev/null +++ b/examples/examples.json @@ -0,0 +1,115 @@ +[ + { + "title": "Hello World!", + "description": "A simple example to create a new markdown file that installs and runs the dancing-bear with npm, run it in the notebook UX, and then use the `runme` CLI to parse and run the dancing bear in the terminal.", + "slug": "hello-world", + "tags": ["notebook", "cli", "hello world"], + "runme": "https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fsourishkrout%2Floon.git&fileToOpen=AI.md", + "repo": "https://github.com/stateful/vscode-runme/blob/main/examples/README.md", + "docs": "https://docs.runme.dev/install", + "img": "/graphics/hello-world.gif" + }, + { + "title": "Image rendering in notebook cells with OpenAI (image MIME type)", + "description": "Changing the mimeType in the notebook cell configuration (image/png) let's you specify how you want the output rendered, in this case the image binary generated by OpenAI.", + "webm": "https://media.graphassets.com/XfI7g2nYTgmwSGg75CDc", + "mp4": "https://media.graphassets.com/N4iyhZ7S8WmssHAAQnbA", + "slug": "rendering-an-image-openai", + "tags": ["notebook", "render", "openai", "mime", "jpg", "image", "output"], + "runme": "https://runme.dev/api/runme?repository=https%253A%252F%252Fgithub.com%252Fstateful%252Fvscode-runme.git%2526fileToOpen%253D%252Fexamples%252FREADME.md", + "repo": "https://github.com/sourishkrout/loon", + "docs": "https://docs.runme.dev/configuration#supported-mime-types" + }, + { + "title": "Integration testing a markdown in Github Actions", + "description": "Avoid having to maintain multiple workflows for building, testing and deploying your application and instead, document them in markdown and have them used by your contributors and CI/CD. Find out in this example how we manage workflows in our `stateful/runmejs` project using Runme.", + "img": "/graphics/runme-in-ci.png", + "slug": "integration-testing-markdown-gh-action", + "runme": "https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fstateful%2Frunmejs.git&fileToOpen=CONTRIBUTING.md", + "repo": "https://github.com/stateful/runmejs", + "docs": "https://docs.runme.dev/integrations#github-action", + "tags": ["cli", "testing", "markdown", "github", "action", "ci/cd", "terminal"] + }, + { + "title": "Hardening Ubuntu server", + "description": "Enhances the server's overall security posture, encourages continuous improvement, and safeguards against future attacks,", + "mp4": "https://media.graphassets.com/RiKBWblNSbSR86ZcAVTa", + "webm": "https://media.graphassets.com/NPgIDIcrRaiDt6prS8VD", + "slug": "Hardening-Ubuntu-server", + "runme": "https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fstateful%2Fhardening-ubuntu-server%2Fblob%2Fmain%2FREADME.md", + "repo": "https://github.com/stateful/hardening-ubuntu-server", + "docs": "https://docs.runme.dev/architecture", + "tags": ["cli", "markdown", "ci/cd", "terminal", "ubuntu", "security"] + }, + { + "title": "Explore large JSON files interactively with antonmedv/fx", + "description": "Create interactive workflows that allow your contributor to inspect their environment using popular terminal tools right within VS Code.", + "img": "/graphics/fx-demo.gif", + "slug": "explore-json-fx", + "runme": "https://runme.dev/api/runme?repository=https%253A%252F%252Fgithub.com%252Fstateful%252Fvscode-runme.git%2526fileToOpen%253D%252Fexamples%252FREADME.md", + "tags": ["notebook", "fx", "json", "render"] + }, + { + "title": "Launching a Runme notebook with a web link", + "description": "With Runme you can bootstrap the onboarding of your contributors interactively through a notebook. With the Runme link you can save developers time having to manually clone the repository and direct them to the right document that help them to get productive quickly.", + "img": "/graphics/runme-link-demo.gif", + "slug": "launch-notebook-web-link", + "runme": "https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Fstateful%2Frunmejs.git&fileToOpen=CONTRIBUTING.md", + "docs": "https://docs.runme.dev/features#run-with-runme-deep-linking", + "tags": ["notebook", "web", "education", "tutorial", "onboarding"] + }, + { + "title": "Render notebook cell output as a table (csv MIME type)", + "description": "If you want to render a sortable table instead of comma delimited text with your cell output, it's as simple as going into the cell configuration and changing the mimetype to `text/csv` then re-running the cell. This is one of many super useful available MIME types you can take advantage of in your Runme notebook.", + "img": "/graphics/mime-type-demo.gif", + "slug": "custom-renderer-table-mime", + "docs": "https://docs.runme.dev/configuration#supported-mime-types", + "tags": ["notebook", "mime", "render", "output", "table"] + }, + { + "title": "Chaining output between markdown commands", + "description": "With the `$__` parameter you can transfer the stdout result of a previous cell into your next execution.", + "img": "/graphics/chaining-demo.gif", + "slug": "chain-output-between-commands", + "docs": "https://docs.runme.dev/features#chain-cell-output", + "tags": ["notebook", "cli", "output", "chaining", "markdown", "workflow", "terminal"] + }, + { + "title": "Vercel deployment workflow in a notebook", + "description": "Runme integrates with cloud services such as Vercel or Deno cloud to make deploying on the edge interactive and fun!", + "img": "/graphics/integrations.gif", + "slug": "vercel-deploy-in-notebook", + "docs": "https://docs.runme.dev/integrations#nextjs-app-on-vercel", + "tags": ["notebook", "vercel", "integration", "deploy"] + }, + { + "title": "Running Docker commands from markdown with our CLI", + "description": "Runme can share the same terminal session across CLI and notebook allowing you to run flexible Docker workflows between VS Code and your terminal.", + "img": "/graphics/docker-demo.gif", + "slug": "running-docker-markdown-cli", + "tags": ["notebook", "markdown", "docker"] + }, + { + "title": "Notebook LSP Support", + "description": "Runme notebooks come with support of multiple script and declaritive languages, e.g. YAML, providing you text highlighting and auto-completion feature.", + "img": "/graphics/lsp-demo.gif", + "slug": "lsp-support", + "tags": ["notebook", "lsp", "language"] + }, + { + "title": "Consistant Environment State", + "description": "Execute markdown cells in VS Code and keep environment variables persistent. This allows you to create a click to play notebook experience for running your markdown in the browser, or VS Code with Runme.", + "img": "/graphics/notebook-transparent.gif", + "slug": "environment-state", + "tags": ["environment", "workflow", "state"] + }, + { + "title": "Runme in DevContainer", + "description": "The VS Code window attaches to an instance of the container image and transparently mounts the file system so changes are reflected locally.", + "mp4": "/videos/devcontainer.mp4", + "webm": "/videos/devcontainer.webm", + "runme": "https://runme.dev/api/runme?repository=https%253A%252F%252Fgithub.com%252Fstateful%252Fblog-examples.git%2526fileToOpen%253D%252Fdevcontainer%252Fsandbox.md", + "slug": "devcontainer", + "tags": ["devcontainer", "workspace", "ephemeral"] + } +] diff --git a/examples/examples.next b/examples/examples.next new file mode 100644 index 00000000..b40b4d0a --- /dev/null +++ b/examples/examples.next @@ -0,0 +1,23 @@ +[ + { + "title": "Github Actions workflows UX (from a URL)", + "description": "This is a description of the thing this does and why it's cool", + "img": "https://media.graphassets.com/mbfC7eMfSHaKGeXvvWh2", + "slug": "gh-action-workflow-ux", + "tags": ["notebook", "github", "workflows", "ux", "action"] + }, + { + "title": "Terminals embeded in your notebook cells", + "description": "This is a description of the thing this does and why it's cool", + "img": "https://media.graphassets.com/mbfC7eMfSHaKGeXvvWh2", + "slug": "terminals-embeded-notebook-cells", + "tags": ["notebook", "terminal"] + }, + { + "title": "Click to send a SMS (Twilio) from a notebook", + "description": "This is a description of the thing this does and why it's cool", + "img": "https://media.graphassets.com/mbfC7eMfSHaKGeXvvWh2", + "slug": "sent-sms-twilio-notebook", + "tags": ["notebook", "sms", "twilio"] + } +] diff --git a/package-lock.json b/package-lock.json index 1ab7ec98..21103e06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,9 @@ "@docusaurus/core": "3.1.1", "@docusaurus/plugin-pwa": "^3.1.1", "@docusaurus/preset-classic": "3.1.1", + "@docusaurus/tsconfig": "3.1.1", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.1.0", "prism-react-renderer": "^2.3.0", @@ -2769,6 +2772,11 @@ "node": ">=18.0" } }, + "node_modules/@docusaurus/tsconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.1.1.tgz", + "integrity": "sha512-FTBuY3KvaHfMVBgvlPmDQ+KS9Q/bYtVftq2ugou3PgBDJoQmw2aUZ4Sg15HKqLGbfIkxoy9t6cqE4Yw1Ta8Q1A==" + }, "node_modules/@docusaurus/types": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", @@ -2915,6 +2923,52 @@ "node": ">=14" } }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz", + "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz", + "integrity": "sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz", + "integrity": "sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -18993,4 +19047,4 @@ } } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 71f88a25..6103b623 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,9 @@ "@docusaurus/core": "3.1.1", "@docusaurus/plugin-pwa": "^3.1.1", "@docusaurus/preset-classic": "3.1.1", + "@docusaurus/tsconfig": "3.1.1", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.1.0", "prism-react-renderer": "^2.3.0", @@ -47,4 +50,4 @@ "last 1 safari version" ] } -} +} \ No newline at end of file diff --git a/src/components/ExamplesPage.tsx b/src/components/ExamplesPage.tsx new file mode 100644 index 00000000..ecc42539 --- /dev/null +++ b/src/components/ExamplesPage.tsx @@ -0,0 +1,314 @@ +import BrowserOnly from '@docusaurus/BrowserOnly'; +import React, { useEffect, useState } from "react"; +import Layout from "@theme/Layout"; + +import clsx from "clsx"; + +import { + faArrowRight, + faChevronDown, + faChevronUp, + faLink, + faTableList, + faTerminal, +} from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +export default function (props) { + return ( + Loading...}> + {() => { + return ; + }} + + ); +} + +// function Layout({ children }) { +// return ( +// +// +//
+//
+// {children} +//
+//
+//
+// ) +// } + +function ExamplesPage({ examples, example }) { + if (example) { + return ( + + + +
+
More examples
+
+
+
+ ); + } + + return ( + + + + ) +} + +function ExampleContent({ entry }) { + const { description, img, webm, mp4, slug, runme, repo, docs, tags, title } = entry; + const video = webm || mp4; + + return ( +
+
{title}
+
+ [{tags.sort().join(", ")}] +
+
{description}
+
+ {docs && ( +
+ Documentation +
+ )} + {repo && ( +
+ Repository +
+ )} + {runme && ( + +
+ +
+
+ )} +
+ + {img && ( +
+ {slug} +
+ )} + {video && ( +
+ +
+ )} +
+ ); +} + +const Examples = ({ examples }) => { + const [entries, setEntries] = useState(examples); + // const tags = [...new Set(examplesArr.map((entry) => entry.tags).flat())]; + const tags = [] + const [tagsOn, setTagsOn] = useState([]); + const [filter, setFilter] = useState(""); + + useEffect(() => { + setEntries( + examples + .filter((entry) => { + const inter = entry.tags.filter((value) => tagsOn.includes(value)); + return !tagsOn.length || inter.length > 0; + }) + .filter((entry) => !filter.length || JSON.stringify(entry).includes(filter)) + ); + }, [tagsOn, filter]); + + return ( +
+
+

Examples

+

A collection of cool ways to use Runme.

+
+ +
+
+ { + setFilter(e.target.value); + }} + /> +
+ { + setFilter(""); + return false; + }} + > + Clear + +
+
+
+
+ {tags.sort().map((tag) => { + return ( +
{ + if (tagsOn.includes(tag)) { + setTagsOn(tagsOn.filter((entry) => entry !== tag)); + } else { + setTagsOn([...tagsOn, tag]); + } + }} + className={clsx( + "mx-1 py-0.5 px-2 border rounded-md cursor-pointer mt-1", + { + "bg-purpleish-500 text-white": tagsOn.includes(tag), + }, + { "text-neutral-700": !tagsOn.includes(tag) } + )} + > + {tag} +
+ ); + })} +
+
+
+
+ {entries.map((entry) => { + return ; + })} +
+
+ ); +}; + +const ShowEntry = ({ entry }) => { + const { title, slug, tags } = entry; + const [open, setOpen] = useState(false); + const url = slug || `${title?.toLowerCase().replaceAll(" ", "-")}`; + const cli = tags?.includes("cli"); + const notebook = tags?.includes("notebook"); + + return ( +
+
+
+
+ + + +
+

{ + setOpen(!open); + }} + > + {title} +

+ + # + +
+
+
{ + setOpen(!open); + }} + > +
+ {cli === true && ( + + )} + {notebook === true && ( + + )} +
+
+ {open ? ( + + ) : ( + + )} +
+
+
+ {open && } +
+
+ ); +}; +const EntryContent = (entry) => { + const { description, img, webm, mp4, slug, runme, repo, docs, tags } = entry; + const video = webm || mp4; + + return ( +
+
{description}
+
+ {docs && ( +
+ Documentation +
+ )} + {repo && ( +
+ Repository +
+ )} + {runme && ( + +
+ +
+
+ )} +
+
+ [{tags.sort().join(", ")}] +
+ + {img && ( +
+ {slug} +
+ )} + {video && ( +
+ +
+ )} +
+ ); +}; diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx deleted file mode 100644 index 6060a27f..00000000 --- a/src/components/Layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' - -interface LayoutProps extends React.PropsWithChildren { - isHomepage?: boolean; -} - -export default function Layout(props: LayoutProps) { - const { isHomepage, children } = props - return ( -
- {children} -
- ); -} diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md deleted file mode 100644 index 9756c5b6..00000000 --- a/src/pages/markdown-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -You don't need React to write simple standalone pages. diff --git a/static/graphics/careers-1.svg b/static/graphics/careers-1.svg new file mode 100644 index 00000000..73867b9b --- /dev/null +++ b/static/graphics/careers-1.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/graphics/careers-2.svg b/static/graphics/careers-2.svg new file mode 100644 index 00000000..eae38349 --- /dev/null +++ b/static/graphics/careers-2.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/graphics/careers-3.svg b/static/graphics/careers-3.svg new file mode 100644 index 00000000..c20f9a5c --- /dev/null +++ b/static/graphics/careers-3.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/graphics/careers-4.svg b/static/graphics/careers-4.svg new file mode 100644 index 00000000..52332880 --- /dev/null +++ b/static/graphics/careers-4.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/graphics/careers-5.svg b/static/graphics/careers-5.svg new file mode 100644 index 00000000..a74cfb9a --- /dev/null +++ b/static/graphics/careers-5.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/graphics/chaining-demo.gif b/static/graphics/chaining-demo.gif new file mode 100644 index 00000000..96c0f6f3 Binary files /dev/null and b/static/graphics/chaining-demo.gif differ diff --git a/static/graphics/cloud-features-hero-mobile.png b/static/graphics/cloud-features-hero-mobile.png new file mode 100644 index 00000000..986289cb Binary files /dev/null and b/static/graphics/cloud-features-hero-mobile.png differ diff --git a/static/graphics/cloud-features-hero.png b/static/graphics/cloud-features-hero.png new file mode 100644 index 00000000..88289c74 Binary files /dev/null and b/static/graphics/cloud-features-hero.png differ diff --git a/static/graphics/customize.png b/static/graphics/customize.png new file mode 100644 index 00000000..b02f18b2 Binary files /dev/null and b/static/graphics/customize.png differ diff --git a/static/graphics/docker-demo.gif b/static/graphics/docker-demo.gif new file mode 100644 index 00000000..ad47764f Binary files /dev/null and b/static/graphics/docker-demo.gif differ diff --git a/static/graphics/fx-demo.gif b/static/graphics/fx-demo.gif new file mode 100644 index 00000000..06a6c24c Binary files /dev/null and b/static/graphics/fx-demo.gif differ diff --git a/static/graphics/hello-world.gif b/static/graphics/hello-world.gif new file mode 100644 index 00000000..c01f5abf Binary files /dev/null and b/static/graphics/hello-world.gif differ diff --git a/static/graphics/integrations.gif b/static/graphics/integrations.gif new file mode 100644 index 00000000..4f6cc943 Binary files /dev/null and b/static/graphics/integrations.gif differ diff --git a/static/graphics/integrations.png b/static/graphics/integrations.png new file mode 100644 index 00000000..d29cd34e Binary files /dev/null and b/static/graphics/integrations.png differ diff --git a/static/graphics/languages.png b/static/graphics/languages.png new file mode 100644 index 00000000..641ce4c6 Binary files /dev/null and b/static/graphics/languages.png differ diff --git a/static/graphics/lsp-demo.gif b/static/graphics/lsp-demo.gif new file mode 100644 index 00000000..19cee1d2 Binary files /dev/null and b/static/graphics/lsp-demo.gif differ diff --git a/static/graphics/markdown-cicd.png b/static/graphics/markdown-cicd.png new file mode 100644 index 00000000..5d423c16 Binary files /dev/null and b/static/graphics/markdown-cicd.png differ diff --git a/static/graphics/mime-type-demo.gif b/static/graphics/mime-type-demo.gif new file mode 100644 index 00000000..5abb9667 Binary files /dev/null and b/static/graphics/mime-type-demo.gif differ diff --git a/static/graphics/mixmatch.png b/static/graphics/mixmatch.png new file mode 100644 index 00000000..3aaa61d8 Binary files /dev/null and b/static/graphics/mixmatch.png differ diff --git a/static/graphics/notebook-transparent.gif b/static/graphics/notebook-transparent.gif new file mode 100644 index 00000000..2018b129 Binary files /dev/null and b/static/graphics/notebook-transparent.gif differ diff --git a/static/graphics/notebook.gif b/static/graphics/notebook.gif new file mode 100644 index 00000000..7f67769f Binary files /dev/null and b/static/graphics/notebook.gif differ diff --git a/static/graphics/notebook.png b/static/graphics/notebook.png new file mode 100644 index 00000000..b0a004f7 Binary files /dev/null and b/static/graphics/notebook.png differ diff --git a/static/graphics/outdated.png b/static/graphics/outdated.png new file mode 100644 index 00000000..9c164a29 Binary files /dev/null and b/static/graphics/outdated.png differ diff --git a/static/graphics/playground.svg b/static/graphics/playground.svg new file mode 100644 index 00000000..d0a42929 --- /dev/null +++ b/static/graphics/playground.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/graphics/procedure.png b/static/graphics/procedure.png new file mode 100644 index 00000000..8fd41b71 Binary files /dev/null and b/static/graphics/procedure.png differ diff --git a/static/graphics/runme-circles.png b/static/graphics/runme-circles.png new file mode 100644 index 00000000..f8fca1e5 Binary files /dev/null and b/static/graphics/runme-circles.png differ diff --git a/static/graphics/runme-features.svg b/static/graphics/runme-features.svg new file mode 100644 index 00000000..35552e31 --- /dev/null +++ b/static/graphics/runme-features.svg @@ -0,0 +1,3625 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/graphics/runme-in-ci.png b/static/graphics/runme-in-ci.png new file mode 100644 index 00000000..000c51a2 Binary files /dev/null and b/static/graphics/runme-in-ci.png differ diff --git a/static/graphics/runme-link-demo.gif b/static/graphics/runme-link-demo.gif new file mode 100644 index 00000000..b52e9f2c Binary files /dev/null and b/static/graphics/runme-link-demo.gif differ diff --git a/static/graphics/share.png b/static/graphics/share.png new file mode 100644 index 00000000..8f779ec8 Binary files /dev/null and b/static/graphics/share.png differ diff --git a/static/graphics/tasks.png b/static/graphics/tasks.png new file mode 100644 index 00000000..0fb098e6 Binary files /dev/null and b/static/graphics/tasks.png differ diff --git a/static/graphics/terminal.gif b/static/graphics/terminal.gif new file mode 100644 index 00000000..e99d940e Binary files /dev/null and b/static/graphics/terminal.gif differ diff --git a/static/graphics/terminal.png b/static/graphics/terminal.png new file mode 100644 index 00000000..132ee516 Binary files /dev/null and b/static/graphics/terminal.png differ diff --git a/static/graphics/tools.png b/static/graphics/tools.png new file mode 100644 index 00000000..e82ea6e7 Binary files /dev/null and b/static/graphics/tools.png differ diff --git a/static/graphics/venn.png b/static/graphics/venn.png new file mode 100644 index 00000000..89a62281 Binary files /dev/null and b/static/graphics/venn.png differ