diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..eb2114d1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,50 @@ +# ── Version control ────────────────────────────── +.git +.gitignore + +# ── Node / JS artifacts ───────────────────────── +**/node_modules +**/dist +**/dist-static +**/.next +**/.vite +**/bun.lock + +# ── OS & IDE junk ─────────────────────────────── +.DS_Store +Thumbs.db +.vscode +.idea +*.swp +*.swo +*~ + +# ── Docs & meta (not needed in any build) ────── +*.md +LICENSE +Credits.txt +SECURITY.md +IDEAS.md +Map.md +tags.md +INFO.txt +CUSTOM_TEMPLATES.md + +# ── Dev / CI files ────────────────────────────── +*.bat +*.sh +*.ps1 +Makefile +docker-compose.yml +check.py +test.sh +test7.sh +samfile + +# ── Docker-Meta (Dockerfiles + nginx.conf bleiben!) ── +docker/README.md + +# ── Build caches ──────────────────────────────── +**/.cache +**/tsconfig.tsbuildinfo +**/.eslintcache diff --git a/.finder/templates/folderimages.json5 b/.finder/templates/folderimages.json5 new file mode 100644 index 00000000..c77ac157 --- /dev/null +++ b/.finder/templates/folderimages.json5 @@ -0,0 +1,11 @@ +{ + "name": "*", + "description": "search for folders with images", + "files": [ + { + "name": "(?:\\.(?:j(?:p(?:eg?|g)|if|fif?|xl)|png|gif|webp|a(?:vif|png)|svg|bmp|ico|tiff|hei[cf]))$" + } + ], + "min_version": "0.3.17", + "mdnote_base64": "IyBUZW1wbGF0ZSB0byBzZWFyY2ggYWxsIGltYWdlIGZpbGVzCgojIyMgYmFja3VwIGZvciB0aGUgcmVnZXggY3JlYXRvcjoKCmBgYApleUoySWpveExDSmhJam9pTG1wd1oxeHVMbXB3WldkY2JpNXFjR1ZjYmk1cWFXWmNiaTVxWm1sbVhHNHVhbVpwWEc0dWNHNW5YRzR1WjJsbVhHNHVkMlZpY0Z4dUxtRjJhV1pjYmk1emRtZGNiaTVoY0c1blhHNHVZbTF3WEc0dWFXTnZYRzR1ZEdsbVpseHVMbXA0YkZ4dUxtaGxhV05jYmk1b1pXbG1JaXdpWkNJNklpSXNJbTBpT2lKbGJtUnpWMmwwYUNJc0lta2lPbVpoYkhObGZRPT0KYGBg" +} \ No newline at end of file diff --git a/.finder/templates/newnew.json5 b/.finder/templates/newnew.json5 new file mode 100644 index 00000000..dd94e5d1 --- /dev/null +++ b/.finder/templates/newnew.json5 @@ -0,0 +1,6 @@ +{ + "name": "*", + "description": "Describe what this template matches", + "min_version": "0.3.17", + "mdnote": "# niggas are gay\n# and black\nratio\nhallo nigger\n erre" +} \ No newline at end of file diff --git a/.finder/templates/testnew.json5 b/.finder/templates/testnew.json5 new file mode 100644 index 00000000..fd1ef53e --- /dev/null +++ b/.finder/templates/testnew.json5 @@ -0,0 +1,6 @@ +{ + "name": "*", + "description": "Describe what this template matches", + "min_version": "0.3.17", + "mdnote_base64": "IyBUZXN0IG5ldw==" +} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index 3921ac52..b214903c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11,6 +11,9 @@ samfile linguist-language=Shell go.work linguist-language=go go.mod linguist-language=go +go.sum linguist-language=go + +docker-compose.yml linguist-language=Dockerfile # HTML DIR /cmd/findergen/frontend/** linguist-vendored diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5cfc9177..061c1299 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,6 +66,7 @@ jobs: cp CHANGELOG.md "${PACKAGE_DIR}/" cp INFO.txt "${PACKAGE_DIR}/" cp LICENSE "${PACKAGE_DIR}/" + cp Newest_Changes.md "${PACKAGE_DIR}/" - uses: actions/upload-artifact@v4 with: @@ -114,15 +115,16 @@ jobs: cd release sha512sum * > SHA512SUMS.txt - - name: Extract release notes from CHANGELOG + - name: Extract release notes from Newest_Changes id: changelog run: | - VERSION=${GITHUB_REF#refs/tags/} - - awk "/^## ${VERSION}/{flag=1; next} /^## /{flag=0} flag" CHANGELOG.md > RELEASE_NOTES.md + if [ ! -f Newest_Changes.md ]; then + echo "Newest_Changes.md not found - run 'bun generate-changelog.js' and commit it." >&2 + exit 1 + fi echo "RELEASE_BODY<> $GITHUB_OUTPUT - cat RELEASE_NOTES.md >> $GITHUB_OUTPUT + cat Newest_Changes.md >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Create Release diff --git a/.gitignore b/.gitignore index eb982e79..6bc0ffcf 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,17 @@ finder-template-generator-ssg/tsconfig.tsbuildinfo /finder-template-generator-ssg/third_party_licenses finder-template-generator-ssg/static-stats.html finder.exe~ +/npm/finder-lib/node_modules +/npm/finder-lib/dist +*.tgz +npm/hub/.env +/node_modules +npm/hub/next-env.d.ts +npm/hub/database-export.sql +.env +/npm/site/node_modules +npm/site/stats.html +npm/site/static-stats.html +/npm/site/dist +/npm/site/dist-static +npm/site/tsconfig.tsbuildinfo diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index e56628df..4648833e 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -44,9 +44,21 @@ "icon": "excalidraw-icon", "title": "Map" } + }, + { + "id": "8e1d4bedc8a7f5b5", + "type": "leaf", + "state": { + "type": "excalidraw", + "state": { + "file": "Map.md" + }, + "icon": "excalidraw-icon", + "title": "Map" + } } ], - "currentTab": 2 + "currentTab": 3 } ], "direction": "vertical" @@ -194,13 +206,23 @@ "icon": "lucide-list", "title": "Gliederung" } + }, + { + "id": "dd02c789bf2c38a7", + "type": "leaf", + "state": { + "type": "excalidraw-sidepanel", + "state": {}, + "icon": "excalidraw-icon", + "title": "Excalidraw Sidepanel" + } } - ] + ], + "currentTab": 5 } ], "direction": "horizontal", - "width": 300, - "collapsed": true + "width": 300 }, "left-ribbon": { "hiddenItems": { @@ -214,32 +236,54 @@ "obsidian-excalidraw-plugin:New drawing": false } }, - "active": "e91533ab6a3d6c5c", + "active": "8e1d4bedc8a7f5b5", "lastOpenFiles": [ - "finder-template-generator-ssg/vite.config.ts.timestamp-1788798340923-a41776d588ffd.mjs", - "finder-template-generator-ssg/dist/changelog/index.html", - "finder-template-generator-ssg/dist/changelog", - "finder-template-generator-ssg/dist/configeditor/index.html", - "finder-template-generator-ssg/dist/configeditor", - "finder-template-generator-ssg/dist/cacheviewer/index.html", - "finder-template-generator-ssg/dist/cacheviewer", - "finder-template-generator-ssg/dist/assets/viewer.js", - "finder-template-generator-ssg/dist/assets/viewer.css", - "finder-template-generator-ssg/dist/assets/products.js", - "finder-template-generator-ssg/dist/assets/markdownstyle.css", - "finder-template-generator-ssg/dist/findermap.svg", - "cmd/findergen/frontend/findermap.svg", - "finder-template-generator-ssg/public/findermap.svg", - "CHANGELOG.md", - "Map.md", - "tags.md", - "dub/SSG Plugin Build Time Code.md", - "finder-template-generator-ssg/node_modules/tsx/node_modules/@esbuild/win32-x64/README.md", - "finder-template-generator-ssg/node_modules/tsx/node_modules/esbuild/README.md", - "finder-template-generator-ssg/node_modules/tsx/node_modules/esbuild/LICENSE.md", - "finder-template-generator-ssg/node_modules/tsx/README.md", - "CUSTOM_TEMPLATES.md", - "README.md", - "IDEAS.md" + "template-management-system(1)/node_modules/@types/node/domain.d.ts", + "template-management-system(1)/node_modules/@types/node/events.d.ts", + "template-management-system(1)/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts", + "template-management-system(1)/node_modules/@types/node/ts5.6/index.d.ts", + "template-management-system(1)/node_modules/@types/node/ts5.6/globals.typedarray.d.ts", + "template-management-system(1)/node_modules/@types/node/ts5.6/compatibility", + "template-management-system(1)/node_modules/@types/node/ts5.6/buffer.buffer.d.ts", + "template-management-system(1)/node_modules/@types/node/ts5.6", + "template-management-system(1)/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts", + "template-management-system(1)/node_modules/@types/node/ts5.7/index.d.ts", + "template-management-system(1)/node_modules/@types/node/ts5.7/compatibility", + "template-management-system(1)/node_modules/@tailwindcss/postcss/README.md", + "template-management-system(1)/public/placeholder.svg", + "template-management-system(1)/public/placeholder.jpg", + "template-management-system(1)/public/placeholder-user.jpg", + "template-management-system(1)/public/placeholder-logo.svg", + "template-management-system(1)/public/placeholder-logo.png", + "template-management-system(1)/public/icon-light-32x32.png", + "template-management-system(1)/public/icon.svg", + "template-management-system(1)/public/icon-dark-32x32.png", + "template-management-system(1)/public/apple-icon.png", + "uploadpage/node_modules/lucide-react/README.md", + "uploadpage/node_modules/class-variance-authority/README.md", + "uploadpage/node_modules/date-fns/docs/i18n.md", + "uploadpage/node_modules/date-fns/docs/webpack.md", + "uploadpage/node_modules/date-fns/docs/unicodeTokens.md", + "uploadpage/node_modules/date-fns/docs/timeZones.md", + "uploadpage/node_modules/date-fns/docs/gettingStarted.md", + "uploadpage/node_modules/date-fns/docs/release.md", + "uploadpage/node_modules/date-fns/docs/logotype.svg", + "uploadpage/node_modules/date-fns/docs/i18nContributionGuide.md", + "uploadpage/node_modules/date-fns/docs/fp.md", + "uploadpage/node_modules/date-fns/docs/cdn.md", + "uploadpage/node_modules/date-fns/SECURITY.md", + "uploadpage/node_modules/date-fns/README.md", + "uploadpage/node_modules/date-fns/LICENSE.md", + "uploadpage/node_modules/date-fns/CHANGELOG.md", + "uploadpage/node_modules/@date-fns/tz/README.md", + "uploadpage/node_modules/@date-fns/tz/LICENSE.md", + "uploadpage/node_modules/@date-fns/tz/CHANGELOG.md", + "uploadpage/node_modules/@standard-schema/spec/README.md", + "uploadpage/node_modules/zod/README.md", + "uploadpage/node_modules/nanostores/README.md", + "uploadpage/node_modules/kysely/README.md", + "uploadpage/node_modules/better-call/node_modules/@better-auth/utils/README.md", + "uploadpage/node_modules/better-call/README.md", + "stuffcanvas.canvas" ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 1b4bb337..106208ee 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,9 @@ "Map.md": true, ".zed": true, ".vs": true, - // "dub": true + // "dub": true, + "**/node_modules": true, + "**/.next": true, + "**/*.tgz": true, }, } diff --git a/AGENTS.md b/AGENTS.md index 030463c9..b67e151d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -98,11 +98,13 @@ Use: - `"*"` for any folder name - `"my-app"` for exact name -- `"project-*"` for wildcard matching +- `"project-*"` for glob wildcard matching +- `"^project-[0-9]+$"` for regex matching Important: -- This is checked with glob-like matching, not arbitrary regex. +- Matching is exact-first, then regex, then glob fallback (see + the "Pattern matching" section below). - If you want to match all folders, prefer `"*"`. ### `files` (array) @@ -276,6 +278,139 @@ Minimum finder version compatibility. "min_version": "0.3.16" ``` +### `mdnote` (string) + +Optional Markdown note attached to a template. It is rendered in the +web UI (template viewer / creator) as rich text and is ignored during +matching. Since 0.3.17. + +```json5 +"mdnote": "# My template\n\nSome **markdown** explaining what this matches." +``` + +Note: the value is normally stored percent-encoded (like +`encodeURIComponent`) when generated by the web creator — newlines +become `%0A` — but any plain Markdown string is valid and supported. + +--- + +## 3.5) Pattern matching: regex, glob, and exact + +Every name pattern in a template — the top-level `name`, every file +`name`, and every folder `name` (including nested folders) — is +resolved by the same matching function: + +```go +if pattern == name { + return true // 1) exact string match +} +if ok, err := regexp.MatchString(pattern, name); err == nil { + return ok // 2) full Go regex +} +ok, err := path.Match(pattern, name) +return err == nil && ok // 3) glob fallback +``` + +This creates a 3-tier matching strategy: + +| Priority | Method | Applies when | +| -------- | ------------------------------- | ------------------------------------------ | +| 1 | exact string equality | pattern equals the name verbatim | +| 2 | Go regex (`regexp.MatchString`) | pattern is a valid regular expression | +| 3 | glob (`path.Match`) | pattern is not a valid regex (e.g. `*.ts`) | + +### How to choose a pattern + +Because regex is attempted before glob, the same character can mean +different things depending on the pattern: + +- `"*.go"` is not a valid regex, so it is treated as a glob and + matches any file ending in `.go`. +- `"^main\.py$"` is a valid regex (anchored, no wildcard ambiguity), + so it matches exactly one name. +- `"project-*"` is not a valid regex, so it is treated as a glob. + +### Go regex syntax (priority 2) + +Patterns that compile as a Go regular expression match with full regex +semantics against the entire entry name. Refer to Go's +`regexp/syntax` (RE2) for the full language. Useful constructs: + +- anchors: `^...$` +- character classes: `[0-9]`, `[a-zA-Z]`, `[^...]` +- predefined classes: `\d`, `\w`, `\s` (and uppercase negations) +- quantifiers: `*`, `+`, `?`, `{m,n}` +- alternation: `(a|b)` +- groups: `(abc)`, non-capturing `(?:abc)` +- escapes: `\.`, `\\` + +Examples: + +```json5 +// folder names like project-123, project-42 ... +{ name: "^project-[0-9]+$" } +``` + +```json5 +// python entry files: main.py, app.py, ... +{ + name: "^(main|app|server)\\.py$", + existence: "required", +} +``` + +Note: Go regex is RE2 — no backreferences and no lookahead/lookbehind. +If your pattern uses those, it fails to compile and falls back to glob. + +### Glob syntax (priority 3 fallback) + +When a pattern is not a valid regex, it is treated as a glob via Go's +`path.Match`: + +- `*` matches any sequence of non-`/` characters +- `?` matches any single non-`/` character +- `[abc]` matches one character from the class +- `[^abc]` / `[!abc]` matches one character not in the class +- `\x` escapes the next character + +There is no recursive `**` (doublestar) support — `**` does not +descend into subdirectories. + +Examples: + +```json5 +"name": "*.ts", +``` + +```json5 +"name": "file?.txt", +``` + +```json5 +"name": "[abc].go", +``` + +### Where these patterns apply + +- top-level `name` → the scanned directory name +- `files[].name` → file names inside the directory +- `folders[].name` → subfolder names (recursively for nested folders) + +Regex patterns work in all of these places. Exact glob patterns like +`"src"` or `"package.json"` work exactly as before. + +### Compatibility note + +Regex support was added in finder 0.3.17. If your template relies on +regex patterns, set: + +```json5 +"min_version": "0.3.17" +``` + +Templates for older finder versions should keep using glob or exact +patterns only. + --- ## 4) Matching semantics @@ -336,14 +471,18 @@ Not a huge list of optional files. If your project has a `README.md` in many folders, do not require it unless it is central to your pattern. -### Use wildcards carefully +### Use wildcards and regex carefully ```json5 "name": "*.git" // if you intended a hidden git folder, this is special-case logic ``` Use patterns like `"*"`, `"src"`, `"*.ts"`, `"package.json"` rather -than complex regex-style expressions. +than complex regex-style expressions when a simple glob suffices. + +When you do need regex (e.g. matching `project-123` with +`^project-[0-9]+$`), anchor with `^` and `$` to avoid unintended +matches. --- @@ -444,6 +583,53 @@ exactly. } ``` +### Example F: regex-matched folder name + +```json5 +{ + description: "Numbered project folder", + name: "^project-[0-9]+$", + files: [ + { + name: "^(main|app)\\.py$", + existence: "required", + }, + ], + tags: ["python", "numbered"], + min_version: "0.3.17", +} +``` + +This matches folders like `project-123` or `project-42` and requires +exactly one of `main.py` or `app.py` to be present. The name uses a +Go regex (RE2) — note the escaped dots `\\.` and anchors `^...$`. + +### Example G: regex file pattern with glob fallback + +```json5 +{ + description: "JavaScript project with strict entry points", + name: "*", + files: [ + "package.json", + { + name: "^(index|main|app)\\.(js|ts|jsx|tsx)$", + existence: "required", + }, + { + name: "\\.env$", + existence: "forbidden", + }, + ], + tags: ["javascript", "strict"], + min_version: "0.3.17", +} +``` + +This requires one of `index.js`, `main.js`, `app.js`, `index.ts`, etc. +and forbids any file ending in `.env`. Note that `"*.env"` would also +work as a glob — the regex version is more explicit. + --- ## 7) Rules for AI-generated Finder templates @@ -509,17 +695,24 @@ many files. Prefer the smallest signal that distinguishes the project type. -### Mistake 3: using regex-like expressions instead of glob matching +### Mistake 3: mixing regex and glob syntax unintentionally + +Finder tries regex first, then falls back to glob. This is usually +fine, but remember that a pattern that looks like a regex is treated +as a regex: -Finder uses glob-like matching through `path.Match`, not full regex. +- `"*.ts"` is invalid regex → glob, matches any `.ts` file +- `"^main\\.py$"` is valid regex → only matches exactly `main.py` Use: - `*.ts` - `package.json` - `src` +- `^project-[0-9]+$` (regex, only when you need it) -not arbitrary regex syntax. +Do not write patterns that accidentally compile as a regex and change +meaning. If in doubt, prefer glob or exact names. ### Mistake 4: forgetting the `.json5` extension diff --git a/CHANGELOG.md b/CHANGELOG.md index 542cd852..0c48cb65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,243 @@ _The whole finder CHANGELOG_ - added regex support - added mcapp minecraft world dashboard - fixed buildcheck workflow +- added markdown notes to the templates which can be viewed in the web UI +- added command to view count of locations which where found +- added option to view the cache size +- updated the regex creator +- fixed a bug in the argparser lib where global flag where not found in subcommands + +### Commits + +- _[8e63902](https://github.com/shadowdara/finder/tree/8e6390298c29bfeb6984a7e40190cb6eaa6d3350)_ Update frontend assets, templates & deps + Regenerate frontend/site assets and metadata: update cmd/findergen frontend main_entry.js (changelog/docs/markdown additions), bump lightningcss to 1.33 in dependency lists, and refresh generated site stats (npm/site/data/backend.json and gh-pages.json). Also update templates index (npm/site/src/templates.js) to add min_version/tags for many templates. These changes reflect a site build and template metadata refresh. + +- _[40751f1](https://github.com/shadowdara/finder/tree/40751f1a279c1c22be7b342ca3a7d66d86d5313b)_ Add min_version, tags and mdnote to templates + Add "min_version": "0.3.17" across many templates (templates/ and internal/templates/), add tags to several templates (examples: mistral → ai; next/nuxt/remix/redwood/react-native → web; quarkus → java; quart → python; rethinkdb → docker), and perform minor JSON5 formatting cleanups. Update AGENTS.md and npm/site/data/agents.md to document the new mdnote field for templates. These changes document and enable the newer Finder features while improving template metadata for discovery. + +- _[2a26856](https://github.com/shadowdara/finder/tree/2a2685670c78253e5a932583e800e0c9a2a2d960)_ Update package-lock.json + +- _[0ccc718](https://github.com/shadowdara/finder/tree/0ccc718573804ae15ce455fa0b7a8769cd57e61f)_ Update check.py + +- _[0191e23](https://github.com/shadowdara/finder/tree/0191e2303a83e2680689870dfbdd4e0209b9ca27)_ Update finder templates to v0.3.17 + This change bumps the project to finder-lib 0.3.17 and updates template metadata across the built-in template catalog, adding tags and min_version fields for many templates. It also moves the syntax highlighter to the shared finder-lib package, refreshes the creator preview styling, and fixes template parsing/size field compatibility with the new schema. + +The diff also includes git parser cleanup and compatibility updates in the Go scanner code, plus dependency and generated site data refreshes that match the new library version. + +- _[86252b8](https://github.com/shadowdara/finder/tree/86252b87e6fb905fc15e2e6c4f17203d9503f52b)_ Add markdown notes and regex tooling + This change adds markdown note support to templates and exposes it in the template viewer/editor, plus several creator and regex builder improvements. It also updates the default Finder server port to 13420, expands installer script support for latest-version resolution, and refreshes the docs/site assets and config schema to match the newer template and UI behavior. + +- _[7927ca0](https://github.com/shadowdara/finder/tree/7927ca03ae8143c80d4c6e01acbfc4353a4b927b)_ Add Monaco editor and template view updates + This commit adds a Monaco-based JSON editor to the dashboard template form, prevents empty template content from being saved, and updates template rendering to support optional close controls and markdown notes. It also wires the new editor dependency into the app and lockfiles. + +- _[8dbd64a](https://github.com/shadowdara/finder/tree/8dbd64a87291179a340767c2c02ebb9e5f272d31)_ Add template markdown preview + This change introduces a reusable TemplateView modal for template details, rendering both the JSON content and the rendered markdown notes in the hub UI. It also adds markdown styling for the preview pane and updates the folder metadata comments to reflect the single-line whitespace-normalized storage format used for mdnote content. + +- _[01c3ad7](https://github.com/shadowdara/finder/tree/01c3ad7c8253b11d3b7ac5debef943106288431c)_ Switch markdown notes to mdnote + This change replaces the previous Base64 markdown note field with a percent-encoded `mdnote` across the Go model, TypeScript types, and web UI. The template creator and viewer now encode/decode note content consistently, and the hub app renders markdown notes directly. It also adds a new sample template and updates the hub dependency list to include the markdown parsing helper. + +- _[ff90e22](https://github.com/shadowdara/finder/tree/ff90e2204ffa481e6867ccd65ef3882fd7da1926)_ safe + +- _[dc91ca1](https://github.com/shadowdara/finder/tree/dc91ca10bae42f25fe89b9c4409e1c4d25a7edb2)_ Move template site under npm/site + Relocate the finder template generator SSG app from finder-template-generator-ssg to npm/site and update repository ignores for generated build artifacts. This keeps the site assets in the npm package structure and prevents local build outputs like node_modules, dist folders, and tsbuildinfo files from being tracked. + +- _[cd28c08](https://github.com/shadowdara/finder/tree/cd28c081e5df6f57dc5d3bbcb0db8fd7b8f3d03d)_ Highlight Finder template patterns + Use a dedicated JSON highlighter for Finder templates and colorize regex/glob tokens in `name` fields. This keeps the existing dark theme while making pattern matches easier to read in template previews for discover and user pages. + +- _[020dccf](https://github.com/shadowdara/finder/tree/020dccfa1ed824fa275318fa1ebcfcf255a0a740)_ Add prettyJson util and normalize template input + Extract prettyJson into lib/utils and use it across dashboard, discover and user clients to pretty-print template JSON in editors and views. + +Improve template input validation in npm/hub/lib/templates.ts: stricter type checks, parse-and-normalize JSON content before applying the byte-size limit, normalize/trim/lowercase tags and deduplicate them, and ensure saved content is non-null. Also apply minor formatting/TS fixes. + +Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> + +- _[18d87ce](https://github.com/shadowdara/finder/tree/18d87ce833e9aa0456ae055cae5350384f6b3511)_ Split user page into client component + Refactor the user profile page into a server page plus a dedicated client component to keep data fetching server-side while preserving the template preview modal behavior. The dashboard also gains navigation links back to Discover and the current user's profile page. + +- _[2037eb7](https://github.com/shadowdara/finder/tree/2037eb7d016a3f35a5c0e1142802ef9a540a0507)_ Update discover-client.tsx + +- _[9b92160](https://github.com/shadowdara/finder/tree/9b9216051ad862bc6d963adf41165470466c5a29)_ safe + +- _[7a6b065](https://github.com/shadowdara/finder/tree/7a6b0653f161a2366c789373bcd69de66b6545a6)_ Update .gitignore + +- _[baf7ab4](https://github.com/shadowdara/finder/tree/baf7ab49f2b65cde3f63e333d332bc449ecd85ad)_ Update page.tsx + +- _[8d61c88](https://github.com/shadowdara/finder/tree/8d61c888e1526e8b8a105bf7fc737b17fe85e0be)_ Update export-db.js + +- _[b0cc24b](https://github.com/shadowdara/finder/tree/b0cc24b5c4c33dadc89e23878fed1f4873fe3aae)_ update + +- _[8d43807](https://github.com/shadowdara/finder/tree/8d438078e9fb8a271d887a3f3ce4ad96e89ea6b8)_ Update layout.tsx + +- _[bfbc058](https://github.com/shadowdara/finder/tree/bfbc0586ecbc5661ba4818c11460e4e8eaf38fb8)_ Update .gitignore + +- _[b200860](https://github.com/shadowdara/finder/tree/b200860739c84e3d3b7023a13daadeb4b2203d87)_ Create export-db.js + +- _[6cd2139](https://github.com/shadowdara/finder/tree/6cd213924831dd09879fedccbafce74def7e2a02)_ f + +- _[5fcb63f](https://github.com/shadowdara/finder/tree/5fcb63f3cbfd2756fc6ed4e8fd8eb5c97b445668)_ Delete next-env.d.ts + +- _[f0cde71](https://github.com/shadowdara/finder/tree/f0cde71003874d462c8c94de10762abd472ad449)_ Add template highlighting and styling refresh + Refreshes the hub styling to a more consistent, formatted CSS layout and adds Highlight.js theme support for syntax-highlighted template previews. This also includes the related dependency updates for Highlight.js typings and a small cleanup in the discover client. + +- _[7ec7ef5](https://github.com/shadowdara/finder/tree/7ec7ef5f60dd446f22984a7d51674fed26c1d653)_ Add template discovery polish and templates + Adds two new custom Finder templates and updates the template discovery page to render highlighted JSON in the modal. This also includes the highlight.js dependency and a Next.js type-path fix for local dev builds. + +- _[0b88cdf](https://github.com/shadowdara/finder/tree/0b88cdfd3d3782e3137d974022b04763270f44c7)_ Create test.env + +- _[a6cb8aa](https://github.com/shadowdara/finder/tree/a6cb8aa8ba3075ee5b2d63f142dd965295783dbf)_ Update Dockerfile + +- _[0bf8cfd](https://github.com/shadowdara/finder/tree/0bf8cfdba50162eb1e01adec258b98663846a1b8)_ Add gitdb package to export Git repos + Introduce a new pub/db/git package that scans Git repositories via the system Git CLI and exports data to SQLite or JSON. Adds implementations for CLI interaction, scanning, models, JSON/SQLite exporters (with gzip blob storage), and helper utilities. Includes comprehensive unit & integration tests, package documentation (doc.go) and a README (German). Also bumps go.mod to go1.25 and adds modernc.org/sqlite plus related indirect dependencies; go.sum updated accordingly. + +- _[c49e253](https://github.com/shadowdara/finder/tree/c49e253aa17e467e375202a24fbba8edcb88d9d1)_ Update index.html + +- _[9c45e9d](https://github.com/shadowdara/finder/tree/9c45e9dcabaf1c1971e9e5e40ae24ab5803ca3bf)_ Add Nginx dashboard service + Add a new 'dashboard' service to docker-compose.yml (exposed on 8080) and include docker/dashboard/Dockerfile (nginx:alpine) plus a static index.html UI. The dashboard provides a simple status page that pings findergen, template-site, uploadpage, and static-site (localhost ports 3013–3016), shows online/offline states, and refreshes every 15s. Files added: docker/dashboard/Dockerfile and docker/dashboard/index.html; docker-compose.yml updated to build the service. + +- _[d5a1c63](https://github.com/shadowdara/finder/tree/d5a1c639554eeb018ec08e1054b64176121b479a)_ Update index.ts + +- _[65133c5](https://github.com/shadowdara/finder/tree/65133c5612cb80c7757185a160d006659f487830)_ s + +- _[24a8ec2](https://github.com/shadowdara/finder/tree/24a8ec293c316c0ce05df9518cdd7651913c5a7c)_ Update next-env.d.ts + +- _[faf8f39](https://github.com/shadowdara/finder/tree/faf8f391cfb5577c55ea630e952bca91f3c64834)_ Update pnpm-workspace.yaml + +- _[3cdf75a](https://github.com/shadowdara/finder/tree/3cdf75a3c4d46ad776c6243b9c08687d34f247d9)_ Update pnpm-workspace.yaml + +- _[61ad2e9](https://github.com/shadowdara/finder/tree/61ad2e9c6d3336035ae4d6edd3dd6ae21df8a134)_ Update pnpm-workspace.yaml + +- _[032dff2](https://github.com/shadowdara/finder/tree/032dff27052b8135a5d64f7033f57a8f804f48ee)_ Update Dockerfile + +- _[3b40048](https://github.com/shadowdara/finder/tree/3b40048630819274f3fc3b89d30fb5822857dafe)_ Add static site and type compatibility fixes + Adds a Dockerized static template site served via nginx on port 3016 and a new staticroot build mode for the SSG generator. Also updates the finder-lib template type naming to `Template`, fixes the Next.js generated type paths in the hub app, and includes the local `@shadowdara/finder-lib` package in the workspace configuration. + +- _[f30d2d4](https://github.com/shadowdara/finder/tree/f30d2d4380a1857bb21258330521520be5a1b6de)_ added style + +- _[f6ee93b](https://github.com/shadowdara/finder/tree/f6ee93b32a41167b08bc3c5f2e1f0a9c2c5b09d4)_ Update pnpm-workspace.yaml + +- _[a9a5be5](https://github.com/shadowdara/finder/tree/a9a5be5693b5757ffd60358f2722e662cd92b3f2)_ Add template tags and discovery UI + This change adds tag support to template records and search/filtering in the discovery API and UI. It also adds user profile pages, exposes template metadata to the frontend, validates uploaded JSON against the Finder schema, and updates the dashboard to collect comma-separated tags for each template. + +- _[fb4f9e7](https://github.com/shadowdara/finder/tree/fb4f9e7e24d0c716ac8142c34fcf41e25e18bb65)_ Update index.ts + +- _[141f271](https://github.com/shadowdara/finder/tree/141f271cf29b3d497ffbeee69cfbb2508202fee5)_ Add recovery-checksum auth flow and account APIs + Implements a user-owned recovery checksum for password recovery and account management. Adds crypto helpers, Prisma field (recoveryKeyHash) and API routes for recovery-key, reset-password and account deletion. Updates auth config to disable email verification/sendResetPassword, updates UI (sign-up displays checksum, forgot/reset/verify pages simplified) and dashboard to allow account deletion. Misc: add .dockerignore, adjust Dockerfile and package.json docker:build, and extend finder-lib TS types. Requires a Prisma migration to add the new column. + +- _[ce65df3](https://github.com/shadowdara/finder/tree/ce65df3a1073efaefe6842cffbedcef62a8a871b)_ s + +- _[e45bbfd](https://github.com/shadowdara/finder/tree/e45bbfd04806cb26a703aca14518ec4756c5790a)_ Fix template site Docker build + Update the template site container to build from the repo root and copy the SSG app from its subdirectory. Also align Next.js generated type imports with the production build layout and enable standalone output for the Hub app. + +- _[dc27baa](https://github.com/shadowdara/finder/tree/dc27baab88d28fc77fe972b24e8c31eefe3e1ef1)_ Add local dev mailbox, auth flows, UI & Docker fix + Introduce a development-only local mailbox and wire it into authentication and the UI. Added npm/hub/lib/local-mailbox (save/get/clear + env gate), a dev API route /api/dev-mailbox, and updated server auth to save verification/reset emails. Exported verification/reset helpers from auth-client. New UI pages: forgot-password, reset-password, verify-email; sign-in now links to forgot-password and sign-up redirects to verify-email. Also fixed docker-compose Dockerfile path and added start/stop snippets to docker/README.md. + +- _[13e5279](https://github.com/shadowdara/finder/tree/13e52794817494c5b8fdebfbf4b626a7bb53f2c2)_ updated compose + +- _[19a1da4](https://github.com/shadowdara/finder/tree/19a1da42ac4e2a8f2dad4d42b0a5553d89156af7)_ Add Docker setup for app services + Adds Docker Compose configuration and per-service Dockerfiles for the findergen API, template SSG, and upload page. Updates nginx proxying to route /api requests to findergen, and removes the obsolete dub README placeholder. + +- _[69ad841](https://github.com/shadowdara/finder/tree/69ad841eb06670319854b57734f0ec4a63444487)_ added discover + +- _[a99c32b](https://github.com/shadowdara/finder/tree/a99c32b06688154f018ed1088a99c09c9920da48)_ added template hub + +- _[8e6ec6f](https://github.com/shadowdara/finder/tree/8e6ec6f16122bc83b524ee9d292f94530be04076)_ added finder template lib + +- _[a31ded0](https://github.com/shadowdara/finder/tree/a31ded08b1ca2f4cadf50b71ae2ebaa9d8af6bb0)_ Update backend asset stats; fix note preview closure + Regenerate finder-template-generator-ssg backend metadata: updated generatedAt, total file counts/sizes, by-extension percentages and many asset entries (renames, size adjustments, added viewer/regexcreator/markdown assets). Also make a small TypeScript refactor in src/creator/main.tsx: introduce a narrowed noteFolder variable for the note preview closure and tidy querySelector formatting to avoid nullable-reference issues. + +- _[c63f0ff](https://github.com/shadowdara/finder/tree/c63f0ff15a172d1ab33129efa53119b1386ca127)_ Delete stuffcanvas.canvas + +- _[f79ca20](https://github.com/shadowdara/finder/tree/f79ca209dd8f0e51be27f4546ae9d724a35aefff)_ Update .gitattributes + +- _[459c72f](https://github.com/shadowdara/finder/tree/459c72f0b1afac10a5e79ebb50b8d7da705efcb9)_ Update style.css + +- _[fa4eb4c](https://github.com/shadowdara/finder/tree/fa4eb4c4c8663d913f4435d3b62174052d1737d4)_ Update Map.md + +- _[aa4d6be](https://github.com/shadowdara/finder/tree/aa4d6be30390e2e06c5d5b53c300f35da2e52fd7)_ Add cache count and size commands + This change adds CLI support for viewing cache statistics. It introduces a --count flag for search results and a cache-size command that calculates the Finder cache directory size, printing JSON or human-readable output depending on the output mode. Search and result printing were updated to support count-only output without listing matches. + +- _[6629fab](https://github.com/shadowdara/finder/tree/6629fab4a70c9a2599b94e08d1da0e5272f03144)_ Add Markdown note support to creator + This change adds Markdown note editing to the template creator and persists it as mdnote_base64 on the root folder so unicode text survives JSON export/import. It also wires the creator to the app version from package.json, initializes the root min_version from that value, and adds the corresponding field to the Go folder schema. + +- _[a356afe](https://github.com/shadowdara/finder/tree/a356afe8da62c0bfd9675f7f17c0594dfd936981)_ Render markdown notes in template viewer + Adds support for optional markdown notes stored in template JSON (mdnote_base64), decodes them in the viewer modal, and renders them with dedicated styling. This keeps template metadata readable without altering the raw JSON format. + +- _[07b256a](https://github.com/shadowdara/finder/tree/07b256a99a159ca695490df788cd08235641078f)_ Add match modes and share/restore UI + Introduce match modes and state sharing UI for the regex creator. + +- UI: add a mode-selector (exact, startsWith, endsWith, contains), Base64 export field, copy button and restore input + feedback; update placeholders and tester hints. Styles added in regexcreator.css for selector and share/restore widgets. +- Logic: regexcreator.tsx wires mode buttons, share serialization (Base64 UTF‑8), clipboard copy, restore parsing and UI feedback. +- Core: src/lib/regex.ts adds MatchMode and mode option, assembles anchored/negated patterns per mode and returns the RegExp accordingly. + +Improves flexibility for file-extension and substring matching and allows saving/loading editor state. + +- _[f9d9fe7](https://github.com/shadowdara/finder/tree/f9d9fe7cbc542aa1e96127baba26060920ca7b55)_ fixed a bug in the argparser lib where global flag where not found in subcommands + +- _[a9eef48](https://github.com/shadowdara/finder/tree/a9eef48c9d0707d22662be9113010178d3b775f7)_ Update parse.go + +- _[edee477](https://github.com/shadowdara/finder/tree/edee477f59fa56c16db9c3fd5b65fef65234c656)_ Update main.go + +- _[7f99de7](https://github.com/shadowdara/finder/tree/7f99de7f20063099b3a976961981f0613a3fa4ae)_ Update SECURITY.md + +- _[85d00b4](https://github.com/shadowdara/finder/tree/85d00b4106bd9054071008e120db4da40e1592b2)_ Create stuffcanvas.canvas + +- _[d296196](https://github.com/shadowdara/finder/tree/d2961966d1f0ea56e9c87b836a2cb0e7d8a65a02)_ Update README.md + +- _[2d67a8e](https://github.com/shadowdara/finder/tree/2d67a8e6aaf0ce69021701642f21176a11abf057)_ add regexes + +- _[e79e682](https://github.com/shadowdara/finder/tree/e79e682174113a5e5fe6e7faab0292b41847cbd0)_ Update main.tsx + +- _[c2347c7](https://github.com/shadowdara/finder/tree/c2347c7706c5d23ed1b0f174b50f3ce6d806841f)_ safe site + +- _[3e9fc82](https://github.com/shadowdara/finder/tree/3e9fc82faee789fa9f4134acfc478d5a5dd2e188)_ added install maker + +- _[fdbd2ee](https://github.com/shadowdara/finder/tree/fdbd2ee7736d433457b18ebfd26a0949b560710e)_ safe + +- _[5653869](https://github.com/shadowdara/finder/tree/56538690b1ef196579264c1415ee61488319c646)_ install script creator + +- _[4c96c4a](https://github.com/shadowdara/finder/tree/4c96c4ac2b312f7a29285ad7e87461bfdd6ba08a)_ Create AGENTS.md + +- _[d5ffc11](https://github.com/shadowdara/finder/tree/d5ffc1152cf067df216a47332b05bb54beb895cc)_ Update main.go + +- _[f235ce4](https://github.com/shadowdara/finder/tree/f235ce411f109703b3dedc547cbacadb4aab82cf)_ Potential fix for code scanning alert no. 6: Arbitrary file access during archive extraction ("Zip Slip") + Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> +- _[0e98acb](https://github.com/shadowdara/finder/tree/0e98acb45da20781107245b8aa6b0900977187ae)_ update vite + +- _[2d3fad6](https://github.com/shadowdara/finder/tree/2d3fad616a14a75ec1915ba8c65a0a522443babf)_ rm notes + +- _[65a4693](https://github.com/shadowdara/finder/tree/65a4693dad5c5b67d5367430ce546921cfdfb63b)_ fix versions + +- _[6a579fc](https://github.com/shadowdara/finder/tree/6a579fc80bf50b5de8f8068a9f41ecf0afd3388e)_ Potential fix for code scanning alert no. 5: Prototype-polluting function + Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> +- _[810b2b4](https://github.com/shadowdara/finder/tree/810b2b4f1e88aa129fa10925e2be767734d5b06a)_ Potential fix for code scanning alert no. 4: Prototype-polluting function + Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> +- _[f65a04f](https://github.com/shadowdara/finder/tree/f65a04f62de4f12d2bdf7a624011205fe7c7c3fb)_ fix permission + +- _[a50028e](https://github.com/shadowdara/finder/tree/a50028e7538e696f511c08da698cdcfbc401df56)_ safe + +- _[24a495c](https://github.com/shadowdara/finder/tree/24a495cbfc6b1ebe6ef9a600b62ea34a6876964d)_ fixed path opener + +- _[c6c7c70](https://github.com/shadowdara/finder/tree/c6c7c700d647db048179a60ee7429d670ae6b8a6)_ added mc world viewer + +- _[5ac6ec8](https://github.com/shadowdara/finder/tree/5ac6ec84689974efb6c562e4ed50bef26b233921)_ adding mc server + +- _[bbfcd6c](https://github.com/shadowdara/finder/tree/bbfcd6cd038277815191b0da2b502362e4bfdb67)_ added to path + +- _[0701b46](https://github.com/shadowdara/finder/tree/0701b46767a8ee1e702348c704616985e6a8f530)_ fixed viewer site + +- _[be035fa](https://github.com/shadowdara/finder/tree/be035fa6457e553560380cd102d2fee386572ea0)_ tets + +- _[9609fc1](https://github.com/shadowdara/finder/tree/9609fc1f3b2126806c7fab29bb364fd086d28d9e)_ Update .gitattributes + +- _[2d2177a](https://github.com/shadowdara/finder/tree/2d2177acd9c8b548d5fa0ae34a0e716cf4d8dc0d)_ added info to help + +- _[3a9ffd3](https://github.com/shadowdara/finder/tree/3a9ffd355b36e15b2707f4b7a098955b876cb0c9)_ Update .gitattributes + +- _[59a3675](https://github.com/shadowdara/finder/tree/59a3675ce16c07410639edf1cae95c030c4f90c6)_ added regex creator + +- _[c5a77be](https://github.com/shadowdara/finder/tree/c5a77be5243da2728d421ce761cc75e40fd52d6c)_ regex + +- _[c41219a](https://github.com/shadowdara/finder/tree/c41219ae4b2326a88abdd3c7c15627f179b0ed4e)_ add csf ## 0.3.16 - 08.09.2026 diff --git a/Dockerfile b/Dockerfile index fd0e154c..a724c2cd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,4 +4,8 @@ FROM alpine:latest RUN apk add --no-cache curl +RUN curl -fsSL https://raw.githubusercontent.com/ShadowDara/finder/refs/heads/main/install.sh | sh + +ENV PATH="/root/.local/bin:${PATH}" + CMD ["sh"] diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu new file mode 100644 index 00000000..2e7d768f --- /dev/null +++ b/Dockerfile.ubuntu @@ -0,0 +1,28 @@ +# Basis-Image +FROM ubuntu:latest + +# Aktualisierung der Paketlisten und Installation von Neovim +RUN apt-get update && \ + apt-get install -y neovim && \ + apt-get install -y curl git + +# Benutzer erstellen +RUN useradd -m user + +# Arbeitsverzeichnis anlegen +WORKDIR /home/user + +# Als ROOT: Home-Verzeichnis dem User zuweisen. +# WICHTIG: muss VOR `USER user` laufen, sonst fehlen die Rechte. +RUN chown -R user:user /home/user + +# Kopieren der initiale Konfiguration für Neovim (optional). +# Auch als root kopieren und direkt dem User zuweisen: +# COPY neovim-config/init.vim /home/user/.config/nvim/init.vim +# RUN chown -R user:user /home/user/.config + +# Benutzer als Standardbenutzer setzen (erst JETZT wechseln) +USER user + +# Default-Befehl (optional - z.B. Neovim starten) +# CMD [ "nvim" ] diff --git a/Map.md b/Map.md index ab1ab9f0..4bb20cfa 100644 --- a/Map.md +++ b/Map.md @@ -7,6 +7,119 @@ tags: [excalidraw] ==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving' # tags.txt +# Markdown Images + + + +Hier sind ein paar Ideen, basierend auf dem, was die Seite aktuell schon bietet: + +--- + +## 🎯 Quick Wins (relativ einfach umsetzbar) + +### 1. **Template Validator / Checker** +Seite wo man JSON5 pasten oder hochladen kann und sofort sieht, ob das Template valide ist — mit Schema-Validierung und Fehlermeldungen. Ähnlich wie `./finder check`, aber im Browser. + +### 2. **Tag Explorer / Kategorie-Browser** +Die 400+ Templates haben Tags (`python`, `node`, `ai`, `game-dev`, etc.). Eine Seite, die Tags als Baum oder Cluster visualisiert und durch Klick-navigation Templates entdecken lässt — ein bisschen wie ein "Finder für Finder-Templates". + +### 3. **Template-Vergleich (Diff View)** +Zwei Templates nebeneinander anzeigen und Unterschiede highlighten. Nützlich wenn man Varianten eines Templates vergleichen will oder eigene Forks von Built-in Templates macht. + +### 4. **Live Template Tester / Playground** +Feld wo man einen Ordnernamen + Dateiliste eingibt und sofort sieht, welche Templates matchen. Das ist im Grunde das Herz von Finder — als interaktives Tool. + +### 5. **Dark Mode Toggle** +Die Seite hat aktuell kein Theme-Switching. Ein Dark/Light Toggle mit `prefers-color-scheme` Detection wäre ein guter UX-Win. + +--- + +## 🧱 Mittlere Komplexität + +### 6. **Template-Statistiken-Dashboard** +Schon implementiert als Build-Stats (`stats.html`, `static-stats.html`) — aber das könnte man erweitern zu einem interaktiven Dashboard mit: +- Templates nach Sprache/Framework (Doughnut/Bar Charts) +- Wachstum über die Zeit (Changelog-gesteuert) +- Durchschnittliche Template-Komplexität (Dateien, Constraints) + +### 7. **Template-Import-Wizard** +Statt nur "Import"-Button im Creator: ein geführter Wizard, der ein bestehendes `.json5` File nimmt, es parsed, und Schritt für Schritt erklärt was drin ist und was man anpassen kann. + +### 8. **`AGENTS.md` / copilot-instructions.md Generator** +Tool das dir basierend auf deinen Projektdateien eine `AGENTS.md` oder `.github/copilot-instructions.md` vorschlägt — quasi die "Install Script"-Philosophie, aber für AI-Instruionsdateien. + +### 9. **Vollständige Doku-Seite** +`docs/docs/index.md` sagt aktuell nur "_soon_". Die Template-Syntax (aus `AGENTS.md`) könnte als通过suchbare, gut formatierte Doku-Seite ausgebaut werden mit interaktiven Beispielen. + +### 10. **Regex → Template Converter** +Ein Tool das eine Dateistruktur (z.B. `src/**/*.ts`, `dist/bundle.js`) als Eingabe nimmt und ein passendes Finder-Template daraus generiert. + +--- + +## 🔮 Größere Features + +### 11. **Community Template Hub** +Aktuell gibt es nur built-in und custom Templates. Ein Hub wo Leute Templates teilen können (mit Voting, Comments) — auch wenn das erstmal nur als statische "gallery" startet. + +### 12. **Template Merger** (steht schon in `IDEAS.md`) +Zwei Templates zusammenführen — z.B. ein "Node.js + Docker + CI" Composite-Template aus drei bestehenden bauen. + +### 13. **Minecraft App Features fertigstellen** +Die `mcapp/` hat schon Basic-Infrastructure, aber Datapack-Viewer, Resource-Pack-Viewer und mehr sind auskommentiert. Das wäre ein natürlicher nächster Schritt. + +--- + +## 💡 Mein Top-3-Vorschlag + +Wenn ich nur 3 choses empfehlen würde: + +1. **Live Template Tester** — das ist der "Aha-Moment" für neue User, die sofort sehen wollen was Finder macht +2. **Tag Explorer** — mit 400+ Templates ist Entdeckung das wichtigste UX-Problem +3. **Dark Mode** — quick win, hoher Return on Investment + +Soll ich eines davon konkret umsetzen? + + + + + +Basierend auf deinem Projekt und den bereits notierten Ideen in `IDEAS.md` und `Map.md` hier einige Vorschläge: + +## 🚀 Features mit hohem Nutzen + +1. **Template-Import/Export** – Benutzer können Templates als Datei teilen oder aus einer URL laden (z.B. `finder template import https://...`) +2. **`--output` Flag** – Ergebnisse in eine Datei schreiben (`finder git --output results.txt` oder `--json --output results.json`) +3. **`--max-depth` Flag** – Suchtiefe begrenzen (`finder node --max-depth 3`), sehr nützlich bei großen Laufwerken +4. **Globale Tagsuche** – `finder --tag python` durchsucht alle Templates mit dem Tag `python` + +## 🛠️ Praktische Erweiterungen + +5. **Cache-Integration** – Gefundene Ergebnisse zwischenspeichern, bei erneuter Suche schnellere Ausgabe +6. **`finder compare `** – Zwei Ordner miteinander vergleichen (Doppelte Dateien per Checksum) +7. **Shell-Integration** – `finder open git` öffnet den gefundenen Ordner direkt im Explorer/Finder +8. **Exclude-Patterns** – `--exclude node_modules,.git,dist` um Verzeichnisse aus der Suche auszuschließen + +## 📊 Statistiken & Analyse + +9. **`finder stats`** – Zeigt Statistiken über gefundene Projekttypen auf dem System +10. **`finder duplicates`** – Findet doppelte Dateien über Checksums (das hast du ja schon in den Ideas) + +## 🌐 Web & UI + +11. **Finder VS Code Extension** – Ein Sidebar-Panel das Projekte im Workspace findet +12. **Live-Template-Editor** – In der Website einen visuellen Template-Editor mit Preview +13. **Template-Validierung** – `finder validate mytemplate.json5` prüft ob ein Template syntaktisch korrekt ist + +## 🔧 Technisches + +14. **`finder watch