@grove-dev/astro 0.2.2 → 0.2.6

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.
Files changed (105) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +4 -4
  3. package/src/components/ItemCard.astro +35 -18
  4. package/src/components/{AppSection.astro → RecordSection.astro} +11 -6
  5. package/templates/default/src/data/records.ts +61 -29
  6. package/templates/default/src/pages/index.astro +23 -18
  7. package/templates/default/.astro/content.d.ts +0 -155
  8. package/templates/default/.astro/settings.json +0 -5
  9. package/templates/default/.astro/types.d.ts +0 -2
  10. package/templates/default/dist/_astro/BaseLayout.DfpwR3jc.css +0 -1
  11. package/templates/default/dist/about/index.html +0 -165
  12. package/templates/default/dist/icons/platforms/android.svg +0 -1
  13. package/templates/default/dist/icons/platforms/apple-dark.svg +0 -1
  14. package/templates/default/dist/icons/platforms/apple-light.svg +0 -1
  15. package/templates/default/dist/icons/platforms/chrome.svg +0 -1
  16. package/templates/default/dist/icons/platforms/chromeos.svg +0 -5
  17. package/templates/default/dist/icons/platforms/desktop.svg +0 -4
  18. package/templates/default/dist/icons/platforms/embedded.svg +0 -5
  19. package/templates/default/dist/icons/platforms/ios.svg +0 -1
  20. package/templates/default/dist/icons/platforms/linux.svg +0 -1
  21. package/templates/default/dist/icons/platforms/macos.svg +0 -1
  22. package/templates/default/dist/icons/platforms/ubuntu.svg +0 -1
  23. package/templates/default/dist/icons/platforms/web.svg +0 -5
  24. package/templates/default/dist/icons/platforms/windows.svg +0 -6
  25. package/templates/default/dist/icons/stacks/android.svg +0 -1
  26. package/templates/default/dist/icons/stacks/apple-dark.svg +0 -1
  27. package/templates/default/dist/icons/stacks/apple-light.svg +0 -1
  28. package/templates/default/dist/icons/stacks/capacitor.svg +0 -14
  29. package/templates/default/dist/icons/stacks/dart.svg +0 -1
  30. package/templates/default/dist/icons/stacks/firebase.svg +0 -1
  31. package/templates/default/dist/icons/stacks/flutter.svg +0 -1
  32. package/templates/default/dist/icons/stacks/graphql.svg +0 -1
  33. package/templates/default/dist/icons/stacks/ionic.svg +0 -4
  34. package/templates/default/dist/icons/stacks/java.svg +0 -1
  35. package/templates/default/dist/icons/stacks/javascript.svg +0 -1
  36. package/templates/default/dist/icons/stacks/kotlin.svg +0 -1
  37. package/templates/default/dist/icons/stacks/mongodb.svg +0 -1
  38. package/templates/default/dist/icons/stacks/nodejs.svg +0 -1
  39. package/templates/default/dist/icons/stacks/python.svg +0 -1
  40. package/templates/default/dist/icons/stacks/react-native.svg +0 -1
  41. package/templates/default/dist/icons/stacks/react.svg +0 -1
  42. package/templates/default/dist/icons/stacks/rust.svg +0 -1
  43. package/templates/default/dist/icons/stacks/solidity.svg +0 -1
  44. package/templates/default/dist/icons/stacks/swift.svg +0 -1
  45. package/templates/default/dist/icons/stacks/tensorflow.svg +0 -1
  46. package/templates/default/dist/icons/stacks/typescript.svg +0 -1
  47. package/templates/default/dist/index.html +0 -55
  48. package/templates/default/dist/llms-full.txt +0 -14
  49. package/templates/default/dist/llms.txt +0 -11
  50. package/templates/default/dist/og-image.svg +0 -48
  51. package/templates/default/dist/projects/index.html +0 -61
  52. package/templates/default/dist/robots.txt +0 -53
  53. package/templates/default/dist/sitemap.xml +0 -21
  54. package/templates/default/dist/submit/index.html +0 -69
  55. package/templates/default/node_modules/.bin/astro +0 -21
  56. package/templates/default/node_modules/.bin/astro-check +0 -21
  57. package/templates/default/node_modules/.bin/grove +0 -21
  58. package/templates/default/node_modules/.bin/jiti +0 -21
  59. package/templates/default/node_modules/.bin/prettier +0 -21
  60. package/templates/default/node_modules/.bin/rollup +0 -21
  61. package/templates/default/node_modules/.bin/tsc +0 -21
  62. package/templates/default/node_modules/.bin/tsserver +0 -21
  63. package/templates/default/node_modules/.bin/tsx +0 -21
  64. package/templates/default/node_modules/.bin/vite +0 -21
  65. package/templates/default/node_modules/.bin/yaml +0 -21
  66. package/templates/default/node_modules/.vite/deps/_metadata.json +0 -79
  67. package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js +0 -433
  68. package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js.map +0 -7
  69. package/templates/default/node_modules/.vite/deps/astro___aria-query.js +0 -5
  70. package/templates/default/node_modules/.vite/deps/astro___aria-query.js.map +0 -7
  71. package/templates/default/node_modules/.vite/deps/astro___axobject-query.js +0 -5
  72. package/templates/default/node_modules/.vite/deps/astro___axobject-query.js.map +0 -7
  73. package/templates/default/node_modules/.vite/deps/astro___html-escaper.js +0 -9
  74. package/templates/default/node_modules/.vite/deps/astro___html-escaper.js.map +0 -7
  75. package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -241
  76. package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -7
  77. package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js +0 -1592
  78. package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js.map +0 -7
  79. package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js +0 -30
  80. package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js.map +0 -7
  81. package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js +0 -186
  82. package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js.map +0 -7
  83. package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js +0 -48
  84. package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js.map +0 -7
  85. package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js +0 -6779
  86. package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js.map +0 -7
  87. package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js +0 -33
  88. package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js.map +0 -7
  89. package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js +0 -88
  90. package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js.map +0 -7
  91. package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js +0 -72
  92. package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js.map +0 -7
  93. package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js +0 -3757
  94. package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js.map +0 -7
  95. package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js +0 -54
  96. package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js.map +0 -7
  97. package/templates/default/node_modules/.vite/deps/package.json +0 -3
  98. package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js +0 -213
  99. package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js.map +0 -7
  100. package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js +0 -525
  101. package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js.map +0 -7
  102. package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js +0 -1020
  103. package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js.map +0 -7
  104. package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js +0 -147
  105. package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js.map +0 -7
