@grove-dev/astro 0.1.4 → 0.2.2

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 (246) hide show
  1. package/dist/index.d.ts +4 -25
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +56 -22
  4. package/dist/index.js.map +1 -1
  5. package/dist/layouts/index.d.ts +25 -0
  6. package/dist/layouts/index.d.ts.map +1 -0
  7. package/dist/layouts/index.js +25 -0
  8. package/dist/layouts/index.js.map +1 -0
  9. package/dist/lib/display.d.ts +33 -0
  10. package/dist/lib/display.d.ts.map +1 -0
  11. package/dist/lib/display.js +104 -0
  12. package/dist/lib/display.js.map +1 -0
  13. package/dist/lib/format.d.ts +30 -0
  14. package/dist/lib/format.d.ts.map +1 -0
  15. package/dist/lib/format.js +73 -0
  16. package/dist/lib/format.js.map +1 -0
  17. package/dist/lib/index.d.ts +26 -0
  18. package/dist/lib/index.d.ts.map +1 -0
  19. package/dist/lib/index.js +26 -0
  20. package/dist/lib/index.js.map +1 -0
  21. package/dist/lib/lenses.d.ts +96 -0
  22. package/dist/lib/lenses.d.ts.map +1 -0
  23. package/dist/lib/lenses.js +181 -0
  24. package/dist/lib/lenses.js.map +1 -0
  25. package/dist/lib/repo.d.ts +30 -0
  26. package/dist/lib/repo.d.ts.map +1 -0
  27. package/dist/lib/repo.js +44 -0
  28. package/dist/lib/repo.js.map +1 -0
  29. package/dist/lib/scores.d.ts +38 -0
  30. package/dist/lib/scores.d.ts.map +1 -0
  31. package/dist/lib/scores.js +83 -0
  32. package/dist/lib/scores.js.map +1 -0
  33. package/dist/lib/search.d.ts +199 -0
  34. package/dist/lib/search.d.ts.map +1 -0
  35. package/dist/lib/search.js +357 -0
  36. package/dist/lib/search.js.map +1 -0
  37. package/dist/lib/taxonomy-counts.d.ts +25 -0
  38. package/dist/lib/taxonomy-counts.d.ts.map +1 -0
  39. package/dist/lib/taxonomy-counts.js +41 -0
  40. package/dist/lib/taxonomy-counts.js.map +1 -0
  41. package/package.json +7 -7
  42. package/src/components/AppSection.astro +83 -0
  43. package/src/components/AppsIndexRow.astro +204 -0
  44. package/src/components/AppsPagination.astro +126 -0
  45. package/src/components/CategoryGrid.astro +86 -17
  46. package/src/components/ContributorsGrid.astro +149 -0
  47. package/src/components/DecisionRow.astro +89 -0
  48. package/src/components/ExploreByCategory.astro +67 -0
  49. package/src/components/ExploreByStack.astro +72 -0
  50. package/src/components/Hero.astro +246 -0
  51. package/src/components/Icon.astro +223 -0
  52. package/src/components/ItemCard.astro +289 -30
  53. package/src/components/MinimalAbout.astro +82 -0
  54. package/src/components/OriginalCollection.astro +116 -0
  55. package/src/components/RefinePanel.astro +197 -0
  56. package/src/components/ScoreBars.astro +92 -22
  57. package/src/components/SmartLensTabs.astro +71 -0
  58. package/src/components/StackGrid.astro +132 -0
  59. package/src/components/WhyThisExists.astro +116 -0
  60. package/src/index.ts +61 -14
  61. package/src/layouts/BaseLayout.astro +227 -15
  62. package/src/layouts/Container.astro +57 -0
  63. package/src/layouts/Footer.astro +235 -0
  64. package/src/layouts/Header.astro +159 -0
  65. package/src/layouts/SectionHeader.astro +58 -0
  66. package/{templates/default/src/components/layout → src/layouts}/Seo.astro +62 -38
  67. package/src/layouts/ThemeToggle.astro +110 -0
  68. package/src/layouts/astro-shim.d.ts +29 -0
  69. package/src/layouts/index.ts +24 -0
  70. package/src/lib/display.ts +118 -0
  71. package/src/lib/format.ts +65 -0
  72. package/src/lib/index.ts +26 -0
  73. package/src/lib/lenses.ts +241 -0
  74. package/src/lib/repo.ts +44 -0
  75. package/src/lib/scores.ts +94 -0
  76. package/src/lib/search.ts +481 -0
  77. package/src/lib/taxonomy-counts.ts +60 -0
  78. package/src/styles.css +366 -638
  79. package/templates/default/.astro/content.d.ts +155 -0
  80. package/templates/default/.astro/settings.json +5 -0
  81. package/templates/default/.astro/types.d.ts +2 -0
  82. package/templates/default/astro.config.mjs +8 -6
  83. package/templates/default/content/pages/about.md +66 -0
  84. package/templates/default/content/pages/methodology.md +103 -0
  85. package/templates/default/data/generated/records.full.json +8 -0
  86. package/templates/default/data/generated/records.index.json +7 -0
  87. package/templates/default/data/generated/records.json +8 -0
  88. package/templates/default/data/generated/site-config.json +31 -0
  89. package/templates/default/data/records/.gitkeep +0 -0
  90. package/templates/default/dist/_astro/BaseLayout.DfpwR3jc.css +1 -0
  91. package/templates/default/dist/about/index.html +165 -0
  92. package/templates/default/dist/icons/platforms/android.svg +1 -0
  93. package/templates/default/dist/icons/platforms/apple-dark.svg +1 -0
  94. package/templates/default/dist/icons/platforms/apple-light.svg +1 -0
  95. package/templates/default/dist/icons/platforms/chrome.svg +1 -0
  96. package/templates/default/dist/icons/platforms/chromeos.svg +5 -0
  97. package/templates/default/dist/icons/platforms/desktop.svg +4 -0
  98. package/templates/default/dist/icons/platforms/embedded.svg +5 -0
  99. package/templates/default/dist/icons/platforms/ios.svg +1 -0
  100. package/templates/default/dist/icons/platforms/linux.svg +1 -0
  101. package/templates/default/dist/icons/platforms/macos.svg +1 -0
  102. package/templates/default/dist/icons/platforms/ubuntu.svg +1 -0
  103. package/templates/default/dist/icons/platforms/web.svg +5 -0
  104. package/templates/default/dist/icons/platforms/windows.svg +6 -0
  105. package/templates/default/dist/icons/stacks/android.svg +1 -0
  106. package/templates/default/dist/icons/stacks/apple-dark.svg +1 -0
  107. package/templates/default/dist/icons/stacks/apple-light.svg +1 -0
  108. package/templates/default/dist/icons/stacks/capacitor.svg +14 -0
  109. package/templates/default/dist/icons/stacks/dart.svg +1 -0
  110. package/templates/default/dist/icons/stacks/firebase.svg +1 -0
  111. package/templates/default/dist/icons/stacks/flutter.svg +1 -0
  112. package/templates/default/dist/icons/stacks/graphql.svg +1 -0
  113. package/templates/default/dist/icons/stacks/ionic.svg +4 -0
  114. package/templates/default/dist/icons/stacks/java.svg +1 -0
  115. package/templates/default/dist/icons/stacks/javascript.svg +1 -0
  116. package/templates/default/dist/icons/stacks/kotlin.svg +1 -0
  117. package/templates/default/dist/icons/stacks/mongodb.svg +1 -0
  118. package/templates/default/dist/icons/stacks/nodejs.svg +1 -0
  119. package/templates/default/dist/icons/stacks/python.svg +1 -0
  120. package/templates/default/dist/icons/stacks/react-native.svg +1 -0
  121. package/templates/default/dist/icons/stacks/react.svg +1 -0
  122. package/templates/default/dist/icons/stacks/rust.svg +1 -0
  123. package/templates/default/dist/icons/stacks/solidity.svg +1 -0
  124. package/templates/default/dist/icons/stacks/swift.svg +1 -0
  125. package/templates/default/dist/icons/stacks/tensorflow.svg +1 -0
  126. package/templates/default/dist/icons/stacks/typescript.svg +1 -0
  127. package/templates/default/dist/index.html +55 -0
  128. package/templates/default/dist/llms-full.txt +14 -0
  129. package/templates/default/dist/llms.txt +11 -0
  130. package/templates/default/dist/og-image.svg +48 -0
  131. package/templates/default/dist/projects/index.html +61 -0
  132. package/templates/default/dist/robots.txt +53 -0
  133. package/templates/default/dist/sitemap.xml +21 -0
  134. package/templates/default/dist/submit/index.html +69 -0
  135. package/templates/default/grove.config.ts +36 -0
  136. package/templates/default/node_modules/.bin/astro +21 -0
  137. package/templates/default/node_modules/.bin/astro-check +21 -0
  138. package/templates/default/node_modules/.bin/grove +21 -0
  139. package/templates/default/node_modules/.bin/jiti +21 -0
  140. package/templates/default/node_modules/.bin/prettier +21 -0
  141. package/templates/default/node_modules/.bin/rollup +21 -0
  142. package/templates/default/node_modules/.bin/tsc +21 -0
  143. package/templates/default/node_modules/.bin/tsserver +21 -0
  144. package/templates/default/node_modules/.bin/tsx +21 -0
  145. package/templates/default/node_modules/.bin/vite +21 -0
  146. package/templates/default/node_modules/.bin/yaml +21 -0
  147. package/templates/default/node_modules/.vite/deps/_metadata.json +79 -0
  148. package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js +433 -0
  149. package/templates/default/node_modules/.vite/deps/astro-KRVZHBC5.js.map +7 -0
  150. package/templates/default/node_modules/.vite/deps/astro___aria-query.js +5 -0
  151. package/templates/default/node_modules/.vite/deps/astro___aria-query.js.map +7 -0
  152. package/templates/default/node_modules/.vite/deps/astro___axobject-query.js +5 -0
  153. package/templates/default/node_modules/.vite/deps/astro___axobject-query.js.map +7 -0
  154. package/templates/default/node_modules/.vite/deps/astro___html-escaper.js +9 -0
  155. package/templates/default/node_modules/.vite/deps/astro___html-escaper.js.map +7 -0
  156. package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +241 -0
  157. package/templates/default/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +7 -0
  158. package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js +1592 -0
  159. package/templates/default/node_modules/.vite/deps/audit-GYHQ3ITH.js.map +7 -0
  160. package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js +30 -0
  161. package/templates/default/node_modules/.vite/deps/chunk-5WRI5ZAA.js.map +7 -0
  162. package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js +186 -0
  163. package/templates/default/node_modules/.vite/deps/chunk-7P4KIK53.js.map +7 -0
  164. package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js +48 -0
  165. package/templates/default/node_modules/.vite/deps/chunk-BQGHFQJH.js.map +7 -0
  166. package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js +6779 -0
  167. package/templates/default/node_modules/.vite/deps/chunk-CJCDKWP2.js.map +7 -0
  168. package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js +33 -0
  169. package/templates/default/node_modules/.vite/deps/chunk-FHJ3XBDE.js.map +7 -0
  170. package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js +88 -0
  171. package/templates/default/node_modules/.vite/deps/chunk-FQEMNIUQ.js.map +7 -0
  172. package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js +72 -0
  173. package/templates/default/node_modules/.vite/deps/chunk-HBSVDAQD.js.map +7 -0
  174. package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js +3757 -0
  175. package/templates/default/node_modules/.vite/deps/chunk-HDOQ2U3U.js.map +7 -0
  176. package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js +54 -0
  177. package/templates/default/node_modules/.vite/deps/chunk-XEBKRCNE.js.map +7 -0
  178. package/templates/default/node_modules/.vite/deps/package.json +3 -0
  179. package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js +213 -0
  180. package/templates/default/node_modules/.vite/deps/settings-C5H4VHXU.js.map +7 -0
  181. package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js +525 -0
  182. package/templates/default/node_modules/.vite/deps/toolbar-H5DB6HVP.js.map +7 -0
  183. package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js +1020 -0
  184. package/templates/default/node_modules/.vite/deps/ui-library-JGHU6JE2.js.map +7 -0
  185. package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js +147 -0
  186. package/templates/default/node_modules/.vite/deps/xray-EFCQOW4E.js.map +7 -0
  187. package/templates/default/package.json +6 -5
  188. package/templates/default/public/llms-full.txt +14 -0
  189. package/templates/default/public/llms.txt +11 -0
  190. package/templates/default/src/components/layout/BaseLayout.astro +10 -57
  191. package/templates/default/src/components/layout/Footer.astro +16 -134
  192. package/templates/default/src/components/layout/Header.astro +25 -126
  193. package/templates/default/src/data/records.ts +161 -0
  194. package/templates/default/src/lib/markdown.ts +171 -0
  195. package/templates/default/src/pages/about.astro +95 -429
  196. package/templates/default/src/pages/index.astro +258 -61
  197. package/templates/default/src/pages/projects/[slug].astro +480 -0
  198. package/templates/default/src/pages/projects/index.astro +193 -0
  199. package/templates/default/src/pages/sitemap.xml.ts +73 -61
  200. package/templates/default/src/pages/submit.astro +122 -411
  201. package/templates/default/src/styles/global.css +42 -68
  202. package/src/components/ActiveFilterChips.astro +0 -20
  203. package/src/components/DirectoryFilters.astro +0 -100
  204. package/src/components/DirectoryHero.astro +0 -32
  205. package/src/components/HealthBadge.astro +0 -12
  206. package/src/components/LensTabs.astro +0 -26
  207. package/src/components/MethodologyPanel.astro +0 -20
  208. package/src/components/Pagination.astro +0 -24
  209. package/src/components/ProjectDetail.astro +0 -166
  210. package/src/components/SubmitDraft.astro +0 -137
  211. package/templates/default/src/components/AppCard.astro +0 -248
  212. package/templates/default/src/components/AppSection.astro +0 -58
  213. package/templates/default/src/components/AppsIndexRow.astro +0 -230
  214. package/templates/default/src/components/AppsPagination.astro +0 -147
  215. package/templates/default/src/components/CategoryGrid.astro +0 -80
  216. package/templates/default/src/components/ContributorsGrid.astro +0 -105
  217. package/templates/default/src/components/DecisionRow.astro +0 -219
  218. package/templates/default/src/components/ExploreByCategory.astro +0 -74
  219. package/templates/default/src/components/ExploreByStack.astro +0 -102
  220. package/templates/default/src/components/Hero.astro +0 -176
  221. package/templates/default/src/components/MinimalAbout.astro +0 -57
  222. package/templates/default/src/components/OriginalCollection.astro +0 -144
  223. package/templates/default/src/components/RefinePanel.astro +0 -272
  224. package/templates/default/src/components/ScoreBars.astro +0 -72
  225. package/templates/default/src/components/SmartLensTabs.astro +0 -65
  226. package/templates/default/src/components/StackGrid.astro +0 -95
  227. package/templates/default/src/components/WhyThisExists.astro +0 -81
  228. package/templates/default/src/components/icons/Icon.astro +0 -148
  229. package/templates/default/src/components/layout/SectionHeader.astro +0 -42
  230. package/templates/default/src/components/layout/ThemeToggle.astro +0 -97
  231. package/templates/default/src/data/apps.ts +0 -149
  232. package/templates/default/src/data/categories.ts +0 -27
  233. package/templates/default/src/data/config.ts +0 -28
  234. package/templates/default/src/data/contributors.ts +0 -96
  235. package/templates/default/src/data/stacks.ts +0 -47
  236. package/templates/default/src/data/stats.ts +0 -65
  237. package/templates/default/src/data/types.ts +0 -248
  238. package/templates/default/src/lib/apps-search.ts +0 -228
  239. package/templates/default/src/lib/format.ts +0 -36
  240. package/templates/default/src/lib/lenses.ts +0 -98
  241. package/templates/default/src/lib/repo.ts +0 -12
  242. package/templates/default/src/lib/scores.ts +0 -51
  243. package/templates/default/src/lib/taxonomy-counts.ts +0 -31
  244. package/templates/default/src/pages/apps/[slug].astro +0 -709
  245. package/templates/default/src/pages/apps/index.astro +0 -669
  246. package/templates/default/src/pages/contributors.astro +0 -142
