@grove-dev/astro 0.2.10 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -18
- package/dist/lib/display.d.ts +11 -17
- package/dist/lib/display.d.ts.map +1 -1
- package/dist/lib/display.js +43 -43
- package/dist/lib/display.js.map +1 -1
- package/dist/lib/format.d.ts +6 -7
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +11 -12
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/lenses.d.ts +35 -73
- package/dist/lib/lenses.d.ts.map +1 -1
- package/dist/lib/lenses.js +144 -126
- package/dist/lib/lenses.js.map +1 -1
- package/dist/lib/repo.d.ts +12 -22
- package/dist/lib/repo.d.ts.map +1 -1
- package/dist/lib/repo.js +13 -25
- package/dist/lib/repo.js.map +1 -1
- package/dist/lib/scores.d.ts +15 -16
- package/dist/lib/scores.d.ts.map +1 -1
- package/dist/lib/scores.js +4 -11
- package/dist/lib/scores.js.map +1 -1
- package/dist/lib/search.d.ts +44 -129
- package/dist/lib/search.d.ts.map +1 -1
- package/dist/lib/search.js +192 -180
- package/dist/lib/search.js.map +1 -1
- package/dist/lib/taxonomy-counts.d.ts +7 -21
- package/dist/lib/taxonomy-counts.d.ts.map +1 -1
- package/dist/lib/taxonomy-counts.js +12 -31
- package/dist/lib/taxonomy-counts.js.map +1 -1
- package/package.json +4 -4
- package/src/components/CategoryGrid.astro +43 -31
- package/src/components/ContributorsGrid.astro +3 -3
- package/src/components/CurationGrid.astro +41 -0
- package/src/components/ExploreByStack.astro +6 -0
- package/src/components/FilterGroupMenu.astro +49 -0
- package/src/components/FilterOptions.astro +44 -0
- package/src/components/Hero.astro +198 -147
- package/src/components/Icon.astro +10 -3
- package/src/components/IndexRow.astro +75 -0
- package/src/components/ItemCard.astro +266 -248
- package/src/components/Pagination.astro +63 -0
- package/src/components/RecordSection.astro +70 -34
- package/src/components/RefinePanel.astro +115 -141
- package/src/components/StackGrid.astro +32 -24
- package/src/components/WhyThisExists.astro +32 -32
- package/src/layouts/BaseLayout.astro +104 -49
- package/src/layouts/Container.astro +5 -44
- package/src/layouts/Footer.astro +31 -20
- package/src/layouts/Header.astro +40 -19
- package/src/layouts/SectionHeader.astro +27 -43
- package/src/layouts/Seo.astro +38 -56
- package/src/layouts/ThemeToggle.astro +35 -48
- package/src/lib/display.ts +46 -53
- package/src/lib/format.ts +11 -12
- package/src/lib/lenses.ts +151 -172
- package/src/lib/repo.ts +17 -28
- package/src/lib/scores.ts +15 -19
- package/src/lib/search.ts +218 -291
- package/src/lib/taxonomy-counts.ts +12 -46
- package/src/styles.css +209 -1
- package/templates/default/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- package/templates/default/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/templates/default/.github/ISSUE_TEMPLATE/record_submission.md +48 -0
- package/templates/default/.github/pull_request_template.md +27 -0
- package/templates/default/.github/workflows/build.yml +55 -0
- package/templates/default/.github/workflows/cleanup-stale-records.yml +48 -0
- package/templates/default/.github/workflows/daily-refresh.yml +53 -0
- package/templates/default/.github/workflows/sync-contributors.yml +53 -0
- package/templates/default/.github/workflows/sync-github-metadata.yml +58 -0
- package/templates/default/.github/workflows/validate-data.yml +35 -0
- package/templates/default/data/records/coolify.yml +46 -0
- package/templates/default/data/records/gitea.yml +46 -0
- package/templates/default/data/records/hoppscotch.yml +47 -0
- package/templates/default/data/records/inventree.yml +47 -0
- package/templates/default/data/records/label-studio.yml +46 -0
- package/templates/default/data/records/logseq.yml +48 -0
- package/templates/default/data/records/private-gpt.yml +47 -0
- package/templates/default/data/records/wakapi.yml +44 -0
- package/templates/default/data/taxonomy/categories.yml +47 -0
- package/templates/default/data/taxonomy/distribution-channels.yml +43 -0
- package/templates/default/data/taxonomy/platforms.yml +27 -0
- package/templates/default/data/taxonomy/stacks.yml +41 -0
- package/templates/default/grove.config.ts +1 -1
- package/templates/default/package.json +5 -4
- package/templates/default/public/icons/stacks/bun.svg +1 -0
- package/templates/default/public/icons/stacks/clojure.svg +1 -0
- package/templates/default/public/icons/stacks/clojurescript.svg +1 -0
- package/templates/default/public/icons/stacks/deno.svg +1 -0
- package/templates/default/public/icons/stacks/django.svg +1 -0
- package/templates/default/public/icons/stacks/docker.svg +1 -0
- package/templates/default/public/icons/stacks/go.svg +1 -0
- package/templates/default/public/icons/stacks/llm.svg +1 -0
- package/templates/default/public/icons/stacks/node.js.svg +1 -0
- package/templates/default/public/icons/stacks/sveltekit.svg +1 -0
- package/templates/default/public/icons/stacks/vue.svg +1 -0
- package/templates/default/public/llms-full.txt +197 -5
- package/templates/default/public/llms.txt +107 -6
- package/templates/default/public/sitemap.xml +63 -0
- package/templates/default/scripts/build-llms.mjs +123 -0
- package/templates/default/scripts/build-records-json.mjs +27 -0
- package/templates/default/scripts/build-sitemap.mjs +20 -0
- package/templates/default/scripts/cleanup-stale-records.mjs +20 -0
- package/templates/default/scripts/enrich-github-metadata.mjs +99 -0
- package/templates/default/scripts/fetch-icons.mjs +137 -0
- package/templates/default/scripts/migrate-legacy-to-schema-v1.mjs +86 -0
- package/templates/default/scripts/parse-legacy-readme.mjs +59 -0
- package/templates/default/scripts/refresh-records-activity.mjs +24 -0
- package/templates/default/scripts/repair-license-format.mjs +72 -0
- package/templates/default/scripts/report-cleanup-candidates.mjs +21 -0
- package/templates/default/scripts/seed-from-github.mjs +62 -0
- package/templates/default/scripts/sync-contributors.mjs +145 -0
- package/templates/default/scripts/sync-github-metadata.mjs +28 -0
- package/templates/default/scripts/validate-records.mjs +27 -0
- package/templates/default/src/data/records.ts +138 -51
- package/templates/default/src/pages/404.astro +64 -0
- package/templates/default/src/pages/{projects/[slug].astro → [slug]/[recordSlug].astro} +236 -66
- package/templates/default/src/pages/[slug]/index.astro +477 -0
- package/templates/default/src/pages/about.astro +165 -82
- package/templates/default/src/pages/apps/[recordSlug].astro +33 -0
- package/templates/default/src/pages/contributors.astro +184 -0
- package/templates/default/src/pages/index.astro +119 -162
- package/templates/default/src/pages/submit.astro +276 -114
- package/templates/default/wrangler.jsonc +28 -0
- package/LICENSE +0 -21
- package/src/components/AppsIndexRow.astro +0 -204
- package/src/components/AppsPagination.astro +0 -126
- package/templates/default/.astro/content.d.ts +0 -155
- package/templates/default/.astro/settings.json +0 -5
- package/templates/default/.astro/types.d.ts +0 -1
- package/templates/default/data/generated/apps.json +0 -1
- package/templates/default/data/generated/records.full.json +0 -8
- package/templates/default/data/generated/records.index.json +0 -7
- package/templates/default/data/generated/records.json +0 -8
- package/templates/default/data/generated/repo-stats.json +0 -1
- package/templates/default/data/generated/site-config.json +0 -31
- package/templates/default/dist/_astro/BaseLayout.Dz_HR-68.css +0 -1
- package/templates/default/dist/about/index.html +0 -165
- package/templates/default/dist/icons/platforms/android.svg +0 -1
- package/templates/default/dist/icons/platforms/apple-dark.svg +0 -1
- package/templates/default/dist/icons/platforms/apple-light.svg +0 -1
- package/templates/default/dist/icons/platforms/chrome.svg +0 -1
- package/templates/default/dist/icons/platforms/chromeos.svg +0 -5
- package/templates/default/dist/icons/platforms/desktop.svg +0 -4
- package/templates/default/dist/icons/platforms/embedded.svg +0 -5
- package/templates/default/dist/icons/platforms/ios.svg +0 -1
- package/templates/default/dist/icons/platforms/linux.svg +0 -1
- package/templates/default/dist/icons/platforms/macos.svg +0 -1
- package/templates/default/dist/icons/platforms/ubuntu.svg +0 -1
- package/templates/default/dist/icons/platforms/web.svg +0 -5
- package/templates/default/dist/icons/platforms/windows.svg +0 -6
- package/templates/default/dist/icons/stacks/android.svg +0 -1
- package/templates/default/dist/icons/stacks/apple-dark.svg +0 -1
- package/templates/default/dist/icons/stacks/apple-light.svg +0 -1
- package/templates/default/dist/icons/stacks/capacitor.svg +0 -14
- package/templates/default/dist/icons/stacks/dart.svg +0 -1
- package/templates/default/dist/icons/stacks/firebase.svg +0 -1
- package/templates/default/dist/icons/stacks/flutter.svg +0 -1
- package/templates/default/dist/icons/stacks/graphql.svg +0 -1
- package/templates/default/dist/icons/stacks/ionic.svg +0 -4
- package/templates/default/dist/icons/stacks/java.svg +0 -1
- package/templates/default/dist/icons/stacks/javascript.svg +0 -1
- package/templates/default/dist/icons/stacks/kotlin.svg +0 -1
- package/templates/default/dist/icons/stacks/mongodb.svg +0 -1
- package/templates/default/dist/icons/stacks/nodejs.svg +0 -1
- package/templates/default/dist/icons/stacks/python.svg +0 -1
- package/templates/default/dist/icons/stacks/react-native.svg +0 -1
- package/templates/default/dist/icons/stacks/react.svg +0 -1
- package/templates/default/dist/icons/stacks/rust.svg +0 -1
- package/templates/default/dist/icons/stacks/solidity.svg +0 -1
- package/templates/default/dist/icons/stacks/swift.svg +0 -1
- package/templates/default/dist/icons/stacks/tensorflow.svg +0 -1
- package/templates/default/dist/icons/stacks/typescript.svg +0 -1
- package/templates/default/dist/index.html +0 -55
- package/templates/default/dist/llms-full.txt +0 -14
- package/templates/default/dist/llms.txt +0 -11
- package/templates/default/dist/og-image.svg +0 -48
- package/templates/default/dist/projects/index.html +0 -61
- package/templates/default/dist/robots.txt +0 -53
- package/templates/default/dist/sitemap.xml +0 -21
- package/templates/default/dist/submit/index.html +0 -69
- package/templates/default/node_modules/.bin/astro +0 -21
- package/templates/default/node_modules/.bin/astro-check +0 -21
- package/templates/default/node_modules/.bin/grove +0 -21
- package/templates/default/node_modules/.bin/jiti +0 -21
- package/templates/default/node_modules/.bin/prettier +0 -21
- package/templates/default/node_modules/.bin/rollup +0 -21
- package/templates/default/node_modules/.bin/tsc +0 -21
- package/templates/default/node_modules/.bin/tsserver +0 -21
- package/templates/default/node_modules/.bin/tsx +0 -21
- package/templates/default/node_modules/.bin/vite +0 -21
- package/templates/default/node_modules/.bin/yaml +0 -21
- package/templates/default/node_modules/.vite/deps/_metadata.json +0 -79
- package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js +0 -433
- package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro___aria-query.js +0 -5
- package/templates/default/node_modules/.vite/deps/astro___aria-query.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro___axobject-query.js +0 -5
- package/templates/default/node_modules/.vite/deps/astro___axobject-query.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro___html-escaper.js +0 -9
- package/templates/default/node_modules/.vite/deps/astro___html-escaper.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -241
- package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js +0 -1592
- package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js +0 -30
- package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js +0 -186
- package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js +0 -48
- package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js +0 -6779
- package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js +0 -33
- package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js +0 -88
- package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js +0 -72
- package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js +0 -3757
- package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js +0 -54
- package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/package.json +0 -3
- package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js +0 -213
- package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js +0 -525
- package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js +0 -1020
- package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js +0 -147
- package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js.map +0 -7
- package/templates/default/src/components/layout/BaseLayout.astro +0 -47
- package/templates/default/src/components/layout/Container.astro +0 -18
- package/templates/default/src/components/layout/Footer.astro +0 -27
- package/templates/default/src/components/layout/Header.astro +0 -43
- package/templates/default/src/lib/markdown.ts +0 -171
- package/templates/default/src/pages/projects/index.astro +0 -193
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v6.4.5"><meta name="theme-color" content="#0a0a0c" media="(prefers-color-scheme: dark)"><meta name="theme-color" content="#fafafa" media="(prefers-color-scheme: light)"><link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect width='16' height='16' rx='3' fill='%2318181b'/%3E%3C/svg%3E"><link rel="sitemap" href="/sitemap.xml"><link rel="alternate" type="text/plain" href="/llms.txt" title="LLM usage guidance"><!-- Primary meta --><title>About — Grove Directory</title><meta name="description" content="About Grove Directory — A curated, health-aware developer directory."><link rel="canonical" href="https://example.com/about/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://example.com/about/"><meta property="og:title" content="About — Grove Directory"><meta property="og:description" content="About Grove Directory — A curated, health-aware developer directory."><meta property="og:image" content="https://example.com/og-image.svg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="Grove Directory — A curated, health-aware developer directory powered by Grove."><meta property="og:site_name" content="Grove Directory"><meta property="og:locale" content="en"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="About — Grove Directory"><meta name="twitter:description" content="About Grove Directory — A curated, health-aware developer directory."><meta name="twitter:image" content="https://example.com/og-image.svg"><meta name="twitter:image:alt" content="Grove Directory — A curated, health-aware developer directory powered by Grove."><!-- JSON-LD: site-wide identity --><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Grove Directory","description":"A curated, health-aware developer directory powered by Grove.","url":"https://example.com","inLanguage":"en","potentialAction":{"@type":"SearchAction","target":"https://example.com/projects?q={search_term_string}","query-input":"required name=search_term_string"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Grove Directory","url":"https://example.com","logo":"https://example.com/og-image.svg","sameAs":["https://github.com/tortuvshin/grove"]}</script><!-- JSON-LD: per-page (SoftwareSourceCode for [slug], etc.) --><script>
|
|
2
|
-
// THEME_INIT — runs before paint so the user never sees a
|
|
3
|
-
// flash of the wrong theme. State is persisted in localStorage
|
|
4
|
-
// under the key "grove-theme" (matching ThemeToggle.astro).
|
|
5
|
-
(function () {
|
|
6
|
-
var STORAGE_KEY = "grove-theme";
|
|
7
|
-
function getMode() {
|
|
8
|
-
try {
|
|
9
|
-
var stored = localStorage.getItem(STORAGE_KEY);
|
|
10
|
-
if (stored === "light" || stored === "dark" || stored === "system")
|
|
11
|
-
return stored;
|
|
12
|
-
} catch (e) {
|
|
13
|
-
// localStorage may be blocked (private mode, etc.) —
|
|
14
|
-
// fall through to the system default.
|
|
15
|
-
}
|
|
16
|
-
return "system";
|
|
17
|
-
}
|
|
18
|
-
function apply(mode) {
|
|
19
|
-
var resolved =
|
|
20
|
-
mode === "system"
|
|
21
|
-
? (window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
22
|
-
? "dark"
|
|
23
|
-
: "light")
|
|
24
|
-
: mode;
|
|
25
|
-
var root = document.documentElement;
|
|
26
|
-
if (resolved === "dark") root.classList.add("dark");
|
|
27
|
-
else root.classList.remove("dark");
|
|
28
|
-
root.dataset.theme = mode;
|
|
29
|
-
root.dataset.resolvedTheme = resolved;
|
|
30
|
-
}
|
|
31
|
-
apply(getMode());
|
|
32
|
-
window.addEventListener("theme:set", function (e) {
|
|
33
|
-
apply(e.detail);
|
|
34
|
-
});
|
|
35
|
-
var mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
36
|
-
mq.addEventListener("change", function () {
|
|
37
|
-
if (getMode() === "system") apply("system");
|
|
38
|
-
});
|
|
39
|
-
})();
|
|
40
|
-
</script><link rel="stylesheet" href="/_astro/BaseLayout.Dz_HR-68.css">
|
|
41
|
-
<style>.grove-container[data-astro-cid-nj4gdmks]{max-width:var(--container-container, 1140px)}.grove-container-wide[data-astro-cid-nj4gdmks]{max-width:var(--container-wide, 1400px)}.grove-container-narrow[data-astro-cid-nj4gdmks]{max-width:var(--container-narrow, 720px)}
|
|
42
|
-
</style></head> <body class="min-h-screen bg-white text-ink-900 dark:bg-ink-950 dark:text-ink-100"> <header class="sticky top-0 z-50 border-b border-ink-200 bg-white/85 backdrop-blur dark:border-ink-800 dark:bg-ink-950/85"> <div class="mx-auto flex max-w-wide items-center gap-6 px-5 py-3 sm:px-7" style="max-width: var(--container-wide, 1400px);"> <a href="/" class="inline-flex items-center gap-2 text-[0.95rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> <span aria-hidden="true" class="inline-block h-[18px] w-[18px] rounded bg-ink-900 dark:bg-ink-100"></span> <span>Grove Directory</span> </a> <nav class="hidden flex-1 md:block" aria-label="Primary"> <ul class="m-0 flex list-none gap-5 p-0"> <li> <a href="/" class="text-[0.875rem] font-medium text-ink-500 transition-colors hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> Home </a> </li><li> <a href="/projects" class="text-[0.875rem] font-medium text-ink-500 transition-colors hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> Browse </a> </li><li> <a href="/about" class="text-[0.875rem] font-medium text-ink-500 transition-colors hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> About </a> </li> </ul> </nav> <div class="ml-auto flex items-center gap-2"> <a href="https://github.com/tortuvshin/grove" target="_blank" rel="noopener noreferrer" aria-label="Star" title="Star" class="grove-btn grove-btn-outline"> <svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true" fill="currentColor"> <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38v-1.33c-2.22.48-2.69-1.07-2.69-1.07-.36-.92-.89-1.17-.89-1.17-.73-.5.05-.49.05-.49.8.06 1.23.83 1.23.83.72 1.22 1.87.87 2.33.67.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48v2.19c0 .21.15.46.55.38A8 8 0 0 0 8 0Z"></path> </svg> <span>Star</span> </a> <button type="button" data-theme-toggle aria-label="Toggle theme" title="Toggle theme" class="relative inline-flex h-8 w-8 items-center justify-center rounded-md border border-ink-200 bg-white text-ink-700 transition-colors hover:border-ink-300 hover:bg-ink-50 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-200 dark:hover:border-ink-700 dark:hover:bg-ink-900/40"> <svg class="hidden h-4 w-4 dark:block" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <circle cx="12" cy="12" r="4"></circle> <path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"></path> </svg> <svg class="block h-4 w-4 dark:hidden" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z"></path> </svg> </button> <script type="module">const c="grove-theme";function o(){try{const e=localStorage.getItem(c);return e==="light"||e==="dark"||e==="system"?e:"system"}catch{return"system"}}function s(){const e=["light","dark","system"],n=o(),r=e[(e.indexOf(n)+1)%e.length];try{localStorage.setItem(c,r)}catch{}return window.dispatchEvent(new CustomEvent("theme:set",{detail:r})),r}function t(e){e.title=`Theme: ${o()} (click to switch)`}document.querySelectorAll("[data-theme-toggle]").forEach(e=>{t(e),e.addEventListener("click",()=>{s(),t(e)}),e.addEventListener("mouseenter",()=>t(e)),e.addEventListener("focus",()=>t(e))});</script> </div> </div> </header> <script type="module">document.addEventListener("click",t=>{if(t.defaultPrevented||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.button!==0)return;const r=t.target.closest('a[href^="#"]');if(!r)return;const e=r.getAttribute("href");if(e.length<=1)return;const n=document.querySelector(e);n&&(t.preventDefault(),n.scrollIntoView({behavior:"smooth",block:"start"}),history.replaceState(null,"",e))});</script> <main> <div class="mx-auto grove-container px-5 sm:px-7" data-astro-cid-nj4gdmks> <article class="py-12 sm:py-16"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400">
|
|
43
|
-
About
|
|
44
|
-
</span> <h1 class="mt-1 text-[1.75rem] sm:text-[2.25rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100 m-0">
|
|
45
|
-
About Grove Directory </h1> <p class="mt-4 max-w-[62ch] text-base text-ink-700 dark:text-ink-200 m-0"> Grove Directory is a community knowledge site built with <a href="https://github.com/tortuvshin/grove" target="_blank" rel="noopener noreferrer" class="text-ink-900 underline hover:text-ink-700 dark:text-ink-100 dark:hover:text-white">
|
|
46
|
-
Grove
|
|
47
|
-
</a>
|
|
48
|
-
— an open-source framework for growing useful structured knowledge.
|
|
49
|
-
</p> </article> </div> <section class="grove-section"> <div class="grove-container-narrow mx-auto px-5 sm:px-7"> <header class="mb-6 flex flex-col gap-2"> <h2 class="m-0 text-[1.5rem] sm:text-[1.625rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> Why this exists </h2> <p class="m-0 text-[0.9375rem] text-ink-500 dark:text-ink-400"> Three principles guide what gets listed and how it's surfaced. </p> </header> <ol class="m-0 flex list-none flex-col gap-5 p-0"> <li class="flex gap-4"> <span aria-hidden="true" class="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md border border-ink-200 bg-ink-50 font-mono text-2xs text-ink-500 dark:border-ink-800 dark:bg-ink-900 dark:text-ink-400">
|
|
50
|
-
01 </span> <div> <h3 class="m-0 text-[1rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> Curated, not scraped </h3> <p class="m-0 mt-1 text-[0.9375rem] leading-relaxed text-ink-500 dark:text-ink-400"> Every entry is hand-checked. If something here, it's because someone looked at the source, ran the build, and decided it was worth your time. </p> </div> </li><li class="flex gap-4"> <span aria-hidden="true" class="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md border border-ink-200 bg-ink-50 font-mono text-2xs text-ink-500 dark:border-ink-800 dark:bg-ink-900 dark:text-ink-400">
|
|
51
|
-
02 </span> <div> <h3 class="m-0 text-[1rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> Plain text all the way down </h3> <p class="m-0 mt-1 text-[0.9375rem] leading-relaxed text-ink-500 dark:text-ink-400"> Records live in plain YAML, content in plain Markdown, and the static output in plain HTML. No database, no JavaScript framework, no CDN with sticky sessions. </p> </div> </li><li class="flex gap-4"> <span aria-hidden="true" class="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md border border-ink-200 bg-ink-50 font-mono text-2xs text-ink-500 dark:border-ink-800 dark:bg-ink-900 dark:text-ink-400">
|
|
52
|
-
03 </span> <div> <h3 class="m-0 text-[1rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> Free to fork, free to extend </h3> <p class="m-0 mt-1 text-[0.9375rem] leading-relaxed text-ink-500 dark:text-ink-400"> This whole site is one repo. If you want your own copy, fork it. If you want to add a record, open a PR. The directory is the community. </p> </div> </li> </ol> </div> </section> <div class="mx-auto grove-container px-5 sm:px-7" data-astro-cid-nj4gdmks> <section class="py-12 sm:py-16" aria-labelledby="methodology-heading"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400">
|
|
53
|
-
Methodology
|
|
54
|
-
</span> <h2 id="methodology-heading" class="mt-1 text-[1.5rem] sm:text-[1.75rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100 m-0">
|
|
55
|
-
How records are picked, scored, and surfaced
|
|
56
|
-
</h2> <p class="mt-3 max-w-[62ch] text-sm text-ink-500 dark:text-ink-400 m-0">
|
|
57
|
-
The full editorial + scoring methodology lives in
|
|
58
|
-
<code class="font-mono text-ink-900 dark:text-ink-100">content/pages/methodology.md</code>.
|
|
59
|
-
Below is the rendered source so reviewers can audit the criteria.
|
|
60
|
-
</p> <pre class="mt-6 overflow-x-auto rounded-md border border-ink-200 bg-ink-50 p-4 text-xs leading-relaxed text-ink-800 dark:border-ink-800 dark:bg-ink-900/60 dark:text-ink-200"><code>---
|
|
61
|
-
title: "Methodology"
|
|
62
|
-
description: "How records are picked, scored, and surfaced in this directory."
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
# Methodology
|
|
66
|
-
|
|
67
|
-
This page describes how entries in the directory are chosen, how the
|
|
68
|
-
curation signals are computed, and what we do (and don't) promise about
|
|
69
|
-
the data. The intent is to make the directory's logic auditable — every
|
|
70
|
-
number on a detail page is reproducible from the record's YAML.
|
|
71
|
-
|
|
72
|
-
## Selection
|
|
73
|
-
|
|
74
|
-
A record is included if it is:
|
|
75
|
-
|
|
76
|
-
1. **Open source.** Source is public under an OSI-approved license
|
|
77
|
-
(or public-domain dedication).
|
|
78
|
-
2. **Actively maintained.** A pushed commit within the last 18 months
|
|
79
|
-
OR a declared maintenance status of `maintained` / `passive`.
|
|
80
|
-
3. **Useful to a curious developer.** A working build, a real user
|
|
81
|
-
base (or a credible path to one), and a clear description of what
|
|
82
|
-
the project does.
|
|
83
|
-
|
|
84
|
-
We exclude: abandoned experiments, vapourware, projects whose entire
|
|
85
|
-
purpose is to sell a hosted plan, and any record that has not been
|
|
86
|
-
hand-checked by a maintainer.
|
|
87
|
-
|
|
88
|
-
## Curation labels
|
|
89
|
-
|
|
90
|
-
The `curation.labels` field is a small, hand-set list. The supported
|
|
91
|
-
labels are:
|
|
92
|
-
|
|
93
|
-
- `hot` — high recent activity or attention (≥ 1 000 stars or a
|
|
94
|
-
commit within the last 30 days).
|
|
95
|
-
- `new` — added to the directory in the last 7 days.
|
|
96
|
-
- `mature` — long-running curated project, pushed > 365 days ago,
|
|
97
|
-
but still maintained.
|
|
98
|
-
- `featured` — editor's pick for the front page.
|
|
99
|
-
- `needs-review` — open submission awaiting a second maintainer
|
|
100
|
-
look.
|
|
101
|
-
|
|
102
|
-
These labels are mutually additive, not exclusive. A `new` record
|
|
103
|
-
can also be `hot`; a `mature` record can also be `featured`.
|
|
104
|
-
|
|
105
|
-
## Scoring
|
|
106
|
-
|
|
107
|
-
The detail page surfaces a five-dimension score block. The five
|
|
108
|
-
dimensions are:
|
|
109
|
-
|
|
110
|
-
- **Documentation** — is the README / docs site enough to onboard
|
|
111
|
-
without reading the source?
|
|
112
|
-
- **Onboarding** — install in < 5 min, first useful result in < 1 h.
|
|
113
|
-
- **Maintenance** — recent commits, issue close rate, release cadence.
|
|
114
|
-
- **Community** — issues answered, discussions active, contributors
|
|
115
|
-
per release.
|
|
116
|
-
- **Production-readiness** — CI, tests, security policy, releases
|
|
117
|
-
with semver.
|
|
118
|
-
|
|
119
|
-
Each dimension is scored 0-5. The overall score on the detail page
|
|
120
|
-
is the mean. Scores are stored on the record, not computed at build
|
|
121
|
-
time, so we can deliberately disagree with the raw signals (a 1-line
|
|
122
|
-
toy that happens to be wildly popular can still score low on
|
|
123
|
-
documentation).
|
|
124
|
-
|
|
125
|
-
## Health signals
|
|
126
|
-
|
|
127
|
-
The `health` block on each record tracks four state machines:
|
|
128
|
-
|
|
129
|
-
- `status` — `healthy` / `slowing` / `stale` / `archived`.
|
|
130
|
-
- `tier` — `curated` / `community` / `experimental`.
|
|
131
|
-
- `issue_close_rate` — moving 90-day average.
|
|
132
|
-
- `last_release` — most recent semver tag.
|
|
133
|
-
|
|
134
|
-
A record's `status` transitions are time-boxed: a project with no
|
|
135
|
-
commits in 365 days flips from `slowing` to `stale`; 730 days flips
|
|
136
|
-
to `archived`. The transition is mechanical; the recovery is
|
|
137
|
-
manual (a maintainer sets `tier` back to `community` after review).
|
|
138
|
-
|
|
139
|
-
## Lenses
|
|
140
|
-
|
|
141
|
-
The directory's home page surfaces three curated lenses:
|
|
142
|
-
|
|
143
|
-
- **Hot** — `curation.labels` includes `hot`, OR `github.stars` ≥
|
|
144
|
-
1 000, OR `pushedAt` within 30 days.
|
|
145
|
-
- **New** — `pushedAt` within 7 days, OR `curation.labels` includes
|
|
146
|
-
`new`.
|
|
147
|
-
- **Mature** — `health.tier === "curated"` AND `pushedAt` > 365 days
|
|
148
|
-
ago.
|
|
149
|
-
|
|
150
|
-
Each lens caps at 6 items on the home page; the full filtered list
|
|
151
|
-
is reachable via the lens tab on `/projects`.
|
|
152
|
-
|
|
153
|
-
## What we don't promise
|
|
154
|
-
|
|
155
|
-
- **Real-time data.** The site is rebuilt on a schedule, not on
|
|
156
|
-
every push. Counts and dates can lag by up to one build cycle.
|
|
157
|
-
- **Verdict-free scores.** A high overall score means "useful to a
|
|
158
|
-
curious developer", not "best in class" — judgement calls are
|
|
159
|
-
documented per record, not baked into the score.
|
|
160
|
-
- **Causal claims.** The "best for" / "why listed" / "caveats"
|
|
161
|
-
blocks are editorial notes, not derived signals. They reflect
|
|
162
|
-
what a maintainer thought at review time.
|
|
163
|
-
</code></pre> </section> </div> </main> <footer class="mt-16 border-t border-ink-200 bg-white text-ink-500 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-400"> <div class="mx-auto grid max-w-wide grid-cols-2 gap-8 px-5 py-12 md:grid-cols-4 sm:px-7" style="max-width: var(--container-wide, 1400px);"> <div class="col-span-2 md:col-span-1"> <div class="mb-2 inline-flex items-center gap-2 text-[0.95rem] font-semibold text-ink-900 dark:text-ink-100"> <span aria-hidden="true" class="inline-block h-3.5 w-3.5 rounded bg-ink-900 dark:bg-ink-100"></span> <span>Grove Directory</span> </div> <p class="m-0 max-w-[36ch] text-[0.8125rem] leading-relaxed text-ink-500 dark:text-ink-400"> A curated, health-aware developer directory. </p> </div> <div> <h4 class="mb-3 text-2xs font-semibold uppercase tracking-wider text-ink-900 dark:text-ink-100"> Discover </h4> <ul class="m-0 flex list-none flex-col gap-2 p-0"> <li> <a href="https://github.com/tortuvshin/grove" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Source on GitHub </a> </li><li> <a href="https://github.com/tortuvshin/grove/releases" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Latest release </a> </li> </ul> </div> <div> <h4 class="mb-3 text-2xs font-semibold uppercase tracking-wider text-ink-900 dark:text-ink-100"> Contribute </h4> <ul class="m-0 flex list-none flex-col gap-2 p-0"> <li> <a href="https://github.com/tortuvshin/grove/blob/main/CONTRIBUTING.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Submit via GitHub </a> </li><li> <a href="https://github.com/tortuvshin/grove/issues" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Report an issue </a> </li><li> <a href="https://github.com/tortuvshin/grove/blob/main/CONTRIBUTING.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Contributing guide </a> </li> </ul> </div> <div> <h4 class="mb-3 text-2xs font-semibold uppercase tracking-wider text-ink-900 dark:text-ink-100"> Project </h4> <ul class="m-0 flex list-none flex-col gap-2 p-0"> <li> <a href="https://github.com/tortuvshin/grove/blob/main/README.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> README </a> </li><li> <a href="https://github.com/tortuvshin/grove/blob/main/CHANGELOG.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Changelog </a> </li> </ul> </div> </div> <div class="border-t border-ink-200 dark:border-ink-800"> <div class="mx-auto flex max-w-wide flex-wrap items-center gap-3 px-5 py-4 text-2xs text-ink-500 sm:px-7 dark:text-ink-400" style="max-width: var(--container-wide, 1400px);"> <span>© 2026 Grove Directory.</span> <span class="text-ink-300 dark:text-ink-700">·</span> <a href="https://github.com/tortuvshin/grove" target="_blank" rel="noopener noreferrer" class="transition-colors hover:text-ink-900 dark:hover:text-ink-100">
|
|
164
|
-
View source on GitHub
|
|
165
|
-
</a> </div> </div> </footer> </body> </html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 150"><path fill="#34A853" d="M255.285 143.47c-.084-.524-.164-1.042-.251-1.56a128.1 128.1 0 0 0-12.794-38.288 128.8 128.8 0 0 0-23.45-31.86 129.2 129.2 0 0 0-22.713-18.005c.049-.08.09-.168.14-.25 2.582-4.461 5.172-8.917 7.755-13.38l7.576-13.068c1.818-3.126 3.632-6.26 5.438-9.386a11.78 11.78 0 0 0 .662-10.484 11.67 11.67 0 0 0-4.823-5.536 11.85 11.85 0 0 0-5.004-1.61 12 12 0 0 0-2.218.018 11.74 11.74 0 0 0-8.968 5.798c-1.814 3.127-3.628 6.26-5.438 9.386l-7.576 13.069c-2.583 4.462-5.173 8.918-7.755 13.38-.282.487-.567.973-.848 1.467q-.586-.237-1.172-.462c-14.24-5.43-29.688-8.4-45.836-8.4-.442 0-.879 0-1.324.006-14.357.143-28.152 2.64-41.022 7.12a119 119 0 0 0-4.42 1.642c-.262-.455-.532-.911-.79-1.367-2.583-4.462-5.173-8.918-7.755-13.38l-7.576-13.07a3915 3915 0 0 1-5.439-9.386A11.74 11.74 0 0 0 48.5.048a11.7 11.7 0 0 0-5.01 1.612 11.7 11.7 0 0 0-4.077 4.063c-.281.474-.532.967-.742 1.473a11.8 11.8 0 0 0-.365 8.188c.259.786.594 1.554 1.023 2.296a3973 3973 0 0 1 5.439 9.386c2.53 4.357 5.054 8.713 7.58 13.069 2.582 4.462 5.168 8.918 7.75 13.38.02.038.046.075.065.112A129 129 0 0 0 45.32 64.38a129.7 129.7 0 0 0-22.2 24.015 128 128 0 0 0-9.34 15.24 128.2 128.2 0 0 0-10.843 28.764 131 131 0 0 0-1.951 9.524c-.087.518-.167 1.042-.247 1.56A125 125 0 0 0 0 149.118h256a130 130 0 0 0-.734-5.636z"/><path fill="#202124" d="M194.59 113.712c5.122-3.41 5.867-11.3 1.661-17.62-4.203-6.323-11.763-8.682-16.883-5.273-5.122 3.41-5.868 11.3-1.662 17.621 4.203 6.322 11.764 8.682 16.883 5.272Zm-116.072-5.25c4.206-6.321 3.46-14.21-1.662-17.62-5.123-3.41-12.68-1.05-16.886 5.27-4.203 6.323-3.458 14.212 1.662 17.622 5.122 3.41 12.683 1.05 16.886-5.272"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 814 1000"><path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2m-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 814 1000"><path fill="#fff" d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2m-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><g clip-path="url(#a)"><path fill="#fff" d="M50 74.99c13.807 0 25-11.193 25-25s-11.193-25-25-25-25 11.192-25 25 11.193 25 25 25"/><path fill="url(#b)" d="M50 25h43.294a49.988 49.988 0 0 0-86.591.006L28.35 62.501l.02-.005A24.969 24.969 0 0 1 50 25"/><path fill="#1A73E8" d="M50 69.792c10.93 0 19.792-8.86 19.792-19.791S60.93 30.209 50 30.209s-19.792 8.86-19.792 19.792c0 10.93 8.861 19.791 19.792 19.791"/><path fill="url(#c)" d="M71.649 62.507 50.002 100A49.98 49.98 0 0 0 93.3 75.004a49.99 49.99 0 0 0-.01-49.997H49.999l-.005.02a24.97 24.97 0 0 1 21.655 37.48"/><path fill="url(#d)" d="M28.351 62.507 6.704 25.013A49.988 49.988 0 0 0 50.005 100l21.647-37.493-.014-.015a24.97 24.97 0 0 1-43.287.015"/></g><defs><linearGradient id="b" x1="6.703" x2="93.294" y1="31.25" y2="31.25" gradientUnits="userSpaceOnUse"><stop stop-color="#D93025"/><stop offset="1" stop-color="#EA4335"/></linearGradient><linearGradient id="c" x1="43.171" x2="86.466" y1="99.332" y2="24.341" gradientUnits="userSpaceOnUse"><stop stop-color="#FCC934"/><stop offset="1" stop-color="#FBBC04"/></linearGradient><linearGradient id="d" x1="55.413" x2="12.117" y1="96.879" y2="21.888" gradientUnits="userSpaceOnUse"><stop stop-color="#1E8E3E"/><stop offset="1" stop-color="#34A853"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h100v100H0z"/></clipPath></defs></svg>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
-
<circle cx="12" cy="12" r="10"/>
|
|
3
|
-
<circle cx="12" cy="12" r="3.5" fill="currentColor" stroke="none"/>
|
|
4
|
-
<path d="M12 2v6M12 16v6M2 12h6M16 12h6"/>
|
|
5
|
-
</svg>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
-
<rect x="5" y="5" width="14" height="14" rx="1.5"/>
|
|
3
|
-
<rect x="9" y="9" width="6" height="6" fill="currentColor" stroke="none"/>
|
|
4
|
-
<path d="M2 9v6M22 9v6M9 12H4M20 12h-5M12 4V2M12 22v-2"/>
|
|
5
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 814 1000"><path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2m-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="4.31 0.8 249.38 282.43"><defs><linearGradient id="b" x1="48.548%" x2="51.047%" y1="115.276%" y2="41.364%"><stop offset="0%" stop-color="#FFEED7"/><stop offset="100%" stop-color="#BDBFC2"/></linearGradient><linearGradient id="c" x1="54.407%" x2="46.175%" y1="2.404%" y2="90.542%"><stop offset="0%" stop-color="#FFF" stop-opacity=".8"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="d" x1="51.86%" x2="47.947%" y1="88.248%" y2="9.748%"><stop offset="0%" stop-color="#FFEED7"/><stop offset="100%" stop-color="#BDBFC2"/></linearGradient><linearGradient id="e" x1="49.925%" x2="49.924%" y1="85.49%" y2="13.811%"><stop offset="0%" stop-color="#FFEED7"/><stop offset="100%" stop-color="#BDBFC2"/></linearGradient><linearGradient id="f" x1="53.901%" x2="45.956%" y1="3.102%" y2="93.895%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="g" x1="45.593%" x2="54.811%" y1="5.475%" y2="93.524%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="h" x1="49.984%" x2="49.984%" y1="89.845%" y2="40.632%"><stop offset="0%" stop-color="#FFEED7"/><stop offset="100%" stop-color="#BDBFC2"/></linearGradient><linearGradient id="i" x1="53.505%" x2="42.746%" y1="99.975%" y2="23.545%"><stop offset="0%" stop-color="#FFEED7"/><stop offset="100%" stop-color="#BDBFC2"/></linearGradient><linearGradient id="j" x1="49.841%" x2="50.241%" y1="13.229%" y2="94.673%"><stop offset="0%" stop-color="#FFF" stop-opacity=".8"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="k" x1="49.927%" x2="50.727%" y1="37.327%" y2="92.782%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="l" x1="49.876%" x2="49.876%" y1="2.299%" y2="81.204%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="m" x1="49.833%" x2="49.824%" y1="2.272%" y2="71.799%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="n" x1="53.467%" x2="38.949%" y1="48.921%" y2="98.1%"><stop offset="0%" stop-color="#FFA63F"/><stop offset="100%" stop-color="#FF0"/></linearGradient><linearGradient id="o" x1="52.373%" x2="47.579%" y1="143.009%" y2="-64.622%"><stop offset="0%" stop-color="#FFEED7"/><stop offset="100%" stop-color="#BDBFC2"/></linearGradient><linearGradient id="p" x1="30.581%" x2="65.887%" y1="34.024%" y2="89.175%"><stop offset="0%" stop-color="#FFA63F"/><stop offset="100%" stop-color="#FF0"/></linearGradient><linearGradient id="q" x1="59.572%" x2="48.361%" y1="-17.216%" y2="66.118%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="r" x1="47.769%" x2="51.373%" y1="1.565%" y2="104.313%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="s" x1="43.55%" x2="57.114%" y1="4.533%" y2="92.827%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="t" x1="49.733%" x2="50.558%" y1="17.609%" y2="99.385%"><stop offset="0%" stop-color="#FFA63F"/><stop offset="100%" stop-color="#FF0"/></linearGradient><linearGradient id="u" x1="50.17%" x2="49.68%" y1="2.89%" y2="94.17%"><stop offset="0%" stop-color="#FFF" stop-opacity=".65"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><filter id="a" width="200%" height="200%" x="-50%" y="-50%" filterUnits="objectBoundingBox"><feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="6.5"/></filter></defs><g fill="none"><path fill="#000" fill-opacity=".2" d="M235.125 249.359c0 17.355-52.617 31.497-117.54 31.497S.044 266.806.044 249.359c0-17.356 52.618-31.498 117.54-31.498 64.924 0 117.45 14.142 117.541 31.498" filter="url(#a)" transform="translate(10)"/><path fill="#000" d="M63.213 215.474c-11.387-16.346-13.591-69.606 12.947-102.39C89.292 97.383 92.69 86.455 93.7 71.67c.734-16.805-11.846-66.851 35.537-70.616 48.027-3.857 45.364 43.526 45.088 68.596-.183 21.12 15.52 33.15 26.355 49.68 19.927 30.303 18.274 82.461-3.765 110.745-27.916 35.354-51.791 20.018-67.678 21.304-29.752 1.745-30.762 17.54-66.024-35.905"/><path fill="url(#b)" d="M169.1 122.451c8.265 7.622 29.661 41.69-4.224 62.995-11.937 7.438 10.653 35.721 21.488 22.039 19.193-24.61 6.98-63.913-4.591-77.963-7.714-9.917-19.651-13.774-12.672-7.07" transform="translate(10)"/><path fill="#000" stroke="#000" stroke-width=".977" d="M176.805 117.86c13.59 11.02 38.292 49.587 2.204 74.748-11.846 7.806 10.468 32.508 23.049 19.927 43.618-43.894-1.102-94.308-16.53-111.664-13.774-15.151-25.987 3.49-8.723 16.989z"/><path fill="url(#c)" d="M147.245 25.02c-.459 12.581-14.325 23.51-30.946 24.52S86.639 41 87.097 28.419c.46-12.581 14.326-23.509 30.947-24.519 16.62-.918 29.66 8.54 29.201 21.12" transform="translate(10)"/><path fill="url(#d)" d="M107.483 54.957c.46 8.173-3.397 15.06-8.723 15.335s-10.01-6.06-10.469-14.233 3.398-15.06 8.724-15.335 10.01 6.06 10.468 14.233" transform="translate(10)"/><path fill="url(#e)" d="M117.125 55.6c.184 9.458 6.337 16.988 13.683 16.805 7.346-.184 13.131-7.99 12.948-17.54-.184-9.458-6.336-16.988-13.683-16.804-7.346.183-13.223 8.08-12.948 17.539" transform="translate(10)"/><path fill="#000" d="M133.186 57.712c-.092 5.234 2.48 9.458 5.877 9.458 3.306 0 6.153-4.224 6.245-9.366.091-5.234-2.48-9.459-5.878-9.459-3.397 0-6.152 4.225-6.244 9.367m-21.212.092c.459 4.316-1.194 7.989-3.582 8.356-2.387.276-4.683-2.938-5.142-7.254s1.194-7.99 3.581-8.357c2.388-.275 4.684 2.939 5.143 7.255"/><path fill="url(#f)" d="M124.564 54.773c-.276 2.939 1.102 5.326 3.03 5.51s3.765-2.112 4.04-4.959c.276-2.938-1.102-5.326-3.03-5.51-1.928-.183-3.765 2.113-4.04 4.96" transform="translate(10)"/><path fill="url(#g)" d="M99.953 55.508c.276 2.388-.734 4.5-2.203 4.683-1.47.184-2.847-1.653-3.123-4.132-.275-2.388.735-4.5 2.204-4.683 1.47-.184 2.847 1.744 3.122 4.132" transform="translate(10)"/><path fill="url(#h)" d="M71.027 145.684c6.52-14.785 20.386-40.772 20.662-60.883 0-15.978 47.843-19.835 51.7-3.856 3.856 15.978 13.59 39.853 19.834 51.424 6.245 11.478 24.335 48.118 5.051 80.074-17.356 28.284-69.973 50.69-98.073-3.856-9.55-18.917-7.806-42.333.826-62.903" transform="translate(10)"/><path fill="url(#i)" d="M65.15 134.664c-5.601 10.56-17.172 38.293 11.112 53.445 30.395 16.162 30.303 49.312-6.245 33.517-33.425-14.233-18.641-71.902-9.274-85.676 6.06-9.642 15.243-21.488 4.407-1.286" transform="translate(10)"/><path fill="#000" stroke="#000" stroke-width="1.25" d="M79.925 122.727c-8.907 14.509-30.211 48.669-1.652 66.484 38.384 23.6 27.548 47.108-7.53 25.895-49.404-29.568-5.97-89.257 13.774-112.03 22.59-25.529 4.316 4.683-4.592 19.65z"/><path fill="url(#j)" d="M156.428 151.285c0 16.162-15.519 37.1-42.15 36.916-27.456.183-39.118-20.754-39.118-36.916s18.182-29.293 40.588-29.293c22.498.092 40.68 13.132 40.68 29.293" transform="translate(10)"/><path fill="url(#k)" d="M141.92 100.504c-.276 16.713-11.204 20.662-24.978 20.662s-23.784-2.48-24.978-20.662c0-11.387 11.203-17.998 24.978-17.998 13.774-.092 24.977 6.52 24.977 17.998" transform="translate(10)"/><path fill="url(#l)" d="M58.63 126.216c9-13.682 28.008-34.711 3.582 2.939-19.835 31.038-7.346 50.965-.918 56.474 18.549 16.53 17.814 27.64 3.214 18.917-31.314-18.641-24.794-50.047-5.878-78.33" transform="translate(10)"/><path fill="url(#m)" d="M188.936 131.818c-7.806-16.07-32.6-56.842 1.193-9.459 30.763 42.884 9.183 72.729 5.326 75.667-3.856 2.939-16.804 8.908-13.04-1.469 3.858-10.377 22.958-30.028 6.52-64.74" transform="translate(10)"/><path fill="url(#n)" stroke="#E68C3F" stroke-width="6.25" d="M51.835 258.542c-20.57-10.928-50.414 2.112-39.578-27.457 2.204-6.704-3.214-16.805.275-23.325 4.133-7.989 13.04-6.244 18.366-11.57 5.234-5.51 8.54-15.06 18.366-13.59 9.734 1.468 16.254 13.406 23.049 28.099 5.05 10.468 22.865 25.253 21.672 37.007-1.47 17.998-21.948 21.396-42.15 10.836z" transform="translate(10)"/><path fill="url(#o)" d="M201.608 189.119c-3.122 5.877-16.162 15.335-24.886 12.856-8.815-2.388-12.856-15.795-11.111-25.988 1.653-11.386 11.111-12.03 23.05-6.336 12.855 6.336 16.712 11.662 12.947 19.468" transform="translate(10)"/><path fill="url(#p)" stroke="#E68C3F" stroke-width="6.251" d="M194.445 253.49c15.06-18.273 48.578-14.508 25.988-39.577-4.775-5.418-3.306-16.989-9.183-21.947-6.887-6.061-14.509-1.102-21.488-4.224-6.979-3.398-14.325-9.918-22.865-5.327-8.54 4.684-9.459 16.805-10.285 32.783-.735 11.479-11.203 30.671-5.602 41.231 8.081 16.346 29.11 14.142 43.435-2.938z" transform="translate(10)"/><path fill="url(#q)" d="M187.925 229.064c23.325-34.435 5.97-34.16.092-36.823-5.877-2.755-12.03-8.173-18.916-4.408-6.888 3.857-7.255 13.775-7.439 26.814-.275 9.367-8.08 25.07-3.397 33.793 5.693 10.193 19.467-4.591 29.66-19.376" transform="translate(10)"/><path fill="url(#r)" d="M47.06 234.023c-34.895-22.59-18.55-30.303-13.315-33.885 6.336-4.591 6.428-13.407 14.233-12.58 7.806.826 12.397 10.468 17.631 22.406 3.857 8.54 17.264 19.927 16.254 29.753-1.285 11.57-19.743 3.948-34.803-5.694" transform="translate(10)"/><path fill="#000" d="M209.588 188.843c-2.755 4.776-13.958 12.306-21.396 10.285-7.622-1.928-11.112-12.672-9.55-20.753 1.377-9.183 9.55-9.642 19.834-5.05 10.928 4.958 14.326 9.182 11.112 15.518"/><path fill="url(#s)" d="M192.058 186.18c-1.745 3.306-9.091 8.54-14.234 7.163-5.142-1.377-7.713-8.815-6.887-14.417.735-6.336 6.244-6.704 13.223-3.581 7.53 3.49 9.918 6.428 7.898 10.835" transform="translate(10)"/><path fill="url(#t)" stroke="#E68C3F" stroke-width="3.75" d="M97.107 66.344c3.673-3.398 12.58-13.774 29.477-2.939 3.122 2.02 5.693 2.204 11.662 4.775 12.03 4.96 6.336 16.897-6.52 20.937-5.51 1.745-10.468 8.449-20.386 7.806-8.54-.46-10.744-6.06-15.978-9.091-9.275-5.234-10.652-12.305-5.602-16.07 5.051-3.765 6.98-5.143 7.347-5.418z" transform="translate(10)"/><path stroke="#E68C3F" stroke-width="2.5" d="M148.43 75.986c-5.05.275-15.979 11.203-27.457 11.203s-18.366-10.652-20.11-10.652"/><path fill="url(#u)" d="M102.8 65.426c1.837-1.653 7.622-6.153 15.244-1.562 1.653.919 3.306 1.929 5.693 3.306 4.867 2.847 2.48 6.98-3.398 9.55-2.663 1.102-7.07 3.49-10.376 3.306-3.673-.367-6.153-2.755-8.54-4.316-4.5-2.938-4.224-5.418-2.112-7.346 1.56-1.47 3.305-2.847 3.49-2.938" transform="translate(10)"/></g></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 814 1000"><path fill="#fff" d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2m-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#FF6309" d="M11.728 59.736c5.373 0 9.728-4.355 9.728-9.728s-4.355-9.728-9.728-9.728S2 44.635 2 50.008s4.355 9.728 9.728 9.728"/><path fill="#FFB515" d="M81.485 100c5.373 0 9.728-4.355 9.728-9.728s-4.355-9.73-9.728-9.73-9.73 4.357-9.73 9.73S76.113 100 81.486 100"/><path fill="#C90016" d="M81.476 19.457c5.373 0 9.728-4.356 9.728-9.728C91.204 4.356 86.85 0 81.476 0s-9.728 4.356-9.728 9.729 4.356 9.728 9.728 9.728"/><path fill="#FF6309" d="M58.23 25.936c12.115 0 22.165 8.995 23.83 20.656h16.666c-.758-9.163-4.556-17.704-10.908-24.439-4.068 2.071-9.07 2.111-13.319-.341-4.252-2.456-6.719-6.81-6.956-11.374A41 41 0 0 0 58.23 9.37c-6.082 0-11.959 1.327-17.304 3.845l8.346 14.452a23.9 23.9 0 0 1 8.959-1.731"/><path fill="#FFB515" d="M34.16 50.008c0-7.67 3.605-14.51 9.208-18.922l-8.343-14.45a41 41 0 0 0-5.532 4.636c-4.828 4.828-8.29 10.658-10.195 17.02 3.839 2.486 6.38 6.802 6.38 11.716s-2.541 9.23-6.38 11.715c1.905 6.362 5.367 12.191 10.195 17.02a41.3 41.3 0 0 0 5.528 4.636l8.344-14.453c-5.602-4.41-9.205-11.251-9.205-18.918"/><path fill="#C90016" d="M82.06 53.414C80.4 65.078 70.348 74.078 58.231 74.078c-3.166 0-6.192-.616-8.962-1.733L40.924 86.8c5.343 2.519 11.224 3.847 17.307 3.847 3.177 0 6.3-.367 9.32-1.07.233-4.57 2.7-8.931 6.955-11.388 4.25-2.454 9.254-2.416 13.322-.34 6.346-6.736 10.141-15.275 10.896-24.434z"/></svg>
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
-
<rect x="2" y="3" width="9" height="9"/>
|
|
3
|
-
<rect x="13" y="3" width="9" height="9"/>
|
|
4
|
-
<rect x="2" y="13" width="9" height="9"/>
|
|
5
|
-
<rect x="13" y="13" width="9" height="9"/>
|
|
6
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 150"><path fill="#34A853" d="M255.285 143.47c-.084-.524-.164-1.042-.251-1.56a128.1 128.1 0 0 0-12.794-38.288 128.8 128.8 0 0 0-23.45-31.86 129.2 129.2 0 0 0-22.713-18.005c.049-.08.09-.168.14-.25 2.582-4.461 5.172-8.917 7.755-13.38l7.576-13.068c1.818-3.126 3.632-6.26 5.438-9.386a11.78 11.78 0 0 0 .662-10.484 11.67 11.67 0 0 0-4.823-5.536 11.85 11.85 0 0 0-5.004-1.61 12 12 0 0 0-2.218.018 11.74 11.74 0 0 0-8.968 5.798c-1.814 3.127-3.628 6.26-5.438 9.386l-7.576 13.069c-2.583 4.462-5.173 8.918-7.755 13.38-.282.487-.567.973-.848 1.467q-.586-.237-1.172-.462c-14.24-5.43-29.688-8.4-45.836-8.4-.442 0-.879 0-1.324.006-14.357.143-28.152 2.64-41.022 7.12a119 119 0 0 0-4.42 1.642c-.262-.455-.532-.911-.79-1.367-2.583-4.462-5.173-8.918-7.755-13.38l-7.576-13.07a3915 3915 0 0 1-5.439-9.386A11.74 11.74 0 0 0 48.5.048a11.7 11.7 0 0 0-5.01 1.612 11.7 11.7 0 0 0-4.077 4.063c-.281.474-.532.967-.742 1.473a11.8 11.8 0 0 0-.365 8.188c.259.786.594 1.554 1.023 2.296a3973 3973 0 0 1 5.439 9.386c2.53 4.357 5.054 8.713 7.58 13.069 2.582 4.462 5.168 8.918 7.75 13.38.02.038.046.075.065.112A129 129 0 0 0 45.32 64.38a129.7 129.7 0 0 0-22.2 24.015 128 128 0 0 0-9.34 15.24 128.2 128.2 0 0 0-10.843 28.764 131 131 0 0 0-1.951 9.524c-.087.518-.167 1.042-.247 1.56A125 125 0 0 0 0 149.118h256a130 130 0 0 0-.734-5.636z"/><path fill="#202124" d="M194.59 113.712c5.122-3.41 5.867-11.3 1.661-17.62-4.203-6.323-11.763-8.682-16.883-5.273-5.122 3.41-5.868 11.3-1.662 17.621 4.203 6.322 11.764 8.682 16.883 5.272Zm-116.072-5.25c4.206-6.321 3.46-14.21-1.662-17.62-5.123-3.41-12.68-1.05-16.886 5.27-4.203 6.323-3.458 14.212 1.662 17.622 5.122 3.41 12.683 1.05 16.886-5.272"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 814 1000"><path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2m-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 814 1000"><path fill="#fff" d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2m-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3"/></svg>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
2
|
-
<!-- Capacitor brand: dark navy background, white capacitor symbol -->
|
|
3
|
-
<rect width="100" height="100" rx="20" fill="#142B45"/>
|
|
4
|
-
<g fill="none" stroke="#FFFFFF" stroke-width="6" stroke-linecap="round" stroke-linejoin="round">
|
|
5
|
-
<!-- Left plate (vertical line) -->
|
|
6
|
-
<line x1="34" y1="30" x2="34" y2="70"/>
|
|
7
|
-
<!-- Right plate (vertical line) -->
|
|
8
|
-
<line x1="66" y1="30" x2="66" y2="70"/>
|
|
9
|
-
<!-- Left arc connecting top and bottom of left plate -->
|
|
10
|
-
<path d="M34 30 C20 34 20 66 34 70"/>
|
|
11
|
-
<!-- Right arc connecting top and bottom of right plate -->
|
|
12
|
-
<path d="M66 30 C80 34 80 66 66 70"/>
|
|
13
|
-
</g>
|
|
14
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><g clip-path="url(#a)"><path fill="#00C4B3" d="m26.878 27.059-6.425-6.426v46.335l.09 2.172c0 .995.181 2.172.543 3.348l50.86 17.919 12.67-5.61z"/><path fill="#22D3C5" d="m84.615 84.796-12.67 5.61-50.769-17.918c.996 3.71 3.077 7.874 5.43 10.227l16.561 16.47 36.923.09z"/><path fill="#0075C9" d="M20.634 20.633.905 50.497c-1.629 1.72-.814 5.34 1.81 8.055l11.403 11.493 7.149 2.534c-.271-1.177-.543-2.353-.543-3.349l-.09-2.172z"/><path fill="#0075C9" d="M72.308 21.176a26 26 0 0 0-3.349-.543l-2.262-.09H20.453l64.162 64.163 5.611-12.67z"/><path fill="#00A8E1" d="M82.534 26.606c-2.353-2.353-6.425-4.525-10.226-5.43l17.918 50.86-5.61 12.67L98.37 80.27V42.534z"/><path fill="#00C4B3" d="M69.774 14.117 58.28 2.715C55.656.09 52.036-.725 50.226.905L20.362 20.633h46.244l2.263.09c.995 0 2.172.182 3.348.544z"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h100v100H0z"/></clipPath></defs></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#FFA000" d="m61.405 36.118-10 9.312-9.284-18.733 4.796-10.771c1.212-2.149 3.194-2.177 4.407 0z"/><path fill="#F57F17" d="M51.409 45.426 14 80.22l28.126-53.523z"/><path fill="#FFCA28" d="M72.371 21.877c1.792-1.707 3.636-1.131 4.103 1.293l9.725 56.58-32.257 19.365c-1.13.632-4.13.88-4.13.88s-2.729-.333-3.774-.909L14 80.22z"/><path fill="#FFA000" d="M42.126 26.697 14 80.22 26.535 1.989c.47-2.424 1.844-2.672 3.084-.523z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#42A5F5" fill-opacity=".8" d="M25.399 65.395 10 49.996 60 0h30.794zm65.395-19.258H60L48.465 57.672 63.864 73.07"/><path fill="#0D47A1" d="M48.465 88.465 60 100h30.794l-26.93-26.93"/><path fill="#42A5F5" d="M33.103 73.079 48.477 57.7l15.375 15.375-15.375 15.378z"/><path fill="url(#a)" d="M48.477 88.453 63.852 73.08l2.146 2.146L50.623 90.6z"/><path fill="url(#b)" d="m48.465 88.465 22.848-7.893-7.449-7.506"/><defs><linearGradient id="a" x1="56.167" x2="58.314" y1="80.763" y2="82.909" gradientUnits="userSpaceOnUse"><stop offset=".2" stop-opacity=".15"/><stop offset=".85" stop-color="#616161" stop-opacity=".01"/></linearGradient><linearGradient id="b" x1="48.471" x2="71.318" y1="80.766" y2="80.766" gradientUnits="userSpaceOnUse"><stop offset=".2" stop-opacity=".55"/><stop offset=".85" stop-color="#616161" stop-opacity=".01"/></linearGradient></defs></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#E535AB" fill-rule="evenodd" d="M58.972 11.445 79.507 23.3a9 9 0 0 1 2.02-1.598c4.259-2.448 9.69-.995 12.164 3.264 2.449 4.259.995 9.69-3.264 12.165a9 9 0 0 1-2.372.944v23.721c.823.2 1.613.516 2.347.939 4.284 2.473 5.738 7.905 3.264 12.164-2.448 4.259-7.906 5.713-12.165 3.265a8.8 8.8 0 0 1-2.2-1.787L58.89 88.16a9 9 0 0 1 .449 2.805c0 4.897-3.978 8.9-8.9 8.9a8.89 8.89 0 0 1-8.9-8.9c0-.874.125-1.72.36-2.518L21.37 76.595a9 9 0 0 1-1.992 1.57c-4.284 2.448-9.716.994-12.164-3.265s-.995-9.69 3.264-12.165a9 9 0 0 1 2.346-.938V38.076a9 9 0 0 1-2.371-.944c-4.26-2.448-5.713-7.906-3.265-12.165s7.906-5.712 12.165-3.264a9 9 0 0 1 2.01 1.588l20.54-11.86a9 9 0 0 1-.363-2.53c0-4.922 3.978-8.9 8.9-8.9s8.9 3.978 8.9 8.9c0 .884-.129 1.738-.368 2.544m-2.14 3.653 20.585 11.884a8.9 8.9 0 0 0 .846 6.885 8.85 8.85 0 0 0 5.56 4.188v23.751q-.174.043-.345.092L56.594 15.336q.121-.117.239-.238m-12.54.243L17.408 61.902a9 9 0 0 0-.35-.093V38.055a8.85 8.85 0 0 0 5.559-4.188 8.9 8.9 0 0 0 .842-6.898l20.578-11.88q.124.128.255.252m8.635 2.11L79.804 64a8.9 8.9 0 0 0-2.505 4.345H23.58A9 9 0 0 0 22.643 66a9 9 0 0 0-1.565-1.987l26.883-46.56c.806.231 1.64.349 2.479.348.863 0 1.698-.122 2.487-.35m4.095 67.52 20.45-11.808a9 9 0 0 1-.164-.584H23.57q-.044.173-.092.345l20.55 11.865a8.87 8.87 0 0 1 6.412-2.723 8.88 8.88 0 0 1 6.582 2.904" clip-rule="evenodd"/></svg>
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
-
<path d="M12 2 4 6v6c0 5 3.5 8.5 8 10 4.5-1.5 8-5 8-10V6l-8-4Z"/>
|
|
3
|
-
<circle cx="12" cy="11" r="2.5" fill="currentColor" stroke="none"/>
|
|
4
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#5382A1" d="M36.753 77.336s-3.822 2.222 2.72 2.974c7.924.904 11.973.775 20.706-.878 0 0 2.296 1.44 5.502 2.686-19.576 8.39-44.304-.486-28.928-4.782M34.36 66.388s-4.286 3.172 2.26 3.85c8.464.873 15.149.944 26.716-1.283 0 0 1.6 1.622 4.116 2.509-23.668 6.92-50.03.546-33.092-5.076"/><path fill="#E76F00" d="M54.527 47.816c4.823 5.553-1.268 10.55-1.268 10.55s12.248-6.322 6.623-14.24c-5.253-7.383-9.282-11.052 12.528-23.7 0 0-34.234 8.55-17.883 27.39"/><path fill="#5382A1" d="M80.418 85.434s2.827 2.33-3.115 4.133c-11.3 3.423-47.03 4.457-56.956.136-3.568-1.552 3.124-3.706 5.228-4.158 2.195-.476 3.45-.387 3.45-.387-3.968-2.796-25.648 5.489-11.012 7.86 39.913 6.474 72.757-2.914 62.405-7.584M38.59 55.044s-18.174 4.317-6.436 5.884c4.956.664 14.837.514 24.04-.257 7.522-.634 15.075-1.984 15.075-1.984s-2.653 1.136-4.571 2.446c-18.457 4.854-54.11 2.596-43.846-2.369 8.68-4.196 15.738-3.72 15.738-3.72m32.603 18.224c18.762-9.75 10.088-19.118 4.033-17.856-1.484.309-2.146.577-2.146.577s.551-.863 1.603-1.237c11.978-4.211 21.19 12.42-3.867 19.008 0 0 .29-.26.377-.492"/><path fill="#E76F00" d="M59.882 0s10.39 10.395-9.855 26.378c-16.234 12.82-3.702 20.131-.006 28.483-9.477-8.55-16.432-16.076-11.766-23.081C45.103 21.496 64.075 16.51 59.882 0"/><path fill="#5382A1" d="M40.434 99.686c18.009 1.153 45.663-.64 46.318-9.16 0 0-1.259 3.23-14.883 5.795-15.371 2.893-34.329 2.555-45.573.701 0 0 2.302 1.905 14.138 2.664"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#F7DF1E" d="M100 0H0v100h100z"/><path fill="#000" d="M67.175 78.126c2.014 3.289 4.634 5.706 9.27 5.706 3.893 0 6.38-1.946 6.38-4.635 0-3.222-2.555-4.363-6.841-6.238l-2.35-1.008c-6.78-2.889-11.285-6.508-11.285-14.158 0-7.048 5.37-12.413 13.762-12.413 5.975 0 10.27 2.08 13.365 7.524l-7.317 4.698c-1.612-2.889-3.35-4.027-6.048-4.027-2.752 0-4.497 1.746-4.497 4.027 0 2.82 1.746 3.96 5.778 5.707l2.35 1.006c7.983 3.424 12.491 6.914 12.491 14.762 0 8.46-6.646 13.095-15.571 13.095-8.727 0-14.365-4.159-17.124-9.61zm-33.196.814c1.477 2.62 2.82 4.834 6.048 4.834 3.087 0 5.035-1.208 5.035-5.905V45.916h9.397v32.08c0 9.73-5.705 14.159-14.032 14.159-7.524 0-11.881-3.894-14.097-8.584z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="url(#a)" d="M100 100H0V0h100L48.965 49.276z"/><defs><radialGradient id="a" cx="0" cy="0" r="1" gradientTransform="translate(96.675 4.11)scale(114.549)" gradientUnits="userSpaceOnUse"><stop offset=".003" stop-color="#EF4857"/><stop offset=".469" stop-color="#D211EC"/><stop offset="1" stop-color="#7F52FF"/></radialGradient></defs></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#599636" d="m50.146.274 2.668 5.012c.6.925 1.25 1.743 2.016 2.506a70 70 0 0 1 6.262 7.08c4.521 5.938 7.57 12.53 9.749 19.661 1.306 4.356 2.015 8.825 2.069 13.343.218 13.509-4.413 25.108-13.75 34.748a40 40 0 0 1-4.905 4.193c-.925 0-1.363-.71-1.744-1.362a11.2 11.2 0 0 1-1.362-3.922c-.328-1.634-.544-3.268-.438-4.956v-.762c-.075-.163-.89-75.157-.566-75.541"/><path fill="#6CAC48" d="M50.146.108c-.11-.219-.22-.053-.329.053.053 1.094-.328 2.069-.925 3-.656.925-1.524 1.634-2.396 2.397-4.844 4.193-8.656 9.258-11.709 14.924-4.062 7.624-6.156 15.795-6.75 24.398-.271 3.103.982 14.052 1.96 17.21 2.669 8.388 7.462 15.415 13.67 21.515 1.526 1.469 3.157 2.831 4.844 4.14.49 0 .544-.437.656-.762q.324-1.045.491-2.125l1.094-8.168z"/><path fill="#C2BFBF" d="M52.814 90.136c.11-1.25.71-2.288 1.362-3.322-.656-.272-1.143-.812-1.524-1.415a10 10 0 0 1-.813-1.797c-.762-2.288-.925-4.687-1.143-7.025v-1.415c-.272.219-.329 2.069-.329 2.343a54 54 0 0 1-.98 7.353c-.163.981-.273 1.96-.876 2.831 0 .11 0 .219.053.381.981 2.888 1.25 5.828 1.416 8.825v1.093c0 1.306-.053 1.031 1.031 1.469.438.162.925.219 1.362.544.329 0 .382-.272.382-.491l-.163-1.797v-5.012c-.053-.875.11-1.743.219-2.562z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#8CC84B" d="M46.279 1.067c2.479-1.419 5.709-1.425 8.186 0C66.929 8.11 79.396 15.142 91.858 22.188c2.343 1.32 3.911 3.929 3.887 6.63v42.37c.018 2.813-1.705 5.484-4.178 6.774-12.422 7.004-24.838 14.016-37.259 21.02-2.53 1.447-5.825 1.336-8.277-.23-3.724-2.159-7.455-4.307-11.18-6.464-.76-.454-1.619-.815-2.156-1.553.475-.64 1.324-.72 2.015-1 1.554-.494 2.982-1.287 4.41-2.058.361-.247.802-.152 1.148.07 3.185 1.825 6.342 3.704 9.537 5.513.682.393 1.372-.13 1.955-.454 12.19-6.89 24.396-13.754 36.584-20.645a1.21 1.21 0 0 0 .664-1.192c.009-13.977.002-27.957.005-41.934a1.31 1.31 0 0 0-.781-1.307C75.852 20.756 63.479 13.774 51.102 6.8a1.29 1.29 0 0 0-1.458-.002c-12.378 6.976-24.749 13.965-37.126 20.936-.506.23-.845.738-.785 1.301q.002 20.967 0 41.936a1.19 1.19 0 0 0 .673 1.177c3.303 1.873 6.61 3.733 9.916 5.6 1.861 1.001 4.148 1.597 6.199.829 1.81-.65 3.08-2.497 3.045-4.419.017-13.895-.009-27.793.013-41.687-.046-.617.54-1.126 1.14-1.068 1.586-.011 3.175-.022 4.762.004.663-.015 1.119.65 1.037 1.27-.007 13.984.017 27.968-.01 41.952.003 3.727-1.528 7.782-4.975 9.605-4.247 2.2-9.496 1.734-13.691-.376-3.632-1.812-7.098-3.952-10.666-5.894C6.697 76.681 4.983 74 5 71.19V28.818c-.026-2.757 1.604-5.413 4.021-6.714Q27.651 11.588 46.28 1.067"/><path fill="#8CC84B" d="M57.114 30.418c5.417-.349 11.216-.207 16.091 2.462 3.774 2.045 5.867 6.337 5.933 10.53-.105.566-.696.878-1.236.839-1.572-.002-3.144.021-4.716-.01-.667.025-1.054-.59-1.138-1.18-.451-2.006-1.545-3.993-3.434-4.96-2.898-1.452-6.26-1.379-9.42-1.348-2.308.122-4.79.322-6.744 1.679-1.5 1.028-1.957 3.103-1.421 4.774.505 1.2 1.89 1.587 3.023 1.944 6.529 1.707 13.447 1.537 19.85 3.784 2.651.916 5.245 2.697 6.152 5.473 1.187 3.72.667 8.167-1.98 11.154-2.146 2.458-5.273 3.795-8.39 4.522-4.149.925-8.454.948-12.666.538-3.962-.452-8.084-1.493-11.142-4.192-2.614-2.27-3.892-5.808-3.765-9.222.03-.577.605-.979 1.157-.931 1.583-.013 3.165-.017 4.748.002.632-.046 1.101.5 1.133 1.097.292 1.911 1.01 3.917 2.678 5.05 3.216 2.076 7.253 1.934 10.936 1.992 3.052-.136 6.477-.176 8.967-2.193 1.314-1.15 1.703-3.075 1.348-4.731-.384-1.398-1.847-2.05-3.103-2.475-6.444-2.039-13.44-1.3-19.822-3.605-2.59-.915-5.096-2.647-6.092-5.309-1.389-3.767-.752-8.427 2.172-11.313 2.852-2.87 6.968-3.976 10.881-4.372"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="url(#a)" d="M49.64 0C24.254 0 25.839 11.01 25.839 11.01l.028 11.405h24.225v3.424H16.245S0 23.997 0 49.612s14.179 24.707 14.179 24.707h8.462V62.432s-.457-14.179 13.952-14.179H60.62s13.5.218 13.5-13.047V13.275S76.17 0 49.64 0M36.282 7.67a4.354 4.354 0 0 1 4.358 4.359 4.355 4.355 0 0 1-6.027 4.027 4.35 4.35 0 0 1-2.69-4.027 4.355 4.355 0 0 1 4.359-4.358"/><path fill="url(#b)" d="M50.36 99.48c25.387 0 23.802-11.008 23.802-11.008l-.028-11.406H49.908v-3.424h33.847S100 75.484 100 49.869 85.821 25.162 85.821 25.162H77.36V37.05s.457 14.178-13.952 14.178H39.38s-13.5-.218-13.5 13.048v21.932s-2.05 13.274 24.48 13.274m13.359-7.669a4.353 4.353 0 0 1-4.358-4.358 4.356 4.356 0 0 1 7.44-3.083 4.36 4.36 0 0 1 .945 4.751 4.355 4.355 0 0 1-4.027 2.69"/><defs><linearGradient id="a" x1="9.61" x2="59.167" y1="8.948" y2="58.011" gradientUnits="userSpaceOnUse"><stop stop-color="#387EB8"/><stop offset="1" stop-color="#366994"/></linearGradient><linearGradient id="b" x1="40.028" x2="93.247" y1="40.453" y2="90.762" gradientUnits="userSpaceOnUse"><stop stop-color="#FFE052"/><stop offset="1" stop-color="#FFC331"/></linearGradient></defs></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#61DAFB" d="M50.307 58.817a8.816 8.816 0 1 0 0-17.632 8.816 8.816 0 0 0 0 17.632"/><path stroke="#61DAFB" stroke-width="5" d="M50.307 68.063c26.126 0 47.306-8.087 47.306-18.062s-21.18-18.063-47.306-18.063C24.18 31.938 3 40.025 3 50.001s21.18 18.062 47.307 18.062Z"/><path stroke="#61DAFB" stroke-width="5" d="M34.664 59.032C47.727 81.658 65.321 95.957 73.96 90.969c8.64-4.988 5.053-27.373-8.01-50C52.885 18.343 35.291 4.044 26.652 9.032s-5.052 27.373 8.011 50Z"/><path stroke="#61DAFB" stroke-width="5" d="M34.664 40.97c-13.063 22.626-16.65 45.011-8.01 50 8.638 4.987 26.232-9.312 39.295-31.938 13.064-22.627 16.65-45.012 8.01-50-8.638-4.988-26.232 9.31-39.295 31.937Z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#61DAFB" d="M50.307 58.817a8.816 8.816 0 1 0 0-17.632 8.816 8.816 0 0 0 0 17.632"/><path stroke="#61DAFB" stroke-width="5" d="M50.307 68.063c26.126 0 47.306-8.087 47.306-18.062s-21.18-18.063-47.306-18.063C24.18 31.938 3 40.025 3 50.001s21.18 18.062 47.307 18.062Z"/><path stroke="#61DAFB" stroke-width="5" d="M34.664 59.032C47.727 81.658 65.321 95.957 73.96 90.969c8.64-4.988 5.053-27.373-8.01-50C52.885 18.343 35.291 4.044 26.652 9.032s-5.052 27.373 8.011 50Z"/><path stroke="#61DAFB" stroke-width="5" d="M34.664 40.97c-13.063 22.626-16.65 45.011-8.01 50 8.638 4.987 26.232-9.312 39.295-31.938 13.064-22.627 16.65-45.012 8.01-50-8.638-4.988-26.232 9.31-39.295 31.937Z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100.03"><path fill="#fff" d="m99.317 48.775-4.198-2.599a57 57 0 0 0-.12-1.222l3.608-3.366a1.44 1.44 0 0 0 .432-1.338 1.44 1.44 0 0 0-.91-1.072l-4.613-1.725a54 54 0 0 0-.36-1.19l2.876-3.996a1.444 1.444 0 0 0-.94-2.271l-4.864-.791q-.284-.553-.584-1.092l2.043-4.486a1.44 1.44 0 0 0-.112-1.402 1.44 1.44 0 0 0-1.252-.642l-4.935.172a39 39 0 0 0-.78-.946l1.134-4.807a1.444 1.444 0 0 0-1.738-1.74l-4.807 1.134a42 42 0 0 0-.947-.78l.172-4.935a1.44 1.44 0 0 0-1.327-1.492 1.44 1.44 0 0 0-.716.126l-4.484 2.045q-.543-.3-1.092-.586L70.01 4.91a1.446 1.446 0 0 0-2.27-.94l-4 2.877q-.59-.188-1.188-.36l-1.725-4.614a1.442 1.442 0 0 0-2.41-.48l-3.365 3.61a43 43 0 0 0-1.222-.119l-2.6-4.2a1.445 1.445 0 0 0-2.456 0l-2.599 4.2a43 43 0 0 0-1.224.12l-3.366-3.611a1.443 1.443 0 0 0-2.41.48l-1.724 4.613q-.599.173-1.19.36L32.266 3.97a1.44 1.44 0 0 0-1.977.275 1.45 1.45 0 0 0-.294.665l-.793 4.864q-.55.285-1.092.586l-4.485-2.045a1.44 1.44 0 0 0-1.401.114 1.44 1.44 0 0 0-.642 1.252l.172 4.935q-.48.384-.948.78L16 14.263a1.45 1.45 0 0 0-1.723 1.011 1.44 1.44 0 0 0-.016.728l1.132 4.807q-.394.468-.777.946l-4.936-.172a1.45 1.45 0 0 0-1.491 1.328c-.02.245.023.492.125.716l2.045 4.486q-.3.54-.586 1.092l-4.863.79a1.445 1.445 0 0 0-.94 2.272l2.877 3.996q-.189.591-.362 1.19l-4.612 1.725a1.446 1.446 0 0 0-.479 2.41l3.609 3.365q-.068.61-.12 1.223l-4.198 2.6a1.443 1.443 0 0 0 0 2.455l4.198 2.6q.053.613.12 1.222l-3.61 3.367a1.445 1.445 0 0 0 .479 2.41l4.612 1.725q.174.598.362 1.19L3.969 67.74a1.444 1.444 0 0 0 .941 2.27l4.862.792q.285.552.586 1.093L8.313 76.38a1.44 1.44 0 0 0 .656 1.886c.22.112.463.166.71.157l4.933-.172q.386.48.78.947l-1.132 4.809a1.44 1.44 0 0 0 .385 1.35 1.44 1.44 0 0 0 1.354.385l4.806-1.132q.47.397.948.777l-.171 4.937a1.444 1.444 0 0 0 2.042 1.364l4.485-2.043q.542.3 1.092.586l.793 4.86a1.44 1.44 0 0 0 1.593 1.205c.245-.028.478-.118.678-.262l3.996-2.879q.591.189 1.19.362l1.725 4.611a1.44 1.44 0 0 0 1.072.91 1.44 1.44 0 0 0 1.338-.431l3.366-3.609q.61.07 1.223.122l2.6 4.199a1.445 1.445 0 0 0 2.456 0l2.598-4.199q.615-.053 1.223-.122l3.366 3.609a1.44 1.44 0 0 0 1.337.432 1.44 1.44 0 0 0 1.072-.91l1.725-4.612q.599-.173 1.19-.362l3.997 2.88a1.445 1.445 0 0 0 2.27-.943l.793-4.861q.55-.287 1.092-.586l4.484 2.043a1.443 1.443 0 0 0 2.043-1.364l-.171-4.936q.48-.382.946-.778l4.807 1.132c.488.115 1-.028 1.353-.384a1.44 1.44 0 0 0 .385-1.351l-1.132-4.809q.396-.468.777-.947l4.936.172a1.44 1.44 0 0 0 1.252-.64 1.44 1.44 0 0 0 .113-1.404l-2.044-4.483q.3-.543.585-1.094l4.863-.791a1.44 1.44 0 0 0 1.102-.874 1.44 1.44 0 0 0-.162-1.397l-2.877-3.996q.187-.592.362-1.19l4.611-1.725a1.44 1.44 0 0 0 .91-1.072 1.44 1.44 0 0 0-.431-1.338l-3.608-3.366q.066-.61.12-1.222l4.198-2.6a1.44 1.44 0 0 0 .684-1.227c0-.5-.258-.966-.683-1.229M71.218 83.602a2.975 2.975 0 0 1-2.278-3.534 2.966 2.966 0 0 1 3.524-2.283 2.974 2.974 0 0 1 2.28 3.531 2.973 2.973 0 0 1-3.526 2.286m-1.426-9.648a2.71 2.71 0 0 0-3.215 2.082l-1.49 6.956A36.4 36.4 0 0 1 50 86.24a36.4 36.4 0 0 1-15.402-3.394l-1.49-6.956a2.706 2.706 0 0 0-3.214-2.082l-6.14 1.319a36 36 0 0 1-3.176-3.742h29.879c.338 0 .563-.062.563-.37V60.448c0-.308-.225-.37-.563-.37h-8.738V53.38h9.45c.863 0 4.614.246 5.813 5.04.375 1.474 1.2 6.269 1.764 7.804.561 1.722 2.848 5.162 5.286 5.162h14.889q.254-.001.54-.054a37 37 0 0 1-3.387 3.973zm-41.324 9.502a2.97 2.97 0 0 1-3.527-2.282 2.976 2.976 0 0 1 2.28-3.534 2.975 2.975 0 0 1 1.247 5.816m-11.335-45.96a2.975 2.975 0 0 1-1.51 3.923 2.967 2.967 0 0 1-3.919-1.513 2.975 2.975 0 0 1 2.642-4.178 2.97 2.97 0 0 1 2.787 1.767m-3.484 8.257 6.397-2.842a2.71 2.71 0 0 0 1.377-3.578l-1.317-2.979h5.18V59.71H14.834a36.6 36.6 0 0 1-1.393-10.028c0-1.327.072-2.64.21-3.928m28.071-2.268V36.6H54.06c.637 0 4.5.737 4.5 3.625 0 2.398-2.963 3.258-5.4 3.258H41.72m44.84 6.196q0 1.369-.1 2.714h-3.75c-.376 0-.527.247-.527.614v1.723c0 4.055-2.287 4.937-4.29 5.161-1.908.215-4.023-.798-4.284-1.966-1.126-6.33-3.001-7.682-5.963-10.019 3.676-2.334 7.5-5.777 7.5-10.386 0-4.977-3.412-8.112-5.737-9.649-3.263-2.15-6.875-2.582-7.85-2.582H22.765c5.26-5.871 12.39-10.03 20.454-11.543l4.573 4.797a2.703 2.703 0 0 0 3.828.088l5.116-4.894c10.72 1.996 19.798 8.67 25.028 17.825l-3.502 7.912a2.715 2.715 0 0 0 1.377 3.577l6.744 2.995q.177 1.795.178 3.633M47.795 9.667a2.97 2.97 0 0 1 4.198.096 2.977 2.977 0 0 1-.098 4.205 2.965 2.965 0 0 1-4.199-.097 2.977 2.977 0 0 1 .099-4.204m34.759 27.972a2.967 2.967 0 0 1 3.917-1.512 2.975 2.975 0 0 1-1.277 5.692 3 3 0 0 1-1.13-.255 2.98 2.98 0 0 1-1.51-3.925"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#000" d="M66.208 0 50.13 28.574H18L34.064 0z" opacity=".45"/><path fill="#000" d="M50.131 28.574h32.14L66.21 0H34.064z" opacity=".6"/><path fill="#000" d="m34.064 57.134 16.067-28.56L34.064 0 18 28.574z" opacity=".8"/><path fill="#000" d="m34.221 99.997 16.077-28.574H82.44L66.364 99.996z" opacity=".45"/><path fill="#000" d="M50.298 71.423h-32.14L34.22 99.996h32.143z" opacity=".6"/><path fill="#000" d="M66.364 42.86 50.297 71.423l16.067 28.573L82.44 71.423z" opacity=".8"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="url(#a)" d="M22.218 0h55.369c2.694 0 5.31.43 7.848 1.329a22.06 22.06 0 0 1 9.489 6.718 21.9 21.9 0 0 1 4.803 10.703c.234 1.446.273 2.891.273 4.336V77.11c0 1.719-.078 3.476-.43 5.156a22.1 22.1 0 0 1-5.27 10.43c-2.617 2.93-6.053 5.117-9.763 6.289-2.264.703-4.607 1.015-6.99 1.015-1.053 0-55.485 0-56.305-.039a22.3 22.3 0 0 1-11.246-3.71 22.6 22.6 0 0 1-7.614-8.75C.898 84.493.156 81.133.156 77.774V22.227a20.74 20.74 0 0 1 2.07-9.57C3.905 9.14 6.52 6.055 9.762 3.867 13.08 1.603 16.986.275 20.968.08c.39-.079.82-.079 1.25-.079"/><path fill="url(#b)" d="M84.342 81.797a15 15 0 0 0-1.171-1.601 16.6 16.6 0 0 0-3.359-3.047c-1.561-1.055-3.397-1.719-5.27-1.797-1.329-.078-2.656.156-3.906.625-1.25.43-2.46 1.055-3.631 1.68-1.367.703-2.733 1.406-4.178 1.992a31.4 31.4 0 0 1-5.35 1.64c-2.303.43-4.646.587-6.95.547a47 47 0 0 1-12.339-1.875 46.7 46.7 0 0 1-10.035-4.335 52 52 0 0 1-7.77-5.508 57 57 0 0 1-5.545-5.508 60 60 0 0 1-3.358-4.297c-.43-.586-.82-1.211-1.171-1.836L0 47.344V22.15C0 9.922 9.879 0 22.1 0h19.72l14.603 14.844C89.38 37.266 78.72 61.993 78.72 61.993s9.372 10.547 5.623 19.804"/><path fill="#fff" d="M56.501 14.844c32.956 22.422 22.296 47.149 22.296 47.149s9.371 10.586 5.584 19.843c0 0-3.866-6.484-10.348-6.484-6.247 0-9.918 6.484-22.49 6.484-27.997 0-41.234-23.398-41.234-23.398 25.224 16.602 42.444 4.844 42.444 4.844C41.39 56.68 17.22 25.118 17.22 25.118c21.046 17.93 30.144 22.656 30.144 22.656-5.427-4.492-20.656-26.445-20.656-26.445C38.891 33.672 63.1 50.899 63.1 50.899c6.872-19.063-6.599-36.055-6.599-36.055"/><defs><linearGradient id="a" x1="59.465" x2="40.565" y1="-3.568" y2="103.578" gradientUnits="userSpaceOnUse"><stop stop-color="#FAAE42"/><stop offset="1" stop-color="#EF3E31"/></linearGradient><linearGradient id="b" x1="51" x2="37.167" y1="1.616" y2="80.035" gradientUnits="userSpaceOnUse"><stop stop-color="#E39F3A"/><stop offset="1" stop-color="#D33929"/></linearGradient></defs></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" viewBox="1.78 0 60.42 64.03"><path fill="#f6bd3a" fill-rule="nonzero" d="m27.733 34.453 8.64-5.013 8.533 5.013-8.533 4.907-8.64-4.8zM1.813 19.627 36.373 0 62.08 14.613 53.547 29.44l-17.173-9.813-25.92 14.72z"/><path fill="#eb8c23" fill-rule="nonzero" d="M27.733 54.08v-9.813l8.533-4.907 8.64-4.907v9.813l-8.533 4.907v9.813L27.733 64zm0-19.627-8.64-4.907-8.64 4.8v-9.813l25.92-14.72V29.44zm25.707-9.92v-4.907l8.64-5.013.107 9.813-8.64 5.013z"/><path fill="#e35a2b" fill-rule="nonzero" d="M19.093 58.773V29.547l8.533-4.8.107 9.707 8.64 4.8v9.92l-8.64-4.587V64zM6.08 31.787l-4.267-2.56v-9.6l8.64 4.907v9.813zm30.293-12.16V9.813l17.067 9.813.107 9.813-17.173-9.813z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 100 100"><path fill="#017ACB" d="M0 0h100v100H0z"/><path fill="#fff" d="M48.016 37.032h4.797v8.281h-12.97v36.844l-.343.094c-.469.124-6.64.124-7.969-.016l-1.062-.094V45.313H17.5v-8.281l4.11-.047c2.25-.031 8.03-.031 12.843 0s10.906.047 13.563.047m36.61 41.219c-1.907 2.015-3.954 3.14-7.36 4.062-1.485.406-1.735.422-5.078.406s-3.61-.015-5.235-.437c-4.203-1.078-7.594-3.188-9.906-6.172-.656-.844-1.734-2.594-1.734-2.813 0-.062.156-.203.359-.296.203-.094.625-.36.969-.563s.968-.578 1.39-.797 1.64-.937 2.703-1.578c1.063-.64 2.032-1.156 2.141-1.156.11 0 .313.219.469.484.937 1.578 3.125 3.594 4.672 4.281.953.407 3.062.86 4.078.86.937 0 2.656-.406 3.578-.828.984-.453 1.484-.907 2.078-1.813.406-.64.453-.812.438-2.031 0-1.125-.063-1.438-.375-1.953-.875-1.438-2.063-2.188-6.875-4.313-4.97-2.203-7.204-3.515-9.016-5.281-1.344-1.312-1.61-1.672-2.453-3.312-1.094-2.11-1.235-2.797-1.25-5.938-.016-2.203.031-2.922.265-3.672.329-1.125 1.391-3.297 1.875-3.844 1-1.171 1.36-1.53 2.063-2.109 2.125-1.75 5.438-2.906 8.61-3.016.359 0 1.546.063 2.656.141 3.187.266 5.359 1.047 7.453 2.719 1.578 1.25 3.968 4.187 3.734 4.578-.156.234-6.39 4.39-6.797 4.516-.25.078-.422-.016-.765-.422-2.125-2.547-2.985-3.094-5.047-3.22-1.469-.093-2.25.079-3.235.735-1.03.688-1.53 1.735-1.53 3.188.015 2.125.827 3.125 3.827 4.61 1.938.952 3.594 1.733 3.719 1.733.188 0 4.203 2 5.25 2.626 4.875 2.859 6.86 5.796 7.375 10.859.375 3.812-.703 7.297-3.047 9.766"/></svg>
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v6.4.5"><meta name="theme-color" content="#0a0a0c" media="(prefers-color-scheme: dark)"><meta name="theme-color" content="#fafafa" media="(prefers-color-scheme: light)"><link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect width='16' height='16' rx='3' fill='%2318181b'/%3E%3C/svg%3E"><link rel="sitemap" href="/sitemap.xml"><link rel="alternate" type="text/plain" href="/llms.txt" title="LLM usage guidance"><!-- Primary meta --><title>Grove Directory — A curated, health-aware developer directory.</title><meta name="description" content="A curated, health-aware developer directory powered by Grove."><link rel="canonical" href="https://example.com/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://example.com/"><meta property="og:title" content="Grove Directory — A curated, health-aware developer directory."><meta property="og:description" content="A curated, health-aware developer directory powered by Grove."><meta property="og:image" content="https://example.com/og-image.svg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="Grove Directory — A curated, health-aware developer directory powered by Grove."><meta property="og:site_name" content="Grove Directory"><meta property="og:locale" content="en"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Grove Directory — A curated, health-aware developer directory."><meta name="twitter:description" content="A curated, health-aware developer directory powered by Grove."><meta name="twitter:image" content="https://example.com/og-image.svg"><meta name="twitter:image:alt" content="Grove Directory — A curated, health-aware developer directory powered by Grove."><!-- JSON-LD: site-wide identity --><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Grove Directory","description":"A curated, health-aware developer directory powered by Grove.","url":"https://example.com","inLanguage":"en","potentialAction":{"@type":"SearchAction","target":"https://example.com/projects?q={search_term_string}","query-input":"required name=search_term_string"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Grove Directory","url":"https://example.com","logo":"https://example.com/og-image.svg","sameAs":["https://github.com/tortuvshin/grove"]}</script><!-- JSON-LD: per-page (SoftwareSourceCode for [slug], etc.) --><script>
|
|
2
|
-
// THEME_INIT — runs before paint so the user never sees a
|
|
3
|
-
// flash of the wrong theme. State is persisted in localStorage
|
|
4
|
-
// under the key "grove-theme" (matching ThemeToggle.astro).
|
|
5
|
-
(function () {
|
|
6
|
-
var STORAGE_KEY = "grove-theme";
|
|
7
|
-
function getMode() {
|
|
8
|
-
try {
|
|
9
|
-
var stored = localStorage.getItem(STORAGE_KEY);
|
|
10
|
-
if (stored === "light" || stored === "dark" || stored === "system")
|
|
11
|
-
return stored;
|
|
12
|
-
} catch (e) {
|
|
13
|
-
// localStorage may be blocked (private mode, etc.) —
|
|
14
|
-
// fall through to the system default.
|
|
15
|
-
}
|
|
16
|
-
return "system";
|
|
17
|
-
}
|
|
18
|
-
function apply(mode) {
|
|
19
|
-
var resolved =
|
|
20
|
-
mode === "system"
|
|
21
|
-
? (window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
22
|
-
? "dark"
|
|
23
|
-
: "light")
|
|
24
|
-
: mode;
|
|
25
|
-
var root = document.documentElement;
|
|
26
|
-
if (resolved === "dark") root.classList.add("dark");
|
|
27
|
-
else root.classList.remove("dark");
|
|
28
|
-
root.dataset.theme = mode;
|
|
29
|
-
root.dataset.resolvedTheme = resolved;
|
|
30
|
-
}
|
|
31
|
-
apply(getMode());
|
|
32
|
-
window.addEventListener("theme:set", function (e) {
|
|
33
|
-
apply(e.detail);
|
|
34
|
-
});
|
|
35
|
-
var mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
36
|
-
mq.addEventListener("change", function () {
|
|
37
|
-
if (getMode() === "system") apply("system");
|
|
38
|
-
});
|
|
39
|
-
})();
|
|
40
|
-
</script><link rel="stylesheet" href="/_astro/BaseLayout.Dz_HR-68.css">
|
|
41
|
-
<style>.grove-hero__gradient[data-astro-cid-qbosetkn]{background:linear-gradient(120deg,#1f6feb14,#6ee7b70f 35%,#fdba740f 65%,#93c5fd14);background-size:200% 200%;animation:var(--animate-gradient-shift, gradient-shift 8s ease-in-out infinite)}.dark .grove-hero__gradient[data-astro-cid-qbosetkn]{background:linear-gradient(120deg,#1f6feb2e,#065f461f 35%,#4314071f 65%,#1e40af2e);background-size:200% 200%}.grove-item-card[data-astro-cid-c5cxvqkr]{display:flex;flex-direction:column;gap:.25rem;height:100%}.line-clamp-2[data-astro-cid-c5cxvqkr],.line-clamp-2[data-astro-cid-wy3j7qop],.line-clamp-2[data-astro-cid-tsjw7eqr]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-1[data-astro-cid-ytjnxdza]{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
|
|
42
|
-
</style></head> <body class="min-h-screen bg-white text-ink-900 dark:bg-ink-950 dark:text-ink-100"> <header class="sticky top-0 z-50 border-b border-ink-200 bg-white/85 backdrop-blur dark:border-ink-800 dark:bg-ink-950/85"> <div class="mx-auto flex max-w-wide items-center gap-6 px-5 py-3 sm:px-7" style="max-width: var(--container-wide, 1400px);"> <a href="/" class="inline-flex items-center gap-2 text-[0.95rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> <span aria-hidden="true" class="inline-block h-[18px] w-[18px] rounded bg-ink-900 dark:bg-ink-100"></span> <span>Grove Directory</span> </a> <nav class="hidden flex-1 md:block" aria-label="Primary"> <ul class="m-0 flex list-none gap-5 p-0"> <li> <a href="/" class="text-[0.875rem] font-medium text-ink-500 transition-colors hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> Home </a> </li><li> <a href="/projects" class="text-[0.875rem] font-medium text-ink-500 transition-colors hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> Browse </a> </li><li> <a href="/about" class="text-[0.875rem] font-medium text-ink-500 transition-colors hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> About </a> </li> </ul> </nav> <div class="ml-auto flex items-center gap-2"> <a href="/submit" class="grove-btn grove-btn-outline"> <svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true" fill="currentColor"> <path d="M7.75 2a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 7.75 2Z"></path> </svg> <span>Submit project</span> </a> <a href="https://github.com/tortuvshin/grove" target="_blank" rel="noopener noreferrer" aria-label="Star" title="Star" class="grove-btn grove-btn-outline"> <svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true" fill="currentColor"> <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38v-1.33c-2.22.48-2.69-1.07-2.69-1.07-.36-.92-.89-1.17-.89-1.17-.73-.5.05-.49.05-.49.8.06 1.23.83 1.23.83.72 1.22 1.87.87 2.33.67.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48v2.19c0 .21.15.46.55.38A8 8 0 0 0 8 0Z"></path> </svg> <span>Star</span> </a> <button type="button" data-theme-toggle aria-label="Toggle theme" title="Toggle theme" class="relative inline-flex h-8 w-8 items-center justify-center rounded-md border border-ink-200 bg-white text-ink-700 transition-colors hover:border-ink-300 hover:bg-ink-50 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-200 dark:hover:border-ink-700 dark:hover:bg-ink-900/40"> <svg class="hidden h-4 w-4 dark:block" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <circle cx="12" cy="12" r="4"></circle> <path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"></path> </svg> <svg class="block h-4 w-4 dark:hidden" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z"></path> </svg> </button> <script type="module">const c="grove-theme";function o(){try{const e=localStorage.getItem(c);return e==="light"||e==="dark"||e==="system"?e:"system"}catch{return"system"}}function s(){const e=["light","dark","system"],n=o(),r=e[(e.indexOf(n)+1)%e.length];try{localStorage.setItem(c,r)}catch{}return window.dispatchEvent(new CustomEvent("theme:set",{detail:r})),r}function t(e){e.title=`Theme: ${o()} (click to switch)`}document.querySelectorAll("[data-theme-toggle]").forEach(e=>{t(e),e.addEventListener("click",()=>{s(),t(e)}),e.addEventListener("mouseenter",()=>t(e)),e.addEventListener("focus",()=>t(e))});</script> </div> </div> </header> <script type="module">document.addEventListener("click",t=>{if(t.defaultPrevented||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.button!==0)return;const r=t.target.closest('a[href^="#"]');if(!r)return;const e=r.getAttribute("href");if(e.length<=1)return;const n=document.querySelector(e);n&&(t.preventDefault(),n.scrollIntoView({behavior:"smooth",block:"start"}),history.replaceState(null,"",e))});</script> <main> <section class="grove-hero relative overflow-hidden border-b border-ink-200 dark:border-ink-800" aria-labelledby="grove-hero-heading" data-astro-cid-qbosetkn> <div aria-hidden="true" class="grove-hero__gradient pointer-events-none absolute inset-0 -z-10" data-astro-cid-qbosetkn></div> <div class="grove-container-wide mx-auto px-5 py-16 sm:px-7 sm:py-20" data-astro-cid-qbosetkn> <div class="max-w-3xl" data-astro-cid-qbosetkn> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400" data-astro-cid-qbosetkn> Curated directory </span> <h1 id="grove-hero-heading" class="m-0 mt-2 text-[2.25rem] font-semibold leading-[1.05] tracking-tight text-ink-900 sm:text-[3rem] dark:text-ink-100" data-astro-cid-qbosetkn> Grove Directory </h1> <p class="m-0 mt-4 max-w-2xl text-lg leading-relaxed text-ink-700 dark:text-ink-200" data-astro-cid-qbosetkn> A curated, health-aware developer directory. </p> <p class="m-0 mt-2 max-w-2xl text-[0.9375rem] leading-relaxed text-ink-500 dark:text-ink-400" data-astro-cid-qbosetkn> A curated, health-aware developer directory powered by Grove. </p> <form class="mt-8 flex flex-col gap-2 sm:flex-row sm:items-center" role="search" action="/projects" method="get" data-grove-hero-search data-astro-cid-qbosetkn> <label class="relative flex-1" data-astro-cid-qbosetkn> <span class="sr-only" data-astro-cid-qbosetkn>Search</span> <svg aria-hidden="true" viewBox="0 0 16 16" width="14" height="14" class="pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-ink-400" fill="currentColor" data-astro-cid-qbosetkn> <path d="M10.68 11.74a6 6 0 1 1 1.06-1.06l3.04 3.04a.75.75 0 1 1-1.06 1.06l-3.04-3.04ZM11.5 7a4.5 4.5 0 1 0-9 0 4.5 4.5 0 0 0 9 0Z" data-astro-cid-qbosetkn></path> </svg> <input type="search" name="q" placeholder="Search projects..." autocomplete="off" class="w-full rounded-md border border-ink-200 bg-white py-2.5 pl-9 pr-3 text-sm placeholder:text-ink-400 focus:border-ink-900 focus:outline-none focus:ring-2 focus:ring-ink-900/10 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-100" data-astro-cid-qbosetkn> </label> <button type="submit" class="grove-btn grove-btn-primary" data-astro-cid-qbosetkn>
|
|
43
|
-
Search
|
|
44
|
-
</button> </form> <div class="mt-4 flex flex-wrap items-center gap-2" data-astro-cid-qbosetkn> <a href="/projects" class="grove-btn grove-btn-primary" data-event="hero_cta_click" data-event-source="hero" data-astro-cid-qbosetkn> Browse projects </a><a href="/about" class="grove-btn grove-btn-outline" data-event="hero_cta_click" data-event-source="hero" data-astro-cid-qbosetkn> About </a> </div> <dl class="mt-10 flex flex-wrap items-center gap-x-6 gap-y-3 text-2xs text-ink-500 dark:text-ink-400" aria-label="Directory statistics" data-astro-cid-qbosetkn> <div class="flex items-baseline gap-1.5" data-astro-cid-qbosetkn> <dd class="m-0 font-mono text-base font-semibold text-ink-900 dark:text-ink-100" data-astro-cid-qbosetkn> 0 </dd> <dt data-astro-cid-qbosetkn>apps</dt> </div> <div class="flex items-baseline gap-1.5" data-astro-cid-qbosetkn> <dd class="m-0 font-mono text-base font-semibold text-ink-900 dark:text-ink-100" data-astro-cid-qbosetkn> 0 </dd> <dt data-astro-cid-qbosetkn>categories</dt> </div> <div class="flex items-baseline gap-1.5" data-astro-cid-qbosetkn> <dd class="m-0 font-mono text-base font-semibold text-ink-900 dark:text-ink-100" data-astro-cid-qbosetkn> 0 </dd> <dt data-astro-cid-qbosetkn>stacks</dt> </div> </dl> </div> </div> </section> <section class="grove-section" aria-labelledby="grove-why-heading"> <div class="grove-container mx-auto px-5 sm:px-7"> <header class="mb-8 flex flex-col items-center gap-2 text-center"> <h2 id="grove-why-heading" class="m-0 text-[1.5rem] sm:text-[1.625rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> Why this directory exists </h2> <p class="m-0 max-w-2xl text-[0.9375rem] text-ink-500 dark:text-ink-400"> A short note on the point of all this. </p> </header> <ol class="m-0 grid list-none grid-cols-1 gap-6 p-0 md:grid-cols-3" aria-label="Why this directory"> <li class="flex flex-col items-center gap-2 text-center"> <span aria-hidden="true" class="inline-flex h-10 w-10 items-center justify-center rounded-full border border-ink-200 bg-white text-ink-700 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-200"> <svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor"> <path d="M1.75 3.5a.25.25 0 0 1 .25-.25h12a.25.25 0 0 1 .25.25v8a.25.25 0 0 1-.25.25h-12a.25.25 0 0 1-.25-.25v-8ZM2 4.75v6h12v-6H2ZM2.5 6.5h4v2.5h-4V6.5Z"></path> </svg> </span> <span aria-hidden="true" class="font-mono text-2xs text-ink-400 dark:text-ink-500">
|
|
45
|
-
01 </span> <h3 class="m-0 text-base font-semibold tracking-tight text-ink-900 dark:text-ink-100"> A curated starting point </h3> <p class="m-0 max-w-xs text-[0.875rem] leading-relaxed text-ink-500 dark:text-ink-400"> Skip the rabbit holes. Every entry here is something a real developer reached for, vetted for quality and longevity. </p> </li><li class="flex flex-col items-center gap-2 text-center"> <span aria-hidden="true" class="inline-flex h-10 w-10 items-center justify-center rounded-full border border-ink-200 bg-white text-ink-700 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-200"> <svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor"> <path d="M4.72 3.22a.75.75 0 0 1 1.06 1.06L2.06 8l3.72 3.72a.75.75 0 1 1-1.06 1.06L.47 8.53a.75.75 0 0 1 0-1.06l4.25-4.25Zm6.56 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L13.94 8l-3.72-3.72a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span aria-hidden="true" class="font-mono text-2xs text-ink-400 dark:text-ink-500">
|
|
46
|
-
02 </span> <h3 class="m-0 text-base font-semibold tracking-tight text-ink-900 dark:text-ink-100"> Real, runnable source </h3> <p class="m-0 max-w-xs text-[0.875rem] leading-relaxed text-ink-500 dark:text-ink-400"> Every project links back to its source. Skim, fork, learn — no paywalls, no broken download links. </p> </li><li class="flex flex-col items-center gap-2 text-center"> <span aria-hidden="true" class="inline-flex h-10 w-10 items-center justify-center rounded-full border border-ink-200 bg-white text-ink-700 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-200"> <svg viewBox="0 0 16 16" width="16" height="16" fill="currentColor"> <path d="M10.68 11.74a6 6 0 1 1 1.06-1.06l3.04 3.04a.75.75 0 1 1-1.06 1.06l-3.04-3.04ZM11.5 7a4.5 4.5 0 1 0-9 0 4.5 4.5 0 0 0 9 0Z"></path> </svg> </span> <span aria-hidden="true" class="font-mono text-2xs text-ink-400 dark:text-ink-500">
|
|
47
|
-
03 </span> <h3 class="m-0 text-base font-semibold tracking-tight text-ink-900 dark:text-ink-100"> Search that respects you </h3> <p class="m-0 max-w-xs text-[0.875rem] leading-relaxed text-ink-500 dark:text-ink-400"> Filter by stack, platform, license, or status. No SEO spam, no affiliate farms. The directory is the product. </p> </li> </ol> </div> </section> <section id="hot" class="grove-section" aria-labelledby="hot-heading"> <div class="grove-container-wide mx-auto px-5 sm:px-7"> <header class="mb-6 flex flex-col gap-2"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400"> Hot </span> <div class="flex flex-wrap items-end justify-between gap-3"> <h2 class="m-0 text-[1.5rem] sm:text-[1.625rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100">Trending</h2> <a href="/projects?lens=hot" class="text-sm font-medium text-ink-500 hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> View all →
|
|
48
|
-
</a> </div> <p class="m-0 text-[0.9375rem] leading-relaxed text-ink-500 dark:text-ink-400 max-w-[56ch]"> The projects getting attention right now — high-star repos and recently active codebases. </p> </header> <p class="m-0 text-sm text-ink-500 dark:text-ink-400">No trending projects yet.</p> </div> </section> <section id="new" class="grove-section" aria-labelledby="new-heading"> <div class="grove-container-wide mx-auto px-5 sm:px-7"> <header class="mb-6 flex flex-col gap-2"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400"> New </span> <div class="flex flex-wrap items-end justify-between gap-3"> <h2 class="m-0 text-[1.5rem] sm:text-[1.625rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100">Recently added</h2> <a href="/projects?lens=new" class="text-sm font-medium text-ink-500 hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> View all →
|
|
49
|
-
</a> </div> <p class="m-0 text-[0.9375rem] leading-relaxed text-ink-500 dark:text-ink-400 max-w-[56ch]"> Fresh entries — pushed within the last week or carrying the curated 'new' label. </p> </header> <p class="m-0 text-sm text-ink-500 dark:text-ink-400">No new projects yet.</p> </div> </section> <section id="mature" class="grove-section" aria-labelledby="mature-heading"> <div class="grove-container-wide mx-auto px-5 sm:px-7"> <header class="mb-6 flex flex-col gap-2"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400"> Mature </span> <div class="flex flex-wrap items-end justify-between gap-3"> <h2 class="m-0 text-[1.5rem] sm:text-[1.625rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100">Established</h2> <a href="/projects?lens=mature" class="text-sm font-medium text-ink-500 hover:text-ink-900 dark:text-ink-400 dark:hover:text-ink-100"> View all →
|
|
50
|
-
</a> </div> <p class="m-0 text-[0.9375rem] leading-relaxed text-ink-500 dark:text-ink-400 max-w-[56ch]"> Long-running curated projects with deep history and stable architecture. </p> </header> <p class="m-0 text-sm text-ink-500 dark:text-ink-400">No established projects yet.</p> </div> </section> <section class="grove-section"> <div class="grove-container mx-auto px-5 sm:px-7"> <div class="grove-card flex flex-col gap-4 p-6 sm:flex-row sm:items-center sm:justify-between"> <div class="flex flex-col gap-2"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400">
|
|
51
|
-
Origin
|
|
52
|
-
</span> <h2 class="m-0 text-[1.25rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100"> A growing list, forked from the original </h2> <p class="m-0 max-w-2xl text-[0.875rem] text-ink-500 dark:text-ink-400"> This directory descends from an earlier curated collection. The original still lives on — same shape, same spirit, fresh data. </p> </div> <div class="flex flex-shrink-0 items-center gap-2"> <a href="https://github.com/example/repo" target="_blank" rel="noopener noreferrer" class="grove-btn grove-btn-primary" data-event="original_collection_click" data-event-source="original_collection"> View on GitHub →
|
|
53
|
-
</a> </div> </div> </div> </section> </main> <footer class="mt-16 border-t border-ink-200 bg-white text-ink-500 dark:border-ink-800 dark:bg-ink-950 dark:text-ink-400"> <div class="mx-auto grid max-w-wide grid-cols-2 gap-8 px-5 py-12 md:grid-cols-4 sm:px-7" style="max-width: var(--container-wide, 1400px);"> <div class="col-span-2 md:col-span-1"> <div class="mb-2 inline-flex items-center gap-2 text-[0.95rem] font-semibold text-ink-900 dark:text-ink-100"> <span aria-hidden="true" class="inline-block h-3.5 w-3.5 rounded bg-ink-900 dark:bg-ink-100"></span> <span>Grove Directory</span> </div> <p class="m-0 max-w-[36ch] text-[0.8125rem] leading-relaxed text-ink-500 dark:text-ink-400"> A curated, health-aware developer directory. </p> </div> <div> <h4 class="mb-3 text-2xs font-semibold uppercase tracking-wider text-ink-900 dark:text-ink-100"> Discover </h4> <ul class="m-0 flex list-none flex-col gap-2 p-0"> <li> <a href="https://github.com/tortuvshin/grove" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Source on GitHub </a> </li><li> <a href="https://github.com/tortuvshin/grove/releases" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Latest release </a> </li> </ul> </div> <div> <h4 class="mb-3 text-2xs font-semibold uppercase tracking-wider text-ink-900 dark:text-ink-100"> Contribute </h4> <ul class="m-0 flex list-none flex-col gap-2 p-0"> <li> <a href="https://github.com/tortuvshin/grove/blob/main/CONTRIBUTING.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Submit via GitHub </a> </li><li> <a href="https://github.com/tortuvshin/grove/issues" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Report an issue </a> </li><li> <a href="https://github.com/tortuvshin/grove/blob/main/CONTRIBUTING.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Contributing guide </a> </li> </ul> </div> <div> <h4 class="mb-3 text-2xs font-semibold uppercase tracking-wider text-ink-900 dark:text-ink-100"> Project </h4> <ul class="m-0 flex list-none flex-col gap-2 p-0"> <li> <a href="https://github.com/tortuvshin/grove/blob/main/README.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> README </a> </li><li> <a href="https://github.com/tortuvshin/grove/blob/main/CHANGELOG.md" class="text-sm transition-colors hover:text-ink-900 dark:hover:text-ink-100" target="_blank" rel="noopener noreferrer"> Changelog </a> </li> </ul> </div> </div> <div class="border-t border-ink-200 dark:border-ink-800"> <div class="mx-auto flex max-w-wide flex-wrap items-center gap-3 px-5 py-4 text-2xs text-ink-500 sm:px-7 dark:text-ink-400" style="max-width: var(--container-wide, 1400px);"> <span>© 2026 Grove Directory.</span> <span class="text-ink-300 dark:text-ink-700">·</span> <a href="https://github.com/tortuvshin/grove" target="_blank" rel="noopener noreferrer" class="transition-colors hover:text-ink-900 dark:hover:text-ink-100">
|
|
54
|
-
View source on GitHub
|
|
55
|
-
</a> </div> </div> </footer> </body> </html>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Grove Directory — full directory
|
|
2
|
-
|
|
3
|
-
> Generated 2026-06-10T15:03:23.841Z from 0 records.
|
|
4
|
-
> Source: https://example.com/projects · Regenerate with `grove generate`.
|
|
5
|
-
|
|
6
|
-
Each section below mirrors one record detail page.
|
|
7
|
-
|
|
8
|
-
## Index
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|