@grove-dev/astro 0.2.10 → 0.2.13
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/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 +11 -22
- package/dist/lib/repo.d.ts.map +1 -1
- package/dist/lib/repo.js +12 -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 +47 -129
- package/dist/lib/search.d.ts.map +1 -1
- package/dist/lib/search.js +195 -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/AppsIndexRow.astro +55 -184
- package/src/components/AppsPagination.astro +45 -108
- 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/ItemCard.astro +266 -248
- package/src/components/RecordSection.astro +68 -33
- 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 +16 -28
- package/src/lib/scores.ts +15 -19
- package/src/lib/search.ts +222 -290
- package/src/lib/taxonomy-counts.ts +12 -46
- package/src/styles.css +207 -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 +134 -51
- package/templates/default/src/pages/404.astro +64 -0
- package/templates/default/src/pages/{projects/[slug].astro → [slug]/[itemSlug].astro} +236 -66
- package/templates/default/src/pages/[slug]/index.astro +476 -0
- package/templates/default/src/pages/about.astro +165 -82
- package/templates/default/src/pages/apps/[itemSlug].astro +301 -0
- package/templates/default/src/pages/apps/index.astro +146 -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/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,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
|
-
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Grove Directory
|
|
2
|
-
|
|
3
|
-
A curated, health-aware developer directory powered by Grove.
|
|
4
|
-
|
|
5
|
-
Directory: https://example.com/projects
|
|
6
|
-
Records indexed: 0
|
|
7
|
-
Categories: 0
|
|
8
|
-
|
|
9
|
-
## Usage
|
|
10
|
-
|
|
11
|
-
Use /llms-full.txt for record-level details. Prefer detail pages for citations.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" width="1200" height="630">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#0a0a0c"/>
|
|
5
|
-
<stop offset="100%" stop-color="#18181b"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="accent" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
-
<stop offset="0%" stop-color="#1f6feb"/>
|
|
9
|
-
<stop offset="100%" stop-color="#6ee7b7"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
<radialGradient id="glow1" cx="0.15" cy="0.2" r="0.5">
|
|
12
|
-
<stop offset="0%" stop-color="#1f6feb" stop-opacity="0.25"/>
|
|
13
|
-
<stop offset="100%" stop-color="#1f6feb" stop-opacity="0"/>
|
|
14
|
-
</radialGradient>
|
|
15
|
-
<radialGradient id="glow2" cx="0.85" cy="0.9" r="0.5">
|
|
16
|
-
<stop offset="0%" stop-color="#fb923c" stop-opacity="0.18"/>
|
|
17
|
-
<stop offset="100%" stop-color="#fb923c" stop-opacity="0"/>
|
|
18
|
-
</radialGradient>
|
|
19
|
-
</defs>
|
|
20
|
-
<rect width="1200" height="630" fill="url(#bg)"/>
|
|
21
|
-
<rect width="1200" height="630" fill="url(#glow1)"/>
|
|
22
|
-
<rect width="1200" height="630" fill="url(#glow2)"/>
|
|
23
|
-
<g transform="translate(96,96)">
|
|
24
|
-
<rect width="48" height="48" rx="9" fill="#fafafa"/>
|
|
25
|
-
</g>
|
|
26
|
-
<g transform="translate(96,260)">
|
|
27
|
-
<text x="0" y="0" font-family="ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif" font-size="84" font-weight="700" fill="#fafafa" letter-spacing="-2.5">
|
|
28
|
-
Open Curated
|
|
29
|
-
</text>
|
|
30
|
-
<text x="0" y="84" font-family="ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif" font-size="32" font-weight="400" fill="#a1a1aa">
|
|
31
|
-
A directory of real open-source projects
|
|
32
|
-
</text>
|
|
33
|
-
<text x="0" y="132" font-family="ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif" font-size="32" font-weight="400" fill="#a1a1aa">
|
|
34
|
-
you can run, study, and contribute to.
|
|
35
|
-
</text>
|
|
36
|
-
</g>
|
|
37
|
-
<g transform="translate(96,520)">
|
|
38
|
-
<rect x="0" y="0" width="200" height="56" rx="10" fill="none" stroke="#3f3f46" stroke-width="1.5"/>
|
|
39
|
-
<text x="100" y="36" text-anchor="middle" font-family="ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace" font-size="22" font-weight="500" fill="#d4d4d8">
|
|
40
|
-
open-curated.dev
|
|
41
|
-
</text>
|
|
42
|
-
</g>
|
|
43
|
-
<g transform="translate(820,520)">
|
|
44
|
-
<text x="0" y="36" font-family="ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace" font-size="22" font-weight="500" fill="url(#accent)">
|
|
45
|
-
79 apps · 4.3k stars
|
|
46
|
-
</text>
|
|
47
|
-
</g>
|
|
48
|
-
</svg>
|
|
@@ -1,61 +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>Browse projects — Grove Directory</title><meta name="description" content="A searchable directory of projects for Grove Directory."><link rel="canonical" href="https://example.com/projects/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://example.com/projects/"><meta property="og:title" content="Browse projects — Grove Directory"><meta property="og:description" content="A searchable directory of projects for Grove 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="Browse projects — Grove Directory"><meta name="twitter:description" content="A searchable directory of projects for Grove 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>.line-clamp-2[data-astro-cid-ilaxscvv]{display:-webkit-box;-webkit-line-clamp:2;-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-section-tight border-b border-ink-200 dark:border-ink-800"> <div class="grove-container-wide mx-auto px-5 pt-10 sm:px-7 sm:pt-12"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400"> projects </span> <h1 class="m-0 mt-1 text-[1.875rem] sm:text-[2.125rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100">
|
|
43
|
-
Browse projects </h1> <p class="m-0 mt-2 max-w-[64ch] text-[0.9375rem] text-ink-500 dark:text-ink-400">
|
|
44
|
-
Search, filter, and explore 0 projects in this directory.
|
|
45
|
-
</p> <div class="mt-6"> <nav class="grove-lens-tabs flex flex-wrap items-center gap-1.5" aria-label="Curated views"> <a href="/projects" class="grove-btn rounded-md px-3 py-1.5 text-2xs font-medium transition-colors grove-btn-primary" aria-current="page" data-event="lens_tab_click" data-event-source="smart_lens_tabs"> All </a><a href="/projects?lens=hot" class="grove-btn rounded-md px-3 py-1.5 text-2xs font-medium transition-colors grove-btn-ghost border border-ink-200 dark:border-ink-800" data-event="lens_tab_click" data-event-source="smart_lens_tabs"> Trending </a><a href="/projects?lens=new" class="grove-btn rounded-md px-3 py-1.5 text-2xs font-medium transition-colors grove-btn-ghost border border-ink-200 dark:border-ink-800" data-event="lens_tab_click" data-event-source="smart_lens_tabs"> Recently added </a><a href="/projects?lens=mature" class="grove-btn rounded-md px-3 py-1.5 text-2xs font-medium transition-colors grove-btn-ghost border border-ink-200 dark:border-ink-800" data-event="lens_tab_click" data-event-source="smart_lens_tabs"> Established </a><a href="/projects?lens=featured" class="grove-btn rounded-md px-3 py-1.5 text-2xs font-medium transition-colors grove-btn-ghost border border-ink-200 dark:border-ink-800" data-event="lens_tab_click" data-event-source="smart_lens_tabs"> Featured </a><a href="/projects?lens=needs-review" class="grove-btn rounded-md px-3 py-1.5 text-2xs font-medium transition-colors grove-btn-ghost border border-ink-200 dark:border-ink-800" data-event="lens_tab_click" data-event-source="smart_lens_tabs"> Needs review </a> </nav> </div> <div class="mt-5"> <form method="get" action="/projects" class="grove-refine-panel flex flex-wrap items-end gap-3" data-grove-refine-panel> <label class="flex flex-col gap-1"> <span class="text-2xs font-medium uppercase tracking-wider text-ink-500 dark:text-ink-400">
|
|
46
|
-
Sort
|
|
47
|
-
</span> <select name="sort" onchange="this.form?.requestSubmit()" class="grove-select min-w-[12rem] rounded-md border border-ink-200 bg-white py-1.5 pl-2 pr-7 text-sm 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"> <option value="recently-updated"> Recently updated </option><option value="most-starred"> Most starred </option><option value="recently-added"> Recently added </option><option value="best-overall"> Best overall </option><option value="alphabetical"> Alphabetical </option> </select> </label> <noscript> <button type="submit" class="grove-btn grove-btn-outline">
|
|
48
|
-
Apply
|
|
49
|
-
</button> </noscript> </form> </div> </div> </section> <section class="grove-section-tight"> <div class="grove-container-wide mx-auto px-5 sm:px-7"> <div class="mb-4 flex flex-wrap items-baseline justify-between gap-2"> <p class="m-0 text-2xs text-ink-500 dark:text-ink-400">
|
|
50
|
-
Showing
|
|
51
|
-
<span class="ml-1 font-mono text-ink-900 dark:text-ink-100"> 0 </span>
|
|
52
|
-
–
|
|
53
|
-
<span class="font-mono text-ink-900 dark:text-ink-100"> 0 </span>
|
|
54
|
-
of
|
|
55
|
-
<span class="ml-1 font-mono text-ink-900 dark:text-ink-100"> 0 </span> projects </p> </div> <div class="flex flex-col items-center gap-2 py-16 text-center"> <p class="m-0 text-[0.9375rem] font-medium text-ink-700 dark:text-ink-200">
|
|
56
|
-
No projects match these filters.
|
|
57
|
-
</p> <a href="/projects" class="mt-3 text-sm text-ink-500 hover:text-ink-900 dark:hover:text-ink-100">
|
|
58
|
-
Clear all filters
|
|
59
|
-
</a> </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">
|
|
60
|
-
View source on GitHub
|
|
61
|
-
</a> </div> </div> </footer> </body> </html>
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# robots.txt for open-curated.dev
|
|
2
|
-
#
|
|
3
|
-
# Search engines, AI crawlers, and link preview bots are all welcome.
|
|
4
|
-
# The directory is intended to be fully indexable.
|
|
5
|
-
#
|
|
6
|
-
# The /submit path is a thin wrapper that POSTs to GitHub Issues —
|
|
7
|
-
# it carries no indexable content of its own, so we disallow it here
|
|
8
|
-
# (the page also serves `noindex,nofollow` as a belt-and-suspenders).
|
|
9
|
-
|
|
10
|
-
User-agent: *
|
|
11
|
-
Allow: /
|
|
12
|
-
Disallow: /submit
|
|
13
|
-
|
|
14
|
-
# LLM/AI crawlers — explicitly welcome. The curated per-app metadata
|
|
15
|
-
# is the primary audience for the /llms.txt and /llms-full.txt files.
|
|
16
|
-
User-agent: GPTBot
|
|
17
|
-
Allow: /
|
|
18
|
-
|
|
19
|
-
User-agent: ChatGPT-User
|
|
20
|
-
Allow: /
|
|
21
|
-
|
|
22
|
-
User-agent: ClaudeBot
|
|
23
|
-
Allow: /
|
|
24
|
-
|
|
25
|
-
User-agent: Claude-Web
|
|
26
|
-
Allow: /
|
|
27
|
-
|
|
28
|
-
User-agent: anthropic-ai
|
|
29
|
-
Allow: /
|
|
30
|
-
|
|
31
|
-
User-agent: PerplexityBot
|
|
32
|
-
Allow: /
|
|
33
|
-
|
|
34
|
-
User-agent: Google-Extended
|
|
35
|
-
Allow: /
|
|
36
|
-
|
|
37
|
-
User-agent: Applebot-Extended
|
|
38
|
-
Allow: /
|
|
39
|
-
|
|
40
|
-
User-agent: cohere-ai
|
|
41
|
-
Allow: /
|
|
42
|
-
|
|
43
|
-
User-agent: CCBot
|
|
44
|
-
Allow: /
|
|
45
|
-
|
|
46
|
-
User-agent: Amazonbot
|
|
47
|
-
Allow: /
|
|
48
|
-
|
|
49
|
-
# Sitemaps
|
|
50
|
-
Sitemap: https://example.com/sitemap.xml
|
|
51
|
-
|
|
52
|
-
# LLM context
|
|
53
|
-
LLM-Content: https://example.com/llms.txt
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
-
<url>
|
|
4
|
-
<loc>https://example.com/</loc>
|
|
5
|
-
<lastmod>2026-06-11</lastmod>
|
|
6
|
-
<changefreq>daily</changefreq>
|
|
7
|
-
<priority>1.0</priority>
|
|
8
|
-
</url>
|
|
9
|
-
<url>
|
|
10
|
-
<loc>https://example.com/about</loc>
|
|
11
|
-
<lastmod>2026-06-11</lastmod>
|
|
12
|
-
<changefreq>monthly</changefreq>
|
|
13
|
-
<priority>0.5</priority>
|
|
14
|
-
</url>
|
|
15
|
-
<url>
|
|
16
|
-
<loc>https://example.com/submit</loc>
|
|
17
|
-
<lastmod>2026-06-11</lastmod>
|
|
18
|
-
<changefreq>yearly</changefreq>
|
|
19
|
-
<priority>0.3</priority>
|
|
20
|
-
</url>
|
|
21
|
-
</urlset>
|
|
@@ -1,69 +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>Submit a project — Grove Directory</title><meta name="description" content="Submit a new project to Grove Directory."><link rel="canonical" href="https://example.com/submit/"><meta name="robots" content="noindex,nofollow"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://example.com/submit/"><meta property="og:title" content="Submit a project — Grove Directory"><meta property="og:description" content="Submit a new project to Grove 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="Submit a project — Grove Directory"><meta name="twitter:description" content="Submit a new project to Grove 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
|
-
Submit
|
|
44
|
-
</span> <h1 class="mt-1 text-[1.75rem] sm:text-[2rem] font-semibold tracking-tight text-ink-900 dark:text-ink-100 m-0">
|
|
45
|
-
Submit a project </h1> <p class="mt-4 max-w-[62ch] text-sm text-ink-700 dark:text-ink-200 m-0"> Grove Directory is a community knowledge site. Adding a new project is a two-step process — open a submission issue,
|
|
46
|
-
then open a pull request that adds a new YAML file under <code class="font-mono text-ink-900 dark:text-ink-100">data/records/</code>.
|
|
47
|
-
</p> <div class="mt-6 flex flex-wrap gap-2"> <a href="https://github.com/tortuvshin/grove/issues/new?template=record_submission.md" target="_blank" rel="noopener noreferrer" class="grove-btn grove-btn-primary">
|
|
48
|
-
Open a submission issue ↗
|
|
49
|
-
</a> <a href="https://github.com/tortuvshin/grove/blob/main/.github/ISSUE_TEMPLATE/record_submission.md" target="_blank" rel="noopener noreferrer" class="grove-btn grove-btn-outline">
|
|
50
|
-
See the issue template
|
|
51
|
-
</a> </div> <section class="mt-12 max-w-[68ch"> <h2 class="m-0 text-lg font-semibold tracking-tight text-ink-900 dark:text-ink-100">
|
|
52
|
-
Manual record (alternative to the issue form)
|
|
53
|
-
</h2> <p class="mt-2 text-sm text-ink-700 dark:text-ink-200 m-0">
|
|
54
|
-
Prefer to write a record by hand? Here's the minimum shape for a <code class="font-mono">project-directory</code> record.
|
|
55
|
-
The schema is validated automatically on every PR.
|
|
56
|
-
</p> <pre class="mt-4 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>kind: project
|
|
57
|
-
slug: my-project
|
|
58
|
-
name: My Project
|
|
59
|
-
description: One-line description of what this project does
|
|
60
|
-
category: tools
|
|
61
|
-
tags:
|
|
62
|
-
- open-source
|
|
63
|
-
links:
|
|
64
|
-
github: https://github.com/owner/repo
|
|
65
|
-
website: https://example.com</code></pre> </section> <section class="mt-12 max-w-[68ch"> <h2 class="m-0 text-lg font-semibold tracking-tight text-ink-900 dark:text-ink-100">
|
|
66
|
-
What happens after you submit
|
|
67
|
-
</h2> <ol class="mt-3 m-0 flex list-decimal flex-col gap-2 pl-5 text-sm text-ink-700 dark:text-ink-200"> <li>A maintainer reviews the issue and tags it as <code class="font-mono">accepted</code> or <code class="font-mono">needs-info</code>.</li> <li>You open a PR with the new <code class="font-mono">data/records/<slug>.yml</code> file.</li> <li>CI runs <code class="font-mono">grove validate</code> and previews the site with your record.</li> <li>A maintainer merges. The next <code class="font-mono">grove build</code> deploys it.</li> </ol> </section> </article> </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">
|
|
68
|
-
View source on GitHub
|
|
69
|
-
</a> </div> </div> </footer> </body> </html>
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
-
|
|
4
|
-
case `uname` in
|
|
5
|
-
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
-
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
-
basedir=`cygpath -w "$basedir"`
|
|
8
|
-
fi
|
|
9
|
-
;;
|
|
10
|
-
esac
|
|
11
|
-
|
|
12
|
-
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules"
|
|
14
|
-
else
|
|
15
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
-
fi
|
|
17
|
-
if [ -x "$basedir/node" ]; then
|
|
18
|
-
exec "$basedir/node" "$basedir/../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/bin/astro.mjs" "$@"
|
|
19
|
-
else
|
|
20
|
-
exec node "$basedir/../../../../../../node_modules/.pnpm/astro@6.4.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_rollup@4.61.1_tsx@4.22.4_yaml@2.9.0/node_modules/astro/bin/astro.mjs" "$@"
|
|
21
|
-
fi
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
-
|
|
4
|
-
case `uname` in
|
|
5
|
-
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
-
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
-
basedir=`cygpath -w "$basedir"`
|
|
8
|
-
fi
|
|
9
|
-
;;
|
|
10
|
-
esac
|
|
11
|
-
|
|
12
|
-
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/check/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/check/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules"
|
|
14
|
-
else
|
|
15
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/check/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/check/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
-
fi
|
|
17
|
-
if [ -x "$basedir/node" ]; then
|
|
18
|
-
exec "$basedir/node" "$basedir/../../../../../../node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/check/bin/astro-check.js" "$@"
|
|
19
|
-
else
|
|
20
|
-
exec node "$basedir/../../../../../../node_modules/.pnpm/@astrojs+check@0.9.9_prettier@3.8.3_typescript@6.0.3/node_modules/@astrojs/check/bin/astro-check.js" "$@"
|
|
21
|
-
fi
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
-
|
|
4
|
-
case `uname` in
|
|
5
|
-
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
-
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
-
basedir=`cygpath -w "$basedir"`
|
|
8
|
-
fi
|
|
9
|
-
;;
|
|
10
|
-
esac
|
|
11
|
-
|
|
12
|
-
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/packages/cli/dist/node_modules:/Users/turuu/Projects/Personal/grove/packages/cli/node_modules:/Users/turuu/Projects/Personal/grove/packages/node_modules:/Users/turuu/Projects/Personal/grove/node_modules:/Users/turuu/Projects/Personal/node_modules:/Users/turuu/Projects/node_modules:/Users/turuu/node_modules:/Users/node_modules:/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules"
|
|
14
|
-
else
|
|
15
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/packages/cli/dist/node_modules:/Users/turuu/Projects/Personal/grove/packages/cli/node_modules:/Users/turuu/Projects/Personal/grove/packages/node_modules:/Users/turuu/Projects/Personal/grove/node_modules:/Users/turuu/Projects/Personal/node_modules:/Users/turuu/Projects/node_modules:/Users/turuu/node_modules:/Users/node_modules:/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
-
fi
|
|
17
|
-
if [ -x "$basedir/node" ]; then
|
|
18
|
-
exec "$basedir/node" "$basedir/../../../../../cli/dist/index.js" "$@"
|
|
19
|
-
else
|
|
20
|
-
exec node "$basedir/../../../../../cli/dist/index.js" "$@"
|
|
21
|
-
fi
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
-
|
|
4
|
-
case `uname` in
|
|
5
|
-
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
-
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
-
basedir=`cygpath -w "$basedir"`
|
|
8
|
-
fi
|
|
9
|
-
;;
|
|
10
|
-
esac
|
|
11
|
-
|
|
12
|
-
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/jiti@2.7.0/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules"
|
|
14
|
-
else
|
|
15
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/jiti@2.7.0/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
-
fi
|
|
17
|
-
if [ -x "$basedir/node" ]; then
|
|
18
|
-
exec "$basedir/node" "$basedir/../../../../../../node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/jiti-cli.mjs" "$@"
|
|
19
|
-
else
|
|
20
|
-
exec node "$basedir/../../../../../../node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/jiti-cli.mjs" "$@"
|
|
21
|
-
fi
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
-
|
|
4
|
-
case `uname` in
|
|
5
|
-
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
-
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
-
basedir=`cygpath -w "$basedir"`
|
|
8
|
-
fi
|
|
9
|
-
;;
|
|
10
|
-
esac
|
|
11
|
-
|
|
12
|
-
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/prettier@3.8.3/node_modules/prettier/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/prettier@3.8.3/node_modules/prettier/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/prettier@3.8.3/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules"
|
|
14
|
-
else
|
|
15
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/prettier@3.8.3/node_modules/prettier/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/prettier@3.8.3/node_modules/prettier/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/prettier@3.8.3/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
-
fi
|
|
17
|
-
if [ -x "$basedir/node" ]; then
|
|
18
|
-
exec "$basedir/node" "$basedir/../../../../../../node_modules/.pnpm/prettier@3.8.3/node_modules/prettier/bin/prettier.cjs" "$@"
|
|
19
|
-
else
|
|
20
|
-
exec node "$basedir/../../../../../../node_modules/.pnpm/prettier@3.8.3/node_modules/prettier/bin/prettier.cjs" "$@"
|
|
21
|
-
fi
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
-
|
|
4
|
-
case `uname` in
|
|
5
|
-
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
-
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
-
basedir=`cygpath -w "$basedir"`
|
|
8
|
-
fi
|
|
9
|
-
;;
|
|
10
|
-
esac
|
|
11
|
-
|
|
12
|
-
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/dist/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/dist/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules"
|
|
14
|
-
else
|
|
15
|
-
export NODE_PATH="/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/dist/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/dist/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/rollup@4.61.1/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
-
fi
|
|
17
|
-
if [ -x "$basedir/node" ]; then
|
|
18
|
-
exec "$basedir/node" "$basedir/../../../../../../node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/dist/bin/rollup" "$@"
|
|
19
|
-
else
|
|
20
|
-
exec node "$basedir/../../../../../../node_modules/.pnpm/rollup@4.61.1/node_modules/rollup/dist/bin/rollup" "$@"
|
|
21
|
-
fi
|