@@ -0,0 +1,21 @@
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>
@@ -0,0 +1,69 @@
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>
@@ -0,0 +1,36 @@
1
+ import { defineConfig } from "@grove-dev/core";
2
+
3
+ /**
4
+ * Default template config — the smallest viable project-directory
5
+ * showcase. Consumers (created via `grove new`) override this
6
+ * with their own branding, taxonomy, and integrations.
7
+ */
8
+ export default defineConfig({
9
+ blueprint: "project-directory",
10
+
11
+ site: {
12
+ name: "Grove Directory",
13
+ tagline: "A curated, health-aware developer directory.",
14
+ description:
15
+ "A curated, health-aware developer directory powered by Grove.",
16
+ url: "https://example.com",
17
+ repoUrl: "https://github.com/tortuvshin/grove",
18
+ },
19
+
20
+ nav: [
21
+ { label: "Home", href: "/" },
22
+ { label: "Browse", href: "/projects" },
23
+ { label: "About", href: "/about" },
24
+ ],
25
+
26
+ facets: ["category", "stacks", "platforms", "tags"],
27
+
28
+ integrations: {},
29
+
30
+ theme: {
31
+ primaryColor: "#16a34a",
32
+ radius: "soft",
33
+ density: "comfortable",
34
+ containerWidth: "72rem",
35
+ },
36
+ });
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,79 @@
1
+ {
2
+ "hash": "91f0dfd4",
3
+ "configHash": "ebafae77",
4
+ "lockfileHash": "cdea2384",
5
+ "browserHash": "f6d61a00",
6
+ "optimized": {
7
+ "astro > aria-query": {
8
+ "src": "../../../../../../../node_modules/.pnpm/aria-query@5.3.2/node_modules/aria-query/lib/index.js",
9
+ "file": "astro___aria-query.js",
10
+ "fileHash": "5f87249d",
11
+ "needsInterop": true
12
+ },
13
+ "astro > axobject-query": {
14
+ "src": "../../../../../../../node_modules/.pnpm/axobject-query@4.1.0/node_modules/axobject-query/lib/index.js",
15
+ "file": "astro___axobject-query.js",
16
+ "fileHash": "85df1041",
17
+ "needsInterop": true
18
+ },
19
+ "astro > html-escaper": {
20
+ "src": "../../../../../../../node_modules/.pnpm/html-escaper@3.0.3/node_modules/html-escaper/esm/index.js",
21
+ "file": "astro___html-escaper.js",
22
+ "fileHash": "df7f9a31",
23
+ "needsInterop": false
24
+ },
25
+ "astro/runtime/client/dev-toolbar/entrypoint.js": {
26
+ "src": "../../../../../../../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/dist/runtime/client/dev-toolbar/entrypoint.js",
27
+ "file": "astro_runtime_client_dev-toolbar_entrypoint__js.js",
28
+ "fileHash": "2543fc40",
29
+ "needsInterop": false
30
+ }
31
+ },
32
+ "chunks": {
33
+ "toolbar-H5DB6HVP": {
34
+ "file": "toolbar-H5DB6HVP.js"
35
+ },
36
+ "ui-library-JGHU6JE2": {
37
+ "file": "ui-library-JGHU6JE2.js"
38
+ },
39
+ "chunk-FQEMNIUQ": {
40
+ "file": "chunk-FQEMNIUQ.js"
41
+ },
42
+ "astro-KRVZHBC5": {
43
+ "file": "astro-KRVZHBC5.js"
44
+ },
45
+ "chunk-BQGHFQJH": {
46
+ "file": "chunk-BQGHFQJH.js"
47
+ },
48
+ "audit-GYHQ3ITH": {
49
+ "file": "audit-GYHQ3ITH.js"
50
+ },
51
+ "chunk-HDOQ2U3U": {
52
+ "file": "chunk-HDOQ2U3U.js"
53
+ },
54
+ "chunk-CJCDKWP2": {
55
+ "file": "chunk-CJCDKWP2.js"
56
+ },
57
+ "xray-EFCQOW4E": {
58
+ "file": "xray-EFCQOW4E.js"
59
+ },
60
+ "chunk-HBSVDAQD": {
61
+ "file": "chunk-HBSVDAQD.js"
62
+ },
63
+ "chunk-FHJ3XBDE": {
64
+ "file": "chunk-FHJ3XBDE.js"
65
+ },
66
+ "settings-C5H4VHXU": {
67
+ "file": "settings-C5H4VHXU.js"
68
+ },
69
+ "chunk-XEBKRCNE": {
70
+ "file": "chunk-XEBKRCNE.js"
71
+ },
72
+ "chunk-7P4KIK53": {
73
+ "file": "chunk-7P4KIK53.js"
74
+ },
75
+ "chunk-5WRI5ZAA": {
76
+ "file": "chunk-5WRI5ZAA.js"
77
+ }
78
+ }
79
+ }