@@ -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.DfpwR3jc.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-10</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-10</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-10</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.DfpwR3jc.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/&lt;slug&gt;.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
@@ -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/typescript@6.0.3/node_modules/typescript/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/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/typescript@6.0.3/node_modules/typescript/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/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/typescript@6.0.3/node_modules/typescript/bin/tsc" "$@"
19
- else
20
- exec node "$basedir/../../../../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/bin/tsc" "$@"
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/typescript@6.0.3/node_modules/typescript/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/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/typescript@6.0.3/node_modules/typescript/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/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/typescript@6.0.3/node_modules/typescript/bin/tsserver" "$@"
19
- else
20
- exec node "$basedir/../../../../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/bin/tsserver" "$@"
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/tsx@4.22.4/node_modules/tsx/dist/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/tsx@4.22.4/node_modules/tsx/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/tsx@4.22.4/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/tsx@4.22.4/node_modules/tsx/dist/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/tsx@4.22.4/node_modules/tsx/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/tsx@4.22.4/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/tsx@4.22.4/node_modules/tsx/dist/cli.mjs" "$@"
19
- else
20
- exec node "$basedir/../../../../../../node_modules/.pnpm/tsx@4.22.4/node_modules/tsx/dist/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/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.4_yaml@2.9.0/node_modules/vite/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.4_yaml@2.9.0/node_modules/vite/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_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/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.4_yaml@2.9.0/node_modules/vite/bin/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.4_yaml@2.9.0/node_modules/vite/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_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/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.4_yaml@2.9.0/node_modules/vite/bin/vite.js" "$@"
19
- else
20
- exec node "$basedir/../../../../../../node_modules/.pnpm/vite@7.3.5_@types+node@25.9.2_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.4_yaml@2.9.0/node_modules/vite/bin/vite.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/yaml@2.9.0/node_modules/yaml/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/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/yaml@2.9.0/node_modules/yaml/node_modules:/Users/turuu/Projects/Personal/grove/node_modules/.pnpm/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/yaml@2.9.0/node_modules/yaml/bin.mjs" "$@"
19
- else
20
- exec node "$basedir/../../../../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/bin.mjs" "$@"
21
- fi