diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..71f852f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,112 @@ +name: Bug report +description: Report a reproducible FlowExtract problem +title: "[Bug] " +body: + - type: markdown + attributes: + value: | + Thanks for helping test FlowExtract. + + Do not include API keys, credentials, access tokens, full provider responses, or sensitive document content in this public issue. If a reproduction document is useful, use a public, synthetic, or sanitized example. + + - type: textarea + id: happened + attributes: + label: What happened? + description: Describe the failure and the point in the workflow where it occurred. + placeholder: "Example: Extraction completed, but the Amount field was returned as a string and validation failed." + validations: + required: true + + - type: textarea + id: expected + attributes: + label: What did you expect? + validations: + required: true + + - type: dropdown + id: stage + attributes: + label: Stage + options: + - Document parsing + - OCR + - Schema + - Provider request + - Structured output + - Validation + - Review + - Persistence or restore + - Export + - Other + validations: + required: true + + - type: dropdown + id: document-type + attributes: + label: Document type + options: + - Digital PDF + - Scanned PDF + - PNG + - JPG or JPEG + - Other + validations: + required: true + + - type: input + id: pages + attributes: + label: Approximate page count + placeholder: "Example: 3" + + - type: input + id: language + attributes: + label: Document language + placeholder: "Example: English" + + - type: dropdown + id: provider + attributes: + label: AI provider + options: + - Qwen China (Beijing) + - Qwen Singapore + - Qwen Hong Kong + - OpenAI + - Anthropic + - Gemini + - Not applicable + validations: + required: true + + - type: input + id: model + attributes: + label: Model + description: Model ID only. Do not include credentials. + + - type: input + id: browser + attributes: + label: Browser and operating system + placeholder: "Example: Chrome 140 on Windows 11" + + - type: textarea + id: reproduce + attributes: + label: Reproduction steps + description: Include only the minimum steps needed to reproduce the issue. Do not paste sensitive document text or full provider responses. + validations: + required: true + + - type: checkboxes + id: safety + attributes: + label: Public issue safety + options: + - label: I confirmed that this issue does not contain API keys, credentials, access tokens, full provider responses, or sensitive document content. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/real_world_feedback.yml b/.github/ISSUE_TEMPLATE/real_world_feedback.yml new file mode 100644 index 0000000..cd5616a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/real_world_feedback.yml @@ -0,0 +1,127 @@ +name: Real-world test feedback +description: Share results from using FlowExtract on an actual document workflow +title: "[Feedback] " +body: + - type: markdown + attributes: + value: | + Real-world failures and corrections are especially useful for FlowExtract V0.1 testing. + + Do not include API keys, credentials, access tokens, full provider responses, or sensitive document content. Use public, synthetic, or sanitized examples if a reproduction is needed. + + - type: input + id: document + attributes: + label: What kind of document did you process? + placeholder: "Example: supplier invoice, purchase order, bank statement" + validations: + required: true + + - type: dropdown + id: document-type + attributes: + label: Input format + options: + - Digital PDF + - Scanned PDF + - PNG + - JPG or JPEG + - Mixed + - Other + validations: + required: true + + - type: input + id: fields + attributes: + label: What fields were you trying to extract? + placeholder: "Example: vendor, invoice number, date, total" + validations: + required: true + + - type: input + id: field-count + attributes: + label: Approximate number of fields + placeholder: "Example: 8" + + - type: dropdown + id: provider + attributes: + label: AI provider + options: + - Qwen China (Beijing) + - Qwen Singapore + - Qwen Hong Kong + - OpenAI + - Anthropic + - Gemini + validations: + required: true + + - type: input + id: corrected + attributes: + label: How many fields required manual correction? + placeholder: "Example: 2 of 8" + + - type: input + id: review-time + attributes: + label: Approximately how long did review take? + placeholder: "Example: 90 seconds" + + - type: textarea + id: worked + attributes: + label: What worked well? + description: Focus on concrete workflow behavior. + + - type: textarea + id: friction + attributes: + label: What was the biggest problem or slowest step? + validations: + required: true + + - type: textarea + id: previous + attributes: + label: What was your previous workflow? + placeholder: "Example: manually copy values into Excel" + + - type: dropdown + id: time-saved + attributes: + label: Did FlowExtract save time? + options: + - Yes + - About the same + - No + - Not sure yet + validations: + required: true + + - type: dropdown + id: reuse + attributes: + label: Would you use FlowExtract again for this workflow? + options: + - Yes + - Maybe + - No + validations: + required: true + + - type: textarea + id: improvement + attributes: + label: What single improvement would make FlowExtract significantly more useful? + + - type: checkboxes + id: safety + attributes: + label: Public issue safety + options: + - label: I confirmed that this issue does not contain API keys, credentials, access tokens, full provider responses, or sensitive document content. + required: true diff --git a/README.md b/README.md index a3c2961..81393e5 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,14 @@ Local first AI assisted document extraction, validation and human review. [简体中文](README.zh-CN.md) +## Try V0.1.0 and send feedback + +Live app: https://flowextract.edwardxie421.workers.dev + +Testing FlowExtract with a real document? Please report bugs and real-world test feedback through [GitHub Issues](https://github.com/edwardsage419/FlowExtract/issues/new/choose). + +Do not include API keys, credentials, full provider responses, or sensitive document content in public issues. If a reproduction file is useful, use a public, synthetic, or sanitized example. + FlowExtract is an open source browser application for turning PDFs and document images into structured, reviewable data. The first release is deliberately small: upload a document, define a schema, extract with your own AI provider key, validate results locally, correct questionable fields, and export JSON, CSV, or XLSX. ## V0.1 workflow diff --git a/README.zh-CN.md b/README.zh-CN.md index 4b837b6..d8a0a5b 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -4,6 +4,14 @@ Local First 的 AI 辅助文档数据提取、验证与人工复核工具。 [English](README.md) +## 试用 V0.1.0 与反馈 + +在线版本:https://flowextract.edwardxie421.workers.dev + +如果你正在使用真实文档测试 FlowExtract,请通过 [GitHub Issues](https://github.com/edwardsage419/FlowExtract/issues/new/choose) 提交 Bug 或真实使用反馈。 + +请勿在公开 Issue 中提交 API Key、凭据、完整 Provider Response 或敏感文档正文。如需提供复现文件,请使用公开、虚构或已脱敏的示例。 + FlowExtract 是一个开源浏览器应用,用于把 PDF 和文档图片转换成可以人工复核的结构化数据。V0.1 刻意控制范围:上传文档,定义 Schema,使用自己的 AI Provider API Key 完成初始提取,在本地执行确定性验证,只修正可疑字段,然后导出 JSON、CSV 或 XLSX。 ## V0.1 工作流 diff --git a/src/App.test.tsx b/src/App.test.tsx index 3bd2911..8e06d4b 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -24,6 +24,7 @@ describe('FlowExtract workspace', () => { expect(screen.getByText(/4\. Review/i)).toBeInTheDocument(); expect(screen.getByText('v0.1.0')).toBeInTheDocument(); expect(screen.getByRole('option', { name: /Qwen \(Alibaba Cloud\) — Verified in Beijing/i })).toBeInTheDocument(); + expect(screen.getByRole('link', { name: 'Feedback' })).toHaveAttribute('href', 'https://github.com/edwardsage419/FlowExtract/issues/new/choose'); }); diff --git a/src/App.tsx b/src/App.tsx index 71325d0..34c0422 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -169,7 +169,10 @@ export default function App() { - + ); } diff --git a/src/styles.css b/src/styles.css index c7d69f0..1a6308e 100644 --- a/src/styles.css +++ b/src/styles.css @@ -73,7 +73,7 @@ input:focus, select:focus { outline: 2px solid #c7d2fe; border-color: #818cf8; } .export-row .step { margin-right: auto; } .error-banner { margin: 12px 14px 0; padding: 10px 12px; border: 1px solid #fecaca; border-radius: 9px; background: #fef2f2; color: #991b1b; font-size: 13px; } .muted { color: #667085; }.status-line { font-size: 12px; } -footer { padding: 10px 28px 22px; color: #667085; font-size: 11px; } +footer { padding: 10px 28px 22px; color: #667085; font-size: 11px; display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }\nfooter a { color: #475467; font-weight: 700; text-decoration: underline; text-underline-offset: 2px; } @media (max-width: 1100px) { .workspace-grid { grid-template-columns: 1fr 1fr; }.right-column { grid-column: 1 / -1; }.topbar { align-items: start; flex-direction: column; } } @media (max-width: 760px) { .workspace-grid { grid-template-columns: 1fr; padding: 8px; }.right-column { grid-column: auto; }.project-strip { padding: 10px 14px; flex-direction: column; align-items: stretch; }.project-strip input { width: 100%; }.schema-card-grid { grid-template-columns: 1fr 1fr; }.topbar { padding: 16px; }.top-actions { width: 100%; }.provider-grid { grid-template-columns: 1fr; } } diff --git a/tests/e2e/workflow.spec.ts b/tests/e2e/workflow.spec.ts index c233e79..800e80b 100644 --- a/tests/e2e/workflow.spec.ts +++ b/tests/e2e/workflow.spec.ts @@ -7,4 +7,5 @@ test('shows the complete FlowExtract workflow shell', async ({ page }) => { await expect(page.getByText('2. Schema')).toBeVisible(); await expect(page.getByText('3. AI Extraction')).toBeVisible(); await expect(page.getByText('4. Review')).toBeVisible(); + await expect(page.getByRole('link', { name: 'Feedback' })).toHaveAttribute('href', 'https://github.com/edwardsage419/FlowExtract/issues/new/choose'); });