diff --git a/.github/DISCUSSION_TEMPLATE/feature-request.yml b/.github/DISCUSSION_TEMPLATE/ideas.yml similarity index 100% rename from .github/DISCUSSION_TEMPLATE/feature-request.yml rename to .github/DISCUSSION_TEMPLATE/ideas.yml diff --git a/.github/DISCUSSION_TEMPLATE/roadmap-update.yml b/.github/DISCUSSION_TEMPLATE/roadmap-update.yml deleted file mode 100644 index 298ed88f..00000000 --- a/.github/DISCUSSION_TEMPLATE/roadmap-update.yml +++ /dev/null @@ -1,47 +0,0 @@ -title: "" -labels: [] -body: - - type: markdown - attributes: - value: | - Periodic roadmap updates from the maintainers. See the [full roadmap board](https://github.com/orgs/snapotter-hq/projects) for current status. - - - type: textarea - id: shipped - attributes: - label: Shipped - description: What landed since the last update? - validations: - required: false - - - type: textarea - id: now - attributes: - label: Now (actively working on) - description: What's currently in progress? - validations: - required: true - - - type: textarea - id: next - attributes: - label: Next (coming soon) - description: What's planned for the near term? - validations: - required: true - - - type: textarea - id: later - attributes: - label: Later (on the radar) - description: What's being considered but not yet scheduled? - validations: - required: false - - - type: textarea - id: community - attributes: - label: Community highlights - description: Shoutouts, top-voted feature requests, notable contributions. - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 239c37f6..74e18124 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,13 @@ name: Bug Report description: Something isn't working as expected +title: "[Bug] " labels: ["bug"] body: + - type: markdown + attributes: + value: | + Thanks for taking the time to file a bug. The more detail you give, especially how you run SnapOtter and how to reproduce it, the faster we can help. + - type: checkboxes id: checklist attributes: @@ -9,17 +15,26 @@ body: options: - label: I searched existing issues and didn't find a duplicate required: true - - label: I'm running the latest version of SnapOtter - required: true + - label: I've tried the latest version to confirm it isn't already fixed + required: false - type: textarea - id: description + id: what-happened attributes: - label: Description - description: What happened, and what did you expect to happen? + label: What happened? + description: Describe the actual behavior you saw. placeholder: | - When I try to resize an image, the output is blank. - I expected the resized image to be returned normally. + When I resize an image, the downloaded file is 0 bytes. + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + description: What did you expect to happen instead? + placeholder: | + The resized image downloads normally. validations: required: true @@ -27,41 +42,90 @@ body: id: steps attributes: label: Steps to reproduce - description: How can we reproduce this? + description: How can we reproduce this? Number each step. placeholder: | 1. Upload a PNG image - 2. Select "Resize" tool + 2. Select the "Resize" tool 3. Set width to 500 4. Click "Process" 5. Downloaded file is 0 bytes validations: required: true - - type: textarea - id: docker-setup + - type: dropdown + id: area attributes: - label: Docker setup - description: Paste your `docker run` command or `docker-compose.yml` (remove any sensitive values). If running from source, write "running from source via pnpm dev". - render: shell + label: Affected area + description: Which part of SnapOtter does this involve? + options: + - Image tools + - Video tools + - Audio tools + - PDF tools + - Data tools + - Image editor + - Pipelines / automation + - File library + - Account / login + - Installation / Docker / startup + - Other / not sure validations: required: true - type: input - id: image-tag + id: tool attributes: - label: Image tag - description: Which Docker image tag are you using? - placeholder: "e.g. latest, 1.17.1" + label: Specific tool + description: If this is about one tool, which one? Leave blank if it isn't tool-specific. + placeholder: "e.g. resize, background-remover, pdf-merge" + + - type: dropdown + id: install-method + attributes: + label: How are you running SnapOtter? + options: + - Docker Compose + - Running from source (pnpm dev) + - Other (describe in deployment details) + validations: + required: true + + - type: input + id: version + attributes: + label: Version + description: Image tag, release version, or git commit. Running from source? Paste the commit hash. + placeholder: "e.g. latest, 2.0.0, or a1b2c3d" + validations: + required: true + + - type: textarea + id: deployment + attributes: + label: Deployment details + description: "Your compose file or run command, with secrets redacted. Write N/A if running from source. Strongly recommended for Docker issues." + render: shell + + - type: dropdown + id: arch + attributes: + label: Host architecture + options: + - AMD64 (Intel/AMD) + - ARM64 (Apple Silicon, Raspberry Pi) validations: required: true - type: dropdown - id: platform + id: host-os attributes: - label: Platform + label: Host OS options: - - AMD64 (Intel/AMD) - - ARM64 (Apple Silicon, Raspberry Pi) + - Linux (native) + - macOS (Docker Desktop) + - Windows (Docker Desktop) + - Windows (WSL2) + - Other / running from source validations: required: true @@ -69,13 +133,14 @@ body: id: browser attributes: label: Browser + description: Only if the bug is in the web UI. placeholder: "e.g. Chrome 130, Firefox 133, Safari 18" - type: textarea id: logs attributes: label: Logs - description: Paste any relevant container logs (`docker logs `). + description: "Relevant logs, secrets redacted. For Compose: docker compose logs app (or postgres / redis)." render: shell - type: textarea @@ -90,5 +155,5 @@ body: label: Would you like to contribute a fix? description: If yes, we can assign this issue to you. See CONTRIBUTING.md for the PR process. options: - - "Yes, I'd like to submit a PR" - "No, just reporting" + - "Yes, I'd like to submit a PR" diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 7b11b313..e2fe917a 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,11 +1,14 @@ blank_issues_enabled: false contact_links: + - name: Feature request or idea + url: https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas + about: Suggest a new tool or improvement and let the community upvote it. + - name: Questions and help + url: https://discord.gg/hr3s7HPUsr + about: Ask questions, get setup help, and chat with the community. - name: Documentation url: https://docs.snapotter.com/ about: Check the docs for setup guides, configuration, and API reference. - - name: Discord - url: https://discord.gg/hr3s7HPUsr - about: Ask questions, get help, and chat with the community. - name: Security vulnerability url: https://github.com/snapotter-hq/snapotter/security/advisories/new about: Report security issues privately through GitHub Security Advisories. diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 00000000..98b70b76 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,61 @@ +name: Documentation Issue +description: Report wrong, missing, or unclear documentation +title: "[Docs] " +labels: ["documentation", "area: docs"] +body: + - type: markdown + attributes: + value: | + Thanks for helping improve the docs. For small fixes, a direct PR to apps/docs/ is welcome too. + + - type: checkboxes + id: checklist + attributes: + label: Before submitting + options: + - label: I searched existing issues and didn't find a duplicate + required: true + + - type: dropdown + id: kind + attributes: + label: Issue type + options: + - Incorrect or outdated + - Missing / not documented + - Unclear or confusing + - Broken link or example + - Typo or formatting + validations: + required: true + + - type: input + id: page + attributes: + label: Page + description: Link to the docs page. If it's missing, link the closest page to where it belongs. + placeholder: "e.g. https://docs.snapotter.com/guide/configuration" + validations: + required: true + + - type: textarea + id: problem + attributes: + label: What's wrong? + description: Describe what's incorrect, missing, or confusing. + validations: + required: true + + - type: textarea + id: suggestion + attributes: + label: Suggested fix + description: If you have a correction or wording suggestion, share it here. + + - type: dropdown + id: willing-to-fix + attributes: + label: Would you like to submit a PR? + options: + - "No, just reporting" + - "Yes, I'd like to submit a PR" diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 698daaa4..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Feature Request -description: Suggest a new tool, improvement, or change -labels: ["enhancement"] -body: - - type: checkboxes - id: checklist - attributes: - label: Before submitting - options: - - label: I searched existing issues and didn't find a duplicate - required: true - - - type: textarea - id: problem - attributes: - label: Problem - description: What problem does this solve? Describe the use case or frustration. - placeholder: | - I frequently need to convert AVIF files to JPEG, but there's no tool for it. - I currently have to use an external service which means my images leave my machine. - validations: - required: true - - - type: textarea - id: solution - attributes: - label: Proposed solution - description: How do you think this should work? - placeholder: | - Add an AVIF option to the format conversion tool, similar to how - HEIC and WebP are already supported. - validations: - required: true - - - type: textarea - id: alternatives - attributes: - label: Alternatives considered - description: Have you tried any workarounds? Are there other approaches that could work? - - - type: textarea - id: context - attributes: - label: Additional context - description: Screenshots, links, examples, or anything else that helps explain the request. - - - type: dropdown - id: willing-to-implement - attributes: - label: Would you like to implement this? - description: Feature PRs require issue approval first. If approved, we can assign this to you. - options: - - "Yes, I'd like to submit a PR if approved" - - "No, just suggesting" diff --git a/.github/ISSUE_TEMPLATE/translation.yml b/.github/ISSUE_TEMPLATE/translation.yml new file mode 100644 index 00000000..6a7f866a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/translation.yml @@ -0,0 +1,92 @@ +name: Translation Issue +description: Report a wrong, missing, or awkward translation +title: "[Translation] " +labels: ["translation", "area: i18n"] +body: + - type: markdown + attributes: + value: | + Thanks for helping improve SnapOtter's translations. If you'd like to fix it yourself, translation PRs are welcome too (the locale files live in packages/shared/src/i18n/). + + - type: checkboxes + id: checklist + attributes: + label: Before submitting + options: + - label: I searched existing issues and didn't find a duplicate + required: true + + - type: dropdown + id: locale + attributes: + label: Language + options: + - English (en) + - Arabic (ar) + - Chinese, Simplified (zh-CN) + - Chinese, Traditional (zh-TW) + - Dutch (nl) + - French (fr) + - German (de) + - Hindi (hi) + - Indonesian (id) + - Italian (it) + - Japanese (ja) + - Korean (ko) + - Polish (pl) + - Portuguese, Brazil (pt-BR) + - Russian (ru) + - Spanish (es) + - Swedish (sv) + - Thai (th) + - Turkish (tr) + - Ukrainian (uk) + - Vietnamese (vi) + validations: + required: true + + - type: dropdown + id: kind + attributes: + label: Issue type + options: + - Incorrect translation + - Awkward or unnatural wording + - Untranslated (still shows English) + - Text is cut off or overflows + - Other + validations: + required: true + + - type: input + id: location + attributes: + label: Where does it appear? + description: The string key if you know it, otherwise where you saw it in the UI. + placeholder: "e.g. tools.resize.title, or the Resize tool settings panel" + validations: + required: true + + - type: textarea + id: current + attributes: + label: Current text + description: What does it say now? Paste the English fallback if it's untranslated. + validations: + required: true + + - type: textarea + id: suggested + attributes: + label: Suggested text + description: What should it say instead? + validations: + required: true + + - type: dropdown + id: willing-to-fix + attributes: + label: Would you like to submit a PR? + options: + - "No, just reporting" + - "Yes, I'd like to submit a PR" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dc7464af..d1cac688 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,9 @@ Thanks for your interest in contributing. This guide covers how to participate, ### Issues (no setup required) - **Bug reports** - Something broken? Open a [bug report](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) with reproduction steps. -- **Feature requests** - Have an idea? Open a [feature request](https://github.com/snapotter-hq/snapotter/issues/new?template=feature_request.yml) describing the problem it solves. +- **Feature requests** - Have an idea? Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) so the community can weigh in and upvote it. +- **Translation issues** - Spot a wrong or missing translation? Open a [translation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml). +- **Documentation issues** - Something off in the docs? Open a [documentation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml). ### Code (requires CLA) @@ -19,15 +21,15 @@ We accept pull requests for: | New translations | Open a PR directly (see [Translation Guide](https://docs.snapotter.com/guide/translations)) | | Documentation improvements | Open a PR directly | | Test coverage improvements | Open a PR directly | -| New tools or features | Open an issue first, wait for a maintainer to add the `approved` label before writing code | -| Refactors or architecture changes | Open an issue first, wait for a maintainer to add the `approved` label before writing code | +| New tools or features | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first; a maintainer converts approved ideas into a tracked issue before you write code | +| Refactors or architecture changes | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first and wait for maintainer sign-off before writing code | ### What We Will Not Accept - Changes to CI/CD workflows, release config, or linter/compiler config - PRs without a signed [Contributor License Agreement](#contributor-license-agreement) - PRs over 400 lines of change (break large work into smaller PRs) -- Features that were not discussed and approved in an issue first +- Features that were not discussed and approved first - Changes to `packages/ai/` without prior discussion ## Contributor License Agreement diff --git a/SUPPORT.md b/SUPPORT.md index e84d025f..6807657f 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -13,7 +13,9 @@ | Problem | Where to report | |---------|----------------| | Bug (something is broken) | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) | -| Feature request | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=feature_request.yml) | +| Feature request or idea | [GitHub Discussions](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) | +| Wrong or missing translation | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml) | +| Documentation problem | [GitHub Issues](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml) | | Security vulnerability | [Private advisory](https://github.com/snapotter-hq/snapotter/security/advisories/new) (never a public issue) | ## Before Opening an Issue diff --git a/apps/docs/guide/contributing.md b/apps/docs/guide/contributing.md index 4b0f1e0c..e9a24c3c 100644 --- a/apps/docs/guide/contributing.md +++ b/apps/docs/guide/contributing.md @@ -11,7 +11,9 @@ Thanks for your interest in contributing. This guide covers how to participate, ### Issues (no setup required) - **Bug reports** - Something broken? Open a [bug report](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) with reproduction steps. -- **Feature requests** - Have an idea? Open a [feature request](https://github.com/snapotter-hq/snapotter/issues/new?template=feature_request.yml) describing the problem it solves. +- **Feature requests** - Have an idea? Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) so the community can weigh in and upvote it. +- **Translation issues** - Spot a wrong or missing translation? Open a [translation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml). +- **Documentation issues** - Something off in the docs? Open a [documentation issue](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml). ### Code (requires CLA) @@ -23,15 +25,15 @@ We accept pull requests for: | New translations | Open a PR directly (see [Translation Guide](/guide/translations)) | | Documentation improvements | Open a PR directly | | Test coverage improvements | Open a PR directly | -| New tools or features | Open an issue first, wait for the `approved` label before writing code | -| Refactors or architecture changes | Open an issue first, wait for the `approved` label before writing code | +| New tools or features | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first; a maintainer converts approved ideas into a tracked issue before you write code | +| Refactors or architecture changes | Start a [discussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) first and wait for maintainer sign-off before writing code | ### What we will not accept - Changes to CI/CD workflows, release config, or linter/compiler config - PRs without a signed [Contributor License Agreement](#contributor-license-agreement) - PRs over 400 lines of change (break large work into smaller PRs) -- Features that were not discussed and approved in an issue first +- Features that were not discussed and approved first - Changes to `packages/ai/` without prior discussion ## Contributor License Agreement