diff --git a/astro.config.mjs b/astro.config.mjs
index 554c341..391f5b4 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -28,7 +28,9 @@ export default defineConfig({
],
customCss: [
// Add tailwind base styles:
- "./src/assets/styles/tailwind.css",
+ "./src/styles/tailwind.css",
+ "./src/styles/vgv_brand.css",
+ "./src/styles/theme.css",
"@fontsource/poppins/100.css",
"@fontsource/poppins/200.css",
"@fontsource/poppins/300.css",
@@ -118,6 +120,10 @@ export default defineConfig({
},
},
],
+ components: {
+ TwoColumnContent:
+ "./src/components/vgv_footer/vgv-two-column-content.astro",
+ },
}),
react(),
mdx(),
diff --git a/cspell.json b/cspell.json
index 2ebf5ad..ff37964 100644
--- a/cspell.json
+++ b/cspell.json
@@ -4,27 +4,100 @@
"ignorePaths": ["node_modules/**", ".**/"],
"files": ["**/*.md", "**/*.mdx", "**/*.tsx", "**/*.ts", "**/*.json"],
"words": [
+ "ABAP",
+ "Abuild",
+ "Agda",
+ "AMPL",
+ "ANTLR",
"astro",
"astrojs",
+ "Augeas",
+ "Batchfile",
+ "Befunge",
+ "Bluespec",
+ "Brightscript",
+ "Carto",
+ "Cirru",
+ "Codemagic",
+ "Crunscript",
+ "Csound",
+ "Cuda",
"Cupertino",
+ "Cycript",
+ "Cython",
+ "Diátaxis",
+ "Dogescript",
+ "Eclass",
+ "Filebench",
+ "Filterscript",
"fontsource",
+ "Frege",
+ "Genshi",
+ "GLSL",
"goldens",
+ "Golo",
+ "Gosu",
+ "Haxe",
+ "HLSL",
+ "Hola",
+ "Idris",
"incentivized",
+ "Inno",
+ "Ioke",
+ "Ishida",
+ "Jasmin",
+ "Jison",
+ "Jolie",
"laboratoria",
+ "Linx",
+ "Logtalk",
+ "LOLCODE",
+ "Mathematica",
"mdlint",
+ "merch",
+ "Mirah",
+ "Modelica",
+ "Moocode",
+ "MTML",
"multiplatform",
+ "Mundo",
+ "mupad",
+ "Myghty",
+ "Nearley",
+ "Nemerle",
+ "NSIS",
+ "Omgrofl",
+ "Oxygene",
+ "Pico",
+ "PLSQL",
"pubspec",
+ "Pythonconsole",
+ "Ragel",
+ "RAML",
+ "Rebol",
+ "Redcode",
+ "Ren'Py",
+ "REXX",
+ "Roff",
"rxdart",
+ "Scilab",
+ "Shen",
+ "Smali",
+ "SQLPL",
+ "Stata",
"statefulshellroute",
"tailwindcss",
"Tappable",
+ "Tcsh",
"todos",
"tsconfigs",
- "Codemagic",
- "Diátaxis",
- "Ishida",
- "Hola",
- "Mundo",
- "merch"
+ "Vala",
+ "Verilog",
+ "VGVENTURES",
+ "VHDL",
+ "Vimscript",
+ "Xojo",
+ "Zephir",
+ "Zimpl"
]
}
diff --git a/package-lock.json b/package-lock.json
index 183080e..6785fb6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,6 +26,8 @@
},
"devDependencies": {
"@laboratoria/mdlint": "^1.2.3",
+ "@octokit/rest": "^21.0.1",
+ "@octokit/types": "^13.5.0",
"eslint": "^9.3.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-astro": "^1.2.0",
@@ -2336,6 +2338,159 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/@octokit/auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz",
+ "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz",
+ "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.0.0",
+ "@octokit/request": "^9.0.0",
+ "@octokit/request-error": "^6.0.1",
+ "@octokit/types": "^13.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz",
+ "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/types": "^13.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz",
+ "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/request": "^9.0.0",
+ "@octokit/types": "^13.0.0",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "22.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
+ "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==",
+ "dev": true
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.3.3",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.3.tgz",
+ "integrity": "sha512-o4WRoOJZlKqEEgj+i9CpcmnByvtzoUYC6I8PD2SA95M+BJ2x8h7oLcVOg9qcowWXBOdcTRsMZiwvM3EyLm9AfA==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/types": "^13.5.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.4.tgz",
+ "integrity": "sha512-gusyAVgTrPiuXOdfqOySMDztQHv6928PQ3E4dqVGEtOvRXAKRbJR4b1zQyniIT9waqaWk/UDaoJ2dyPr7Bk7Iw==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/types": "^13.5.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz",
+ "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/endpoint": "^10.0.0",
+ "@octokit/request-error": "^6.0.1",
+ "@octokit/types": "^13.1.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.4.tgz",
+ "integrity": "sha512-VpAhIUxwhWZQImo/dWAN/NpPqqojR6PSLgLYAituLM6U+ddx9hCioFGwBr5Mi+oi5CLeJkcAs3gJ0PYYzU6wUg==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/types": "^13.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "21.0.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.0.1.tgz",
+ "integrity": "sha512-RWA6YU4CqK0h0J6tfYlUFnH3+YgBADlxaHXaKSG+BVr2y4PTfbU2tlKuaQoQZ83qaTbi4CUxLNAmbAqR93A6mQ==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/core": "^6.1.2",
+ "@octokit/plugin-paginate-rest": "^11.0.0",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
+ "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
+ "dev": true,
+ "dependencies": {
+ "@octokit/openapi-types": "^22.2.0"
+ }
+ },
"node_modules/@pagefind/darwin-arm64": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.1.0.tgz",
@@ -3557,6 +3712,12 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "dev": true
+ },
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -10202,6 +10363,12 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/universal-user-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
+ "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==",
+ "dev": true
+ },
"node_modules/update-browserslist-db": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
diff --git a/package.json b/package.json
index 91917b6..bba4e60 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,8 @@
},
"devDependencies": {
"@laboratoria/mdlint": "^1.2.3",
+ "@octokit/rest": "^21.0.1",
+ "@octokit/types": "^13.5.0",
"eslint": "^9.3.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-astro": "^1.2.0",
diff --git a/src/assets/hero/hero_dark.png b/src/assets/hero/hero_dark.png
new file mode 100644
index 0000000..31e01c2
Binary files /dev/null and b/src/assets/hero/hero_dark.png differ
diff --git a/src/assets/hero/hero_light.png b/src/assets/hero/hero_light.png
new file mode 100644
index 0000000..7dea6a7
Binary files /dev/null and b/src/assets/hero/hero_light.png differ
diff --git a/src/assets/logos/vgv_wordmark_dark.svg b/src/assets/logos/vgv_wordmark_dark.svg
new file mode 100644
index 0000000..a78dd48
--- /dev/null
+++ b/src/assets/logos/vgv_wordmark_dark.svg
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/branding/pattern-2.astro b/src/components/branding/pattern-2.astro
new file mode 100644
index 0000000..9012b5a
--- /dev/null
+++ b/src/components/branding/pattern-2.astro
@@ -0,0 +1,36 @@
+---
+
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/github_card/components/forks.astro b/src/components/github_card/components/forks.astro
new file mode 100644
index 0000000..a04cfc3
--- /dev/null
+++ b/src/components/github_card/components/forks.astro
@@ -0,0 +1,23 @@
+---
+import css from "../github-card.module.css";
+
+export interface Props {
+ forks: number;
+}
+
+const props = Astro.props;
+---
+
+
diff --git a/src/components/github_card/components/language.astro b/src/components/github_card/components/language.astro
new file mode 100644
index 0000000..bff9e7d
--- /dev/null
+++ b/src/components/github_card/components/language.astro
@@ -0,0 +1,22 @@
+---
+import type { LanguageColor } from "~/utils/github_languages";
+import css from "../github-card.module.css";
+
+export interface Props {
+ language: string | null;
+ languageColor: LanguageColor | null;
+}
+
+const props = Astro.props;
+---
+
+
diff --git a/src/components/github_card/components/stars.astro b/src/components/github_card/components/stars.astro
new file mode 100644
index 0000000..a1f1bbd
--- /dev/null
+++ b/src/components/github_card/components/stars.astro
@@ -0,0 +1,23 @@
+---
+import css from "../github-card.module.css";
+
+export interface Props {
+ stars: number;
+}
+
+const props = Astro.props;
+---
+
+
diff --git a/src/components/github_card/github-card.astro b/src/components/github_card/github-card.astro
new file mode 100644
index 0000000..47c5054
--- /dev/null
+++ b/src/components/github_card/github-card.astro
@@ -0,0 +1,41 @@
+---
+import Icon from "node_modules/@astrojs/starlight/user-components/Icon.astro";
+import { getRepositories } from "~/utils/github_repositories";
+import Forks from "./components/forks.astro";
+import Language from "./components/language.astro";
+import Stars from "./components/stars.astro";
+import css from "./github-card.module.css";
+
+export interface Props {
+ organizationOrUser: string;
+ repo: string;
+ logo?: string;
+}
+
+const repos = await getRepositories();
+const props = Astro.props;
+
+const id = `${props.organizationOrUser}/${props.repo}`;
+const repo = repos[id]!;
+---
+
+
+
+ {repo.description}
+
+
diff --git a/src/components/github_card/github-card.module.css b/src/components/github_card/github-card.module.css
new file mode 100644
index 0000000..b7264f1
--- /dev/null
+++ b/src/components/github_card/github-card.module.css
@@ -0,0 +1,145 @@
+.ghCard {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ background-color: var(--vgv-card-bg);
+ padding: 12px 18px;
+ border-radius: 8px;
+ color: var(--vgv-card-fg);
+
+ transition: all 0.08s ease;
+ filter: var(--vgv-card-shadow);
+}
+
+.ghCard:hover,
+.ghCard:visited,
+.ghCard:link,
+.ghCard:active {
+ text-decoration: none !important;
+ color: var(--vgv-card-fg);
+}
+
+.ghCard:hover {
+ filter: var(--vgv-card-shadow-hover);
+ background-color: var(--vgv-card-bg-hover);
+}
+
+.ghCard:hover .headerTitle {
+ text-decoration: underline;
+}
+
+.header {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: flex-end;
+}
+
+.ghLogo {
+ align-self: flex-start;
+ margin-top: 4px;
+ margin-right: 8px;
+}
+
+.headerTitle {
+ display: flex;
+ align-self: flex-start;
+ flex-direction: column;
+ justify-content: space-between;
+ /* min-width: 0px; */
+ flex-grow: 1;
+ margin-top: 0px !important;
+}
+
+.headerTitle h1 {
+ font-weight: 700;
+ font-size: 1.25rem;
+ margin: 0px !important;
+}
+
+.headerTitle h2 {
+ font-weight: 400;
+ font-size: 1rem;
+ margin: 0px !important;
+}
+
+.headerLogo {
+ flex-basis: 2.2rem;
+ /* min-width: 60px; */
+ max-width: 60px;
+ flex-grow: 1;
+ align-self: stretch;
+}
+
+.description {
+ opacity: 0.7;
+ margin-top: 8px;
+ flex-grow: 1;
+}
+
+.description:hover {
+ text-decoration: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ border-bottom: none !important;
+}
+
+.footer {
+ display: flex;
+ flex-direction: row;
+ flex-grow: 0;
+ justify-content: flex-start;
+ align-items: center;
+ margin-top: 16px;
+ padding: 0px 0px;
+}
+
+.footerItem {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+ align-items: flex-start;
+ align-self: end;
+ margin-right: 20px;
+}
+
+.footerItemLanguages {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+ align-self: center;
+}
+
+.symbolAndLabel {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: baseline;
+ margin-left: 8px;
+ line-height: 1rem;
+ margin-top: 0px !important;
+ font-size: 0.85rem;
+}
+
+.symbolAndLabel .symbol {
+ width: 100%;
+ font-weight: 500;
+ margin-right: 4px;
+}
+
+.symbolAndLabel .label {
+ font-weight: 300;
+ margin-top: 4px;
+}
+
+.langColor {
+ width: 10px;
+ height: 10px;
+ margin-top: 3px;
+ margin-right: 0px;
+ background-color: currentcolor;
+ border-radius: 100%;
+ display: inline-block;
+}
diff --git a/src/components/vgv_footer/vgv-footer.astro b/src/components/vgv_footer/vgv-footer.astro
new file mode 100644
index 0000000..50afd56
--- /dev/null
+++ b/src/components/vgv_footer/vgv-footer.astro
@@ -0,0 +1,97 @@
+---
+import CallToAction from "@astrojs/starlight/components/CallToAction.astro";
+import { Image } from "astro:assets";
+import VGVWordmarkDark from "~/assets/logos/vgv_wordmark_dark.svg";
+import Pattern2 from "~/components/branding/pattern-2.astro";
+---
+
+
+
+
+
diff --git a/src/components/vgv_footer/vgv-two-column-content.astro b/src/components/vgv_footer/vgv-two-column-content.astro
new file mode 100644
index 0000000..f783c8e
--- /dev/null
+++ b/src/components/vgv_footer/vgv-two-column-content.astro
@@ -0,0 +1,102 @@
+---
+import Default from "@astrojs/starlight/components/TwoColumnContent.astro";
+import type { Props as PageFrameProps } from "@astrojs/starlight/props";
+import VGVFooter from "./vgv-footer.astro";
+
+interface Props extends PageFrameProps {}
+---
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
deleted file mode 100644
index feaf01a..0000000
--- a/src/content/docs/index.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Very Good Engineering
-description: Get started building your docs site with Starlight.
-template: splash
-hero:
- tagline: A comprehensive guide to building better software.
- image:
- dark: ../../assets/logos/unicorn_dark.png
- light: ../../assets/logos/unicorn_light.png
- actions:
- - text: Read the Best Practices
- link: /architecture
- icon: right-arrow
- variant: primary
- - text: Learn more about Very Good Ventures
- link: https://verygood.ventures
- icon: external
----
-
-import { Card, CardGrid } from "@astrojs/starlight/components";
-
-## Next steps
-
-
-
- Edit `src/content/docs/index.mdx` to see this page change.
-
-
- Add Markdown or MDX files to `src/content/docs` to create new pages.
-
-
- Edit your `sidebar` and other config in `astro.config.mjs`.
-
-
- Learn more about [Very Good Ventures](https://verygood.ventures/).
-
-
diff --git a/src/pages/index.astro b/src/pages/index.astro
new file mode 100644
index 0000000..3deaeae
--- /dev/null
+++ b/src/pages/index.astro
@@ -0,0 +1,60 @@
+---
+import { CardGrid } from "@astrojs/starlight/components";
+import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro";
+import GithubCard from "~/components/github_card/github-card.astro";
+---
+
+
+ What we're up to
+
+
+
+
+
+
+
diff --git a/src/assets/styles/tailwind.css b/src/styles/tailwind.css
similarity index 100%
rename from src/assets/styles/tailwind.css
rename to src/styles/tailwind.css
diff --git a/src/styles/theme.css b/src/styles/theme.css
new file mode 100644
index 0000000..d0b3d67
--- /dev/null
+++ b/src/styles/theme.css
@@ -0,0 +1,31 @@
+/* See https://starlight.astro.build/guides/css-and-tailwind/#theming */
+
+/* Dark mode colors. */
+:root {
+ --sl-color-accent-low: #152146;
+ --sl-color-accent: #3557e3;
+ --sl-color-accent-high: #b4c8f8;
+ --sl-color-white: #ffffff;
+ --sl-color-gray-1: #ebeef5;
+ --sl-color-gray-2: #bec2ca;
+ --sl-color-gray-3: #858b9b;
+ --sl-color-gray-4: #525867;
+ --sl-color-gray-5: #323846;
+ --sl-color-gray-6: #212633;
+ --sl-color-black: #16181e;
+}
+/* Light mode colors. */
+:root[data-theme="light"] {
+ --sl-color-accent-low: #c7d7fb;
+ --sl-color-accent: #365ae5;
+ --sl-color-accent-high: #1a2c68;
+ --sl-color-white: #16181e;
+ --sl-color-gray-1: #212633;
+ --sl-color-gray-2: #323846;
+ --sl-color-gray-3: #525867;
+ --sl-color-gray-4: #858b9b;
+ --sl-color-gray-5: #bec2ca;
+ --sl-color-gray-6: #ebeef5;
+ --sl-color-gray-7: #f5f6fa;
+ --sl-color-black: #ffffff;
+}
diff --git a/src/styles/vgv_brand.css b/src/styles/vgv_brand.css
new file mode 100644
index 0000000..f06675c
--- /dev/null
+++ b/src/styles/vgv_brand.css
@@ -0,0 +1,62 @@
+:root {
+ /* Brand Colors */
+ --vgv-navy: #020f30;
+
+ --vgv-grape-purple: #8152e8;
+ --vgv-deep-purple: #6420c6;
+
+ --vgv-code-green: #00ff00;
+ --vgv-code-green-20: #00e500;
+
+ --vgv-unicorn-pink: #ff4f9d;
+ --vgv-unicorn-pink-20: #ff1c81;
+
+ --vgv-peach: #ff8e66;
+
+ --vgv-orange: #fc5d42;
+
+ --vgv-syntax-yellow: #ffff33;
+
+ --vgv-gold: #dfc12a;
+
+ --vgv-aqua: #33ccff;
+ --vgv-shadow-aqua: #2aa3df;
+
+ --vgv-blue: #2a48de;
+ --vgv-blue-20: #cddafb;
+ --vgv-blue-30: #a1b5f3;
+ --vgv-blue-60: #6d92f5;
+ --vgv-blue-80: #2c64f1;
+ --vgv-blue-120: #002890;
+
+ --vgv-gray-10: #fafbff;
+ --vgv-gray-20: #f3f6ff;
+ --vgv-gray-30: #d2d5dd;
+ --vgv-gray-40: #838998;
+ --vgv-gray-50: #5a5f6e;
+ --vgv-gray-60: #4b4f5a;
+ --vgv-gray-70: #383c46;
+ --vgv-gray-80: #232938;
+}
+
+:root[data-theme="light"] {
+ --vgv-card-bg: var(--vgv-gray-20);
+ --vgv-card-bg-hover: var(--vgv-gray-10);
+ --vgv-card-fg: black;
+ --vgv-card-shadow: drop-shadow(0px 0px 8px var(--vgv-gray-30));
+ --vgv-card-shadow-hover: drop-shadow(0px 0px 16px var(--vgv-gray-30));
+
+ --vgv-footer-text: var(--vgv-gray-30);
+ --vgv-footer-bg: var(--vgv-navy);
+}
+
+:root[data-theme="dark"] {
+ --vgv-card-bg: var(--vgv-gray-80);
+ --vgv-card-bg-hover: var(--vgv-gray-70);
+ --vgv-card-fg: white;
+ --vgv-card-shadow: drop-shadow(0px 0px 8px var(--vgv-gray-80));
+ --vgv-card-shadow-hover: drop-shadow(0px 0px 16px var(--vgv-gray-60));
+
+ --vgv-footer-text: var(--vgv-gray-30);
+ --vgv-footer-bg: var(--vgv-gray-80);
+}
diff --git a/src/utils/github_languages.ts b/src/utils/github_languages.ts
new file mode 100644
index 0000000..3406019
--- /dev/null
+++ b/src/utils/github_languages.ts
@@ -0,0 +1,630 @@
+export type Languages = {
+ [key: string]: LanguageColor;
+};
+
+export type LanguageColor = {
+ color: string | null;
+ url: string;
+};
+
+/* Thanks to - https://github.com/ozh/github-colors */
+export const languageColors: Languages = {
+ "1CEnterprise": {
+ color: "#814CCC",
+ url: "https://github.com/trending?l=1C-Enterprise",
+ },
+ ABAP: { color: "#E8274B", url: "https://github.com/trending?l=ABAP" },
+ ActionScript: {
+ color: "#882B0F",
+ url: "https://github.com/trending?l=ActionScript",
+ },
+ Ada: { color: "#02f88c", url: "https://github.com/trending?l=Ada" },
+ Agda: { color: "#315665", url: "https://github.com/trending?l=Agda" },
+ AGSScript: {
+ color: "#B9D9FF",
+ url: "https://github.com/trending?l=AGS-Script",
+ },
+ Alloy: { color: "#64C800", url: "https://github.com/trending?l=Alloy" },
+ AlpineAbuild: {
+ color: null,
+ url: "https://github.com/trending?l=Alpine-Abuild",
+ },
+ AMPL: { color: "#E6EFBB", url: "https://github.com/trending?l=AMPL" },
+ ANTLR: { color: "#9DC3FF", url: "https://github.com/trending?l=ANTLR" },
+ Apex: { color: null, url: "https://github.com/trending?l=Apex" },
+ APIBlueprint: {
+ color: "#2ACCA8",
+ url: "https://github.com/trending?l=API-Blueprint",
+ },
+ APL: { color: "#5A8164", url: "https://github.com/trending?l=APL" },
+ ApolloGuidanceComputer: {
+ color: null,
+ url: "https://github.com/trending?l=Apollo-Guidance-Computer",
+ },
+ AppleScript: {
+ color: "#101F1F",
+ url: "https://github.com/trending?l=AppleScript",
+ },
+ Arc: { color: "#aa2afe", url: "https://github.com/trending?l=Arc" },
+ Arduino: { color: "#bd79d1", url: "https://github.com/trending?l=Arduino" },
+ ASP: { color: "#6a40fd", url: "https://github.com/trending?l=ASP" },
+ AspectJ: { color: "#a957b0", url: "https://github.com/trending?l=AspectJ" },
+ Assembly: {
+ color: "#6E4C13",
+ url: "https://github.com/trending?l=Assembly",
+ },
+ ATS: { color: "#1ac620", url: "https://github.com/trending?l=ATS" },
+ Augeas: { color: null, url: "https://github.com/trending?l=Augeas" },
+ AutoHotkey: {
+ color: "#6594b9",
+ url: "https://github.com/trending?l=AutoHotkey",
+ },
+ AutoIt: { color: "#1C3552", url: "https://github.com/trending?l=AutoIt" },
+ Awk: { color: null, url: "https://github.com/trending?l=Awk" },
+ Ballerina: {
+ color: "#FF5000",
+ url: "https://github.com/trending?l=Ballerina",
+ },
+ Batchfile: {
+ color: "#C1F12E",
+ url: "https://github.com/trending?l=Batchfile",
+ },
+ Befunge: { color: null, url: "https://github.com/trending?l=Befunge" },
+ Bison: { color: null, url: "https://github.com/trending?l=Bison" },
+ BitBake: { color: null, url: "https://github.com/trending?l=BitBake" },
+ BlitzBasic: {
+ color: null,
+ url: "https://github.com/trending?l=BlitzBasic",
+ },
+ BlitzMax: {
+ color: "#cd6400",
+ url: "https://github.com/trending?l=BlitzMax",
+ },
+ Bluespec: { color: null, url: "https://github.com/trending?l=Bluespec" },
+ Boo: { color: "#d4bec1", url: "https://github.com/trending?l=Boo" },
+ Brightscript: {
+ color: null,
+ url: "https://github.com/trending?l=Brightscript",
+ },
+ Bro: { color: null, url: "https://github.com/trending?l=Bro" },
+ C: { color: "#555555", url: "https://github.com/trending?l=C" },
+ "C#": { color: "#178600", url: "https://github.com/trending?l=Csharp" },
+ "C++": { color: "#f34b7d", url: "https://github.com/trending?l=C++" },
+ C2hsHaskell: {
+ color: null,
+ url: "https://github.com/trending?l=C2hs-Haskell",
+ },
+ "Cap'nProto": {
+ color: null,
+ url: "https://github.com/trending?l=Cap'n-Proto",
+ },
+ CartoCSS: { color: null, url: "https://github.com/trending?l=CartoCSS" },
+ Ceylon: { color: "#dfa535", url: "https://github.com/trending?l=Ceylon" },
+ Chapel: { color: "#8dc63f", url: "https://github.com/trending?l=Chapel" },
+ Charity: { color: null, url: "https://github.com/trending?l=Charity" },
+ ChucK: { color: null, url: "https://github.com/trending?l=ChucK" },
+ Cirru: { color: "#ccccff", url: "https://github.com/trending?l=Cirru" },
+ Clarion: { color: "#db901e", url: "https://github.com/trending?l=Clarion" },
+ Clean: { color: "#3F85AF", url: "https://github.com/trending?l=Clean" },
+ Click: { color: "#E4E6F3", url: "https://github.com/trending?l=Click" },
+ CLIPS: { color: null, url: "https://github.com/trending?l=CLIPS" },
+ Clojure: { color: "#db5855", url: "https://github.com/trending?l=Clojure" },
+ CMake: { color: null, url: "https://github.com/trending?l=CMake" },
+ COBOL: { color: null, url: "https://github.com/trending?l=COBOL" },
+ CoffeeScript: {
+ color: "#244776",
+ url: "https://github.com/trending?l=CoffeeScript",
+ },
+ ColdFusion: {
+ color: "#ed2cd6",
+ url: "https://github.com/trending?l=ColdFusion",
+ },
+ ColdFusionCFC: {
+ color: null,
+ url: "https://github.com/trending?l=ColdFusion-CFC",
+ },
+ CommonLisp: {
+ color: "#3fb68b",
+ url: "https://github.com/trending?l=Common-Lisp",
+ },
+ ComponentPascal: {
+ color: "#B0CE4E",
+ url: "https://github.com/trending?l=Component-Pascal",
+ },
+ Cool: { color: null, url: "https://github.com/trending?l=Cool" },
+ Coq: { color: null, url: "https://github.com/trending?l=Coq" },
+ Crystal: { color: "#776791", url: "https://github.com/trending?l=Crystal" },
+ Csound: { color: null, url: "https://github.com/trending?l=Csound" },
+ CsoundDocument: {
+ color: null,
+ url: "https://github.com/trending?l=Csound-Document",
+ },
+ CsoundScore: {
+ color: null,
+ url: "https://github.com/trending?l=Csound-Score",
+ },
+ CSS: { color: "#563d7c", url: "https://github.com/trending?l=CSS" },
+ Cuda: { color: "#3A4E3A", url: "https://github.com/trending?l=Cuda" },
+ CWeb: { color: null, url: "https://github.com/trending?l=CWeb" },
+ Cycript: { color: null, url: "https://github.com/trending?l=Cycript" },
+ Cython: { color: null, url: "https://github.com/trending?l=Cython" },
+ D: { color: "#ba595e", url: "https://github.com/trending?l=D" },
+ Dart: { color: "#00B4AB", url: "https://github.com/trending?l=Dart" },
+ DataWeave: {
+ color: "#003a52",
+ url: "https://github.com/trending?l=DataWeave",
+ },
+ DIGITALCommandLanguage: {
+ color: null,
+ url: "https://github.com/trending?l=DIGITAL-Command-Language",
+ },
+ DM: { color: "#447265", url: "https://github.com/trending?l=DM" },
+ Dogescript: {
+ color: "#cca760",
+ url: "https://github.com/trending?l=Dogescript",
+ },
+ DTrace: { color: null, url: "https://github.com/trending?l=DTrace" },
+ Dylan: { color: "#6c616e", url: "https://github.com/trending?l=Dylan" },
+ E: { color: "#ccce35", url: "https://github.com/trending?l=E" },
+ eC: { color: "#913960", url: "https://github.com/trending?l=eC" },
+ ECL: { color: "#8a1267", url: "https://github.com/trending?l=ECL" },
+ ECLiPSe: { color: null, url: "https://github.com/trending?l=ECLiPSe" },
+ Eiffel: { color: "#946d57", url: "https://github.com/trending?l=Eiffel" },
+ Elixir: { color: "#6e4a7e", url: "https://github.com/trending?l=Elixir" },
+ Elm: { color: "#60B5CC", url: "https://github.com/trending?l=Elm" },
+ EmacsLisp: {
+ color: "#c065db",
+ url: "https://github.com/trending?l=Emacs-Lisp",
+ },
+ EmberScript: {
+ color: "#FFF4F3",
+ url: "https://github.com/trending?l=EmberScript",
+ },
+ EQ: { color: "#a78649", url: "https://github.com/trending?l=EQ" },
+ Erlang: { color: "#B83998", url: "https://github.com/trending?l=Erlang" },
+ "F#": { color: "#b845fc", url: "https://github.com/trending?l=Fsharp" },
+ Factor: { color: "#636746", url: "https://github.com/trending?l=Factor" },
+ Fancy: { color: "#7b9db4", url: "https://github.com/trending?l=Fancy" },
+ Fantom: { color: "#14253c", url: "https://github.com/trending?l=Fantom" },
+ FilebenchWML: {
+ color: null,
+ url: "https://github.com/trending?l=Filebench-WML",
+ },
+ Filterscript: {
+ color: null,
+ url: "https://github.com/trending?l=Filterscript",
+ },
+ fish: { color: null, url: "https://github.com/trending?l=fish" },
+ FLUX: { color: "#88ccff", url: "https://github.com/trending?l=FLUX" },
+ Forth: { color: "#341708", url: "https://github.com/trending?l=Forth" },
+ Fortran: { color: "#4d41b1", url: "https://github.com/trending?l=Fortran" },
+ FreeMarker: {
+ color: "#0050b2",
+ url: "https://github.com/trending?l=FreeMarker",
+ },
+ Frege: { color: "#00cafe", url: "https://github.com/trending?l=Frege" },
+ GameMakerLanguage: {
+ color: "#8fb200",
+ url: "https://github.com/trending?l=Game-Maker-Language",
+ },
+ GAMS: { color: null, url: "https://github.com/trending?l=GAMS" },
+ GAP: { color: null, url: "https://github.com/trending?l=GAP" },
+ GCCMachineDescription: {
+ color: null,
+ url: "https://github.com/trending?l=GCC-Machine-Description",
+ },
+ GDB: { color: null, url: "https://github.com/trending?l=GDB" },
+ GDScript: { color: null, url: "https://github.com/trending?l=GDScript" },
+ Genie: { color: "#fb855d", url: "https://github.com/trending?l=Genie" },
+ Genshi: { color: null, url: "https://github.com/trending?l=Genshi" },
+ GentooEbuild: {
+ color: null,
+ url: "https://github.com/trending?l=Gentoo-Ebuild",
+ },
+ GentooEclass: {
+ color: null,
+ url: "https://github.com/trending?l=Gentoo-Eclass",
+ },
+ Gherkin: { color: "#5B2063", url: "https://github.com/trending?l=Gherkin" },
+ GLSL: { color: null, url: "https://github.com/trending?l=GLSL" },
+ Glyph: { color: "#e4cc98", url: "https://github.com/trending?l=Glyph" },
+ Gnuplot: { color: "#f0a9f0", url: "https://github.com/trending?l=Gnuplot" },
+ Go: { color: "#375eab", url: "https://github.com/trending?l=Go" },
+ Golo: { color: "#88562A", url: "https://github.com/trending?l=Golo" },
+ Gosu: { color: "#82937f", url: "https://github.com/trending?l=Gosu" },
+ Grace: { color: null, url: "https://github.com/trending?l=Grace" },
+ GrammaticalFramework: {
+ color: "#79aa7a",
+ url: "https://github.com/trending?l=Grammatical-Framework",
+ },
+ Groovy: { color: "#e69f56", url: "https://github.com/trending?l=Groovy" },
+ GroovyServerPages: {
+ color: null,
+ url: "https://github.com/trending?l=Groovy-Server-Pages",
+ },
+ Hack: { color: "#878787", url: "https://github.com/trending?l=Hack" },
+ Harbour: { color: "#0e60e3", url: "https://github.com/trending?l=Harbour" },
+ Haskell: { color: "#5e5086", url: "https://github.com/trending?l=Haskell" },
+ Haxe: { color: "#df7900", url: "https://github.com/trending?l=Haxe" },
+ HCL: { color: null, url: "https://github.com/trending?l=HCL" },
+ HLSL: { color: null, url: "https://github.com/trending?l=HLSL" },
+ HTML: { color: "#e34c26", url: "https://github.com/trending?l=HTML" },
+ Hy: { color: "#7790B2", url: "https://github.com/trending?l=Hy" },
+ HyPhy: { color: null, url: "https://github.com/trending?l=HyPhy" },
+ IDL: { color: "#a3522f", url: "https://github.com/trending?l=IDL" },
+ Idris: { color: null, url: "https://github.com/trending?l=Idris" },
+ IGORPro: { color: null, url: "https://github.com/trending?l=IGOR-Pro" },
+ Inform7: { color: null, url: "https://github.com/trending?l=Inform-7" },
+ InnoSetup: { color: null, url: "https://github.com/trending?l=Inno-Setup" },
+ Io: { color: "#a9188d", url: "https://github.com/trending?l=Io" },
+ Ioke: { color: "#078193", url: "https://github.com/trending?l=Ioke" },
+ Isabelle: {
+ color: "#FEFE00",
+ url: "https://github.com/trending?l=Isabelle",
+ },
+ IsabelleROOT: {
+ color: null,
+ url: "https://github.com/trending?l=Isabelle-ROOT",
+ },
+ J: { color: "#9EEDFF", url: "https://github.com/trending?l=J" },
+ Jasmin: { color: null, url: "https://github.com/trending?l=Jasmin" },
+ Java: { color: "#b07219", url: "https://github.com/trending?l=Java" },
+ JavaServerPages: {
+ color: null,
+ url: "https://github.com/trending?l=Java-Server-Pages",
+ },
+ JavaScript: {
+ color: "#f1e05a",
+ url: "https://github.com/trending?l=JavaScript",
+ },
+ JFlex: { color: null, url: "https://github.com/trending?l=JFlex" },
+ Jison: { color: null, url: "https://github.com/trending?l=Jison" },
+ JisonLex: { color: null, url: "https://github.com/trending?l=Jison-Lex" },
+ Jolie: { color: "#843179", url: "https://github.com/trending?l=Jolie" },
+ JSONiq: { color: "#40d47e", url: "https://github.com/trending?l=JSONiq" },
+ JSX: { color: null, url: "https://github.com/trending?l=JSX" },
+ Julia: { color: "#a270ba", url: "https://github.com/trending?l=Julia" },
+ "Jupyter Notebook": {
+ color: "#DA5B0B",
+ url: "https://github.com/trending?l=Jupyter-Notebook",
+ },
+ Kotlin: { color: "#F18E33", url: "https://github.com/trending?l=Kotlin" },
+ KRL: { color: "#28431f", url: "https://github.com/trending?l=KRL" },
+ LabVIEW: { color: null, url: "https://github.com/trending?l=LabVIEW" },
+ Lasso: { color: "#999999", url: "https://github.com/trending?l=Lasso" },
+ Lean: { color: null, url: "https://github.com/trending?l=Lean" },
+ Lex: { color: "#DBCA00", url: "https://github.com/trending?l=Lex" },
+ LFE: { color: null, url: "https://github.com/trending?l=LFE" },
+ LilyPond: { color: null, url: "https://github.com/trending?l=LilyPond" },
+ Limbo: { color: null, url: "https://github.com/trending?l=Limbo" },
+ LiterateAgda: {
+ color: null,
+ url: "https://github.com/trending?l=Literate-Agda",
+ },
+ LiterateCoffeeScript: {
+ color: null,
+ url: "https://github.com/trending?l=Literate-CoffeeScript",
+ },
+ LiterateHaskell: {
+ color: null,
+ url: "https://github.com/trending?l=Literate-Haskell",
+ },
+ LiveScript: {
+ color: "#499886",
+ url: "https://github.com/trending?l=LiveScript",
+ },
+ LLVM: { color: "#185619", url: "https://github.com/trending?l=LLVM" },
+ Logos: { color: null, url: "https://github.com/trending?l=Logos" },
+ Logtalk: { color: null, url: "https://github.com/trending?l=Logtalk" },
+ LOLCODE: { color: "#cc9900", url: "https://github.com/trending?l=LOLCODE" },
+ LookML: { color: "#652B81", url: "https://github.com/trending?l=LookML" },
+ LoomScript: {
+ color: null,
+ url: "https://github.com/trending?l=LoomScript",
+ },
+ LSL: { color: "#3d9970", url: "https://github.com/trending?l=LSL" },
+ Lua: { color: "#000080", url: "https://github.com/trending?l=Lua" },
+ M: { color: null, url: "https://github.com/trending?l=M" },
+ M4: { color: null, url: "https://github.com/trending?l=M4" },
+ M4Sugar: { color: null, url: "https://github.com/trending?l=M4Sugar" },
+ Makefile: {
+ color: "#427819",
+ url: "https://github.com/trending?l=Makefile",
+ },
+ Mako: { color: null, url: "https://github.com/trending?l=Mako" },
+ Mask: { color: "#f97732", url: "https://github.com/trending?l=Mask" },
+ Mathematica: {
+ color: null,
+ url: "https://github.com/trending?l=Mathematica",
+ },
+ Matlab: { color: "#e16737", url: "https://github.com/trending?l=Matlab" },
+ Max: { color: "#c4a79c", url: "https://github.com/trending?l=Max" },
+ MAXScript: {
+ color: "#00a6a6",
+ url: "https://github.com/trending?l=MAXScript",
+ },
+ Mercury: { color: "#ff2b2b", url: "https://github.com/trending?l=Mercury" },
+ Meson: { color: "#007800", url: "https://github.com/trending?l=Meson" },
+ Metal: { color: "#8f14e9", url: "https://github.com/trending?l=Metal" },
+ MiniD: { color: null, url: "https://github.com/trending?l=MiniD" },
+ Mirah: { color: "#c7a938", url: "https://github.com/trending?l=Mirah" },
+ Modelica: { color: null, url: "https://github.com/trending?l=Modelica" },
+ "Modula-2": { color: null, url: "https://github.com/trending?l=Modula-2" },
+ ModuleManagementSystem: {
+ color: null,
+ url: "https://github.com/trending?l=Module-Management-System",
+ },
+ Monkey: { color: null, url: "https://github.com/trending?l=Monkey" },
+ Moocode: { color: null, url: "https://github.com/trending?l=Moocode" },
+ MoonScript: {
+ color: null,
+ url: "https://github.com/trending?l=MoonScript",
+ },
+ MQL4: { color: "#62A8D6", url: "https://github.com/trending?l=MQL4" },
+ MQL5: { color: "#4A76B8", url: "https://github.com/trending?l=MQL5" },
+ MTML: { color: "#b7e1f4", url: "https://github.com/trending?l=MTML" },
+ MUF: { color: null, url: "https://github.com/trending?l=MUF" },
+ mupad: { color: null, url: "https://github.com/trending?l=mupad" },
+ Myghty: { color: null, url: "https://github.com/trending?l=Myghty" },
+ NCL: { color: "#28431f", url: "https://github.com/trending?l=NCL" },
+ Nearley: { color: "#990000", url: "https://github.com/trending?l=Nearley" },
+ Nemerle: { color: "#3d3c6e", url: "https://github.com/trending?l=Nemerle" },
+ nesC: { color: "#94B0C7", url: "https://github.com/trending?l=nesC" },
+ NetLinx: { color: "#0aa0ff", url: "https://github.com/trending?l=NetLinx" },
+ "NetLinx+ERB": {
+ color: "#747faa",
+ url: "https://github.com/trending?l=NetLinx+ERB",
+ },
+ NetLogo: { color: "#ff6375", url: "https://github.com/trending?l=NetLogo" },
+ NewLisp: { color: "#87AED7", url: "https://github.com/trending?l=NewLisp" },
+ Nim: { color: "#37775b", url: "https://github.com/trending?l=Nim" },
+ Nit: { color: "#009917", url: "https://github.com/trending?l=Nit" },
+ Nix: { color: "#7e7eff", url: "https://github.com/trending?l=Nix" },
+ NSIS: { color: null, url: "https://github.com/trending?l=NSIS" },
+ Nu: { color: "#c9df40", url: "https://github.com/trending?l=Nu" },
+ NumPy: { color: null, url: "https://github.com/trending?l=NumPy" },
+ "Objective-C": {
+ color: "#438eff",
+ url: "https://github.com/trending?l=Objective-C",
+ },
+ "Objective-C++": {
+ color: "#6866fb",
+ url: "https://github.com/trending?l=Objective-C++",
+ },
+ "Objective-J": {
+ color: "#ff0c5a",
+ url: "https://github.com/trending?l=Objective-J",
+ },
+ OCaml: { color: "#3be133", url: "https://github.com/trending?l=OCaml" },
+ Omgrofl: { color: "#cabbff", url: "https://github.com/trending?l=Omgrofl" },
+ ooc: { color: "#b0b77e", url: "https://github.com/trending?l=ooc" },
+ Opa: { color: null, url: "https://github.com/trending?l=Opa" },
+ Opal: { color: "#f7ede0", url: "https://github.com/trending?l=Opal" },
+ OpenCL: { color: null, url: "https://github.com/trending?l=OpenCL" },
+ OpenEdgeABL: {
+ color: null,
+ url: "https://github.com/trending?l=OpenEdge-ABL",
+ },
+ OpenRCrunscript: {
+ color: null,
+ url: "https://github.com/trending?l=OpenRC-runscript",
+ },
+ OpenSCAD: { color: null, url: "https://github.com/trending?l=OpenSCAD" },
+ Ox: { color: null, url: "https://github.com/trending?l=Ox" },
+ Oxygene: { color: "#cdd0e3", url: "https://github.com/trending?l=Oxygene" },
+ Oz: { color: "#fab738", url: "https://github.com/trending?l=Oz" },
+ P4: { color: "#7055b5", url: "https://github.com/trending?l=P4" },
+ Pan: { color: "#cc0000", url: "https://github.com/trending?l=Pan" },
+ Papyrus: { color: "#6600cc", url: "https://github.com/trending?l=Papyrus" },
+ Parrot: { color: "#f3ca0a", url: "https://github.com/trending?l=Parrot" },
+ ParrotAssembly: {
+ color: null,
+ url: "https://github.com/trending?l=Parrot-Assembly",
+ },
+ ParrotInternalRepresentation: {
+ color: null,
+ url: "https://github.com/trending?l=Parrot-Internal-Representation",
+ },
+ Pascal: { color: "#E3F171", url: "https://github.com/trending?l=Pascal" },
+ PAWN: { color: "#dbb284", url: "https://github.com/trending?l=PAWN" },
+ Pep8: { color: "#C76F5B", url: "https://github.com/trending?l=Pep8" },
+ Perl: { color: "#0298c3", url: "https://github.com/trending?l=Perl" },
+ Perl6: { color: "#0000fb", url: "https://github.com/trending?l=Perl-6" },
+ PHP: { color: "#4F5D95", url: "https://github.com/trending?l=PHP" },
+ PicoLisp: { color: null, url: "https://github.com/trending?l=PicoLisp" },
+ PigLatin: {
+ color: "#fcd7de",
+ url: "https://github.com/trending?l=PigLatin",
+ },
+ Pike: { color: "#005390", url: "https://github.com/trending?l=Pike" },
+ PLpgSQL: { color: null, url: "https://github.com/trending?l=PLpgSQL" },
+ PLSQL: { color: "#dad8d8", url: "https://github.com/trending?l=PLSQL" },
+ PogoScript: {
+ color: "#d80074",
+ url: "https://github.com/trending?l=PogoScript",
+ },
+ Pony: { color: null, url: "https://github.com/trending?l=Pony" },
+ PostScript: {
+ color: "#da291c",
+ url: "https://github.com/trending?l=PostScript",
+ },
+ "POV-RaySDL": {
+ color: null,
+ url: "https://github.com/trending?l=POV-Ray-SDL",
+ },
+ PowerBuilder: {
+ color: "#8f0f8d",
+ url: "https://github.com/trending?l=PowerBuilder",
+ },
+ PowerShell: {
+ color: "#012456",
+ url: "https://github.com/trending?l=PowerShell",
+ },
+ Processing: {
+ color: "#0096D8",
+ url: "https://github.com/trending?l=Processing",
+ },
+ Prolog: { color: "#74283c", url: "https://github.com/trending?l=Prolog" },
+ PropellerSpin: {
+ color: "#7fa2a7",
+ url: "https://github.com/trending?l=Propeller-Spin",
+ },
+ Puppet: { color: "#302B6D", url: "https://github.com/trending?l=Puppet" },
+ PureBasic: {
+ color: "#5a6986",
+ url: "https://github.com/trending?l=PureBasic",
+ },
+ PureScript: {
+ color: "#1D222D",
+ url: "https://github.com/trending?l=PureScript",
+ },
+ Python: { color: "#3572A5", url: "https://github.com/trending?l=Python" },
+ Pythonconsole: {
+ color: null,
+ url: "https://github.com/trending?l=Python-console",
+ },
+ QMake: { color: null, url: "https://github.com/trending?l=QMake" },
+ QML: { color: "#44a51c", url: "https://github.com/trending?l=QML" },
+ R: { color: "#198CE7", url: "https://github.com/trending?l=R" },
+ Racket: { color: "#22228f", url: "https://github.com/trending?l=Racket" },
+ Ragel: { color: "#9d5200", url: "https://github.com/trending?l=Ragel" },
+ RAML: { color: "#77d9fb", url: "https://github.com/trending?l=RAML" },
+ Rascal: { color: "#fffaa0", url: "https://github.com/trending?l=Rascal" },
+ REALbasic: { color: null, url: "https://github.com/trending?l=REALbasic" },
+ Reason: { color: null, url: "https://github.com/trending?l=Reason" },
+ Rebol: { color: "#358a5b", url: "https://github.com/trending?l=Rebol" },
+ Red: { color: "#f50000", url: "https://github.com/trending?l=Red" },
+ Redcode: { color: null, url: "https://github.com/trending?l=Redcode" },
+ "Ren'Py": { color: "#ff7f7f", url: "https://github.com/trending?l=Ren'Py" },
+ RenderScript: {
+ color: null,
+ url: "https://github.com/trending?l=RenderScript",
+ },
+ REXX: { color: null, url: "https://github.com/trending?l=REXX" },
+ Ring: { color: "#0e60e3", url: "https://github.com/trending?l=Ring" },
+ RobotFramework: {
+ color: null,
+ url: "https://github.com/trending?l=RobotFramework",
+ },
+ Roff: { color: "#ecdebe", url: "https://github.com/trending?l=Roff" },
+ Rouge: { color: "#cc0088", url: "https://github.com/trending?l=Rouge" },
+ Ruby: { color: "#701516", url: "https://github.com/trending?l=Ruby" },
+ RUNOFF: { color: "#665a4e", url: "https://github.com/trending?l=RUNOFF" },
+ Rust: { color: "#dea584", url: "https://github.com/trending?l=Rust" },
+ Sage: { color: null, url: "https://github.com/trending?l=Sage" },
+ SaltStack: {
+ color: "#646464",
+ url: "https://github.com/trending?l=SaltStack",
+ },
+ SAS: { color: "#B34936", url: "https://github.com/trending?l=SAS" },
+ Scala: { color: "#c22d40", url: "https://github.com/trending?l=Scala" },
+ Scheme: { color: "#1e4aec", url: "https://github.com/trending?l=Scheme" },
+ Scilab: { color: null, url: "https://github.com/trending?l=Scilab" },
+ Self: { color: "#0579aa", url: "https://github.com/trending?l=Self" },
+ ShaderLab: { color: null, url: "https://github.com/trending?l=ShaderLab" },
+ Shell: { color: "#89e051", url: "https://github.com/trending?l=Shell" },
+ ShellSession: {
+ color: null,
+ url: "https://github.com/trending?l=ShellSession",
+ },
+ Shen: { color: "#120F14", url: "https://github.com/trending?l=Shen" },
+ Slash: { color: "#007eff", url: "https://github.com/trending?l=Slash" },
+ Smali: { color: null, url: "https://github.com/trending?l=Smali" },
+ Smalltalk: {
+ color: "#596706",
+ url: "https://github.com/trending?l=Smalltalk",
+ },
+ Smarty: { color: null, url: "https://github.com/trending?l=Smarty" },
+ SMT: { color: null, url: "https://github.com/trending?l=SMT" },
+ SourcePawn: {
+ color: "#5c7611",
+ url: "https://github.com/trending?l=SourcePawn",
+ },
+ SQF: { color: "#3F3F3F", url: "https://github.com/trending?l=SQF" },
+ SQLPL: { color: null, url: "https://github.com/trending?l=SQLPL" },
+ Squirrel: {
+ color: "#800000",
+ url: "https://github.com/trending?l=Squirrel",
+ },
+ SRecodeTemplate: {
+ color: "#348a34",
+ url: "https://github.com/trending?l=SRecode-Template",
+ },
+ Stan: { color: "#b2011d", url: "https://github.com/trending?l=Stan" },
+ StandardML: {
+ color: "#dc566d",
+ url: "https://github.com/trending?l=Standard-ML",
+ },
+ Stata: { color: null, url: "https://github.com/trending?l=Stata" },
+ SuperCollider: {
+ color: "#46390b",
+ url: "https://github.com/trending?l=SuperCollider",
+ },
+ Swift: { color: "#ffac45", url: "https://github.com/trending?l=Swift" },
+ SystemVerilog: {
+ color: "#DAE1C2",
+ url: "https://github.com/trending?l=SystemVerilog",
+ },
+ Tcl: { color: "#e4cc98", url: "https://github.com/trending?l=Tcl" },
+ Tcsh: { color: null, url: "https://github.com/trending?l=Tcsh" },
+ Terra: { color: "#00004c", url: "https://github.com/trending?l=Terra" },
+ TeX: { color: "#3D6117", url: "https://github.com/trending?l=TeX" },
+ Thrift: { color: null, url: "https://github.com/trending?l=Thrift" },
+ TIProgram: {
+ color: "#A0AA87",
+ url: "https://github.com/trending?l=TI-Program",
+ },
+ TLA: { color: null, url: "https://github.com/trending?l=TLA" },
+ Turing: { color: "#cf142b", url: "https://github.com/trending?l=Turing" },
+ TXL: { color: null, url: "https://github.com/trending?l=TXL" },
+ TypeScript: {
+ color: "#2b7489",
+ url: "https://github.com/trending?l=TypeScript",
+ },
+ UnifiedParallelC: {
+ color: null,
+ url: "https://github.com/trending?l=Unified-Parallel-C",
+ },
+ UnixAssembly: {
+ color: null,
+ url: "https://github.com/trending?l=Unix-Assembly",
+ },
+ Uno: { color: null, url: "https://github.com/trending?l=Uno" },
+ UnrealScript: {
+ color: "#a54c4d",
+ url: "https://github.com/trending?l=UnrealScript",
+ },
+ UrWeb: { color: null, url: "https://github.com/trending?l=UrWeb" },
+ Vala: { color: "#fbe5cd", url: "https://github.com/trending?l=Vala" },
+ VCL: { color: null, url: "https://github.com/trending?l=VCL" },
+ Verilog: { color: "#b2b7f8", url: "https://github.com/trending?l=Verilog" },
+ VHDL: { color: "#adb2cb", url: "https://github.com/trending?l=VHDL" },
+ Vimscript: {
+ color: "#199f4b",
+ url: "https://github.com/trending?l=Vim-script",
+ },
+ VisualBasic: {
+ color: "#945db7",
+ url: "https://github.com/trending?l=Visual-Basic",
+ },
+ Volt: { color: "#1F1F1F", url: "https://github.com/trending?l=Volt" },
+ Vue: { color: "#2c3e50", url: "https://github.com/trending?l=Vue" },
+ WebAssembly: {
+ color: "#04133b",
+ url: "https://github.com/trending?l=WebAssembly",
+ },
+ WebIDL: { color: null, url: "https://github.com/trending?l=WebIDL" },
+ wisp: { color: "#7582D1", url: "https://github.com/trending?l=wisp" },
+ X10: { color: "#4B6BEF", url: "https://github.com/trending?l=X10" },
+ xBase: { color: "#403a40", url: "https://github.com/trending?l=xBase" },
+ XC: { color: "#99DA07", url: "https://github.com/trending?l=XC" },
+ Xojo: { color: null, url: "https://github.com/trending?l=Xojo" },
+ XProc: { color: null, url: "https://github.com/trending?l=XProc" },
+ XQuery: { color: "#5232e7", url: "https://github.com/trending?l=XQuery" },
+ XS: { color: null, url: "https://github.com/trending?l=XS" },
+ XSLT: { color: "#EB8CEB", url: "https://github.com/trending?l=XSLT" },
+ Xtend: { color: null, url: "https://github.com/trending?l=Xtend" },
+ Yacc: { color: "#4B6C4B", url: "https://github.com/trending?l=Yacc" },
+ Zephir: { color: "#118f9e", url: "https://github.com/trending?l=Zephir" },
+ Zimpl: { color: null, url: "https://github.com/trending?l=Zimpl" },
+};
diff --git a/src/utils/github_repositories.ts b/src/utils/github_repositories.ts
new file mode 100644
index 0000000..8aa1faf
--- /dev/null
+++ b/src/utils/github_repositories.ts
@@ -0,0 +1,82 @@
+import { Octokit } from "@octokit/rest";
+import { languageColors, type LanguageColor } from "./github_languages";
+
+export type GithubRepository = {
+ name: string;
+ organization: string;
+ url: string;
+ fullName: string;
+ description: string;
+ stars: number;
+ forks: number;
+ language: string | null;
+ languageColor: LanguageColor | null;
+};
+
+export type GithubRepositories = { [key: string]: GithubRepository };
+
+export const organizationName = "VGVentures";
+
+// Personal access token environment variable name.
+// For locally building this project, make your own PAT and set it in your
+// environment under this name.
+//
+// This secret environment value is already provided for the repository so that
+// GitHub actions will run accordingly.
+export const VGVENTURES_GITHUB_PAT = "VGVENTURES_GITHUB_PAT";
+
+var repositoryCache: GithubRepositories | undefined;
+
+export async function getRepositories(): Promise {
+ if (repositoryCache === undefined) {
+ repositoryCache =
+ await fetchOrganizationPublicRepositories(organizationName);
+ }
+
+ return repositoryCache;
+}
+
+// Returns a map of repository full names to repository data.
+async function fetchOrganizationPublicRepositories(
+ organizationName: string,
+): Promise {
+ const octokit = new Octokit({ auth: process.env[VGVENTURES_GITHUB_PAT] });
+
+ // Get EVERY public repo in the organization.
+ const response = await octokit.repos.listForOrg({
+ type: "public",
+ org: organizationName,
+ });
+
+ if (typeof response !== "object" || !Array.isArray(response["data"])) {
+ throw new Error(
+ "Unexpected response from GitHub API: " +
+ JSON.stringify(response, null, 2),
+ );
+ }
+
+ const data = response["data"];
+
+ // Return a map of repository full names to repository data.
+ var repos: GithubRepositories = {};
+ for (const raw of data) {
+ const language = raw["language"];
+ const languageColor =
+ language != null ? languageColors[language] ?? null : null;
+ const repo: GithubRepository = {
+ name: raw["name"],
+ organization: organizationName,
+ url: raw["html_url"],
+ fullName: raw["full_name"],
+ description: raw["description"] ?? "",
+ stars: raw["stargazers_count"] ?? 0,
+ forks: raw["forks"] ?? 0,
+ language: raw["language"] ?? "",
+ languageColor: languageColor,
+ };
+ repos[repo.fullName] = repo;
+ console.log("GitHub Repository: " + JSON.stringify(repo, null, 2));
+ }
+
+ return repos;
+}