Skip to content

[Feature][P2] Add browser-local QR code reverse decoding #324

Description

@baixiangcpp

User signal

A product walkthrough suggested that QR Code Generator should also support reverse parsing/decoding.

Original feedback: 还有二维码这种工具我建议补充逆解析。

Product interpretation

The current QR Code Generator is output-only: text -> QR image. Users reasonably expect a QR utility to also support image -> text, especially when checking an existing QR code, auditing campaign links, or verifying a generated code before sharing it.

Relevant files:

  • src/features/tools/qr-code-generator/page.tsx
  • src/features/tools/qr-code-generator/manifest.ts
  • src/features/tools/qr-code-generator/browser-actions.ts
  • translations under src/core/i18n/translations/*.json

Recommended scope

Add a browser-local QR decode path. Options:

  1. Add decode mode to existing QR Code Generator and rename/page-copy it as a bidirectional QR utility.
  2. Add a separate QR Code Decoder tool and link both tools as related tools.

Minimum useful v1:

  • Upload or drag/drop PNG/JPEG/WebP image.
  • Decode QR payload locally in the browser.
  • Show decoded text, URL classification, and copy action.
  • Never upload the image or decoded payload.
  • Handle failure cases clearly: no QR found, multiple QR codes not supported, image too large, unsupported format.

Optional later:

  • Paste image from clipboard.
  • Camera scanning behind explicit user permission.
  • Decode multiple QR codes in one image.
  • URL safety preview before opening external links.

Privacy/security boundary

  • Keep the implementation browser-local.
  • Avoid automatic navigation to decoded URLs.
  • If using camera in a later version, require explicit user action and document permission behavior.
  • If using a decoder dependency, lazy-load it so the QR generator's initial route bundle does not regress.

Acceptance criteria

  • Users can upload a QR image and decode its payload without network access.
  • Decoded output can be copied.
  • Decoded URLs are displayed as text first; opening is explicit.
  • Decode failure states are clear and localized.
  • The feature is covered by unit tests with fixture images or deterministic decoder mocks.
  • Tool manifest, related tools, SEO copy, sitemap/index generation, and all locale catalogs are updated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions