Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 112 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
127 changes: 127 additions & 0 deletions .github/ISSUE_TEMPLATE/real_world_feedback.yml
Original file line number Diff line number Diff line change
@@ -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
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 工作流
Expand Down
1 change: 1 addition & 0 deletions src/App.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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');
});


Expand Down
5 changes: 4 additions & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,10 @@ export default function App() {
<ReviewPanel extraction={project.extraction} schema={project.schema} metrics={metrics} onCorrect={correct} onExport={exportData} />
</div>
</div>
<footer>Documents stay in this browser. AI extraction sends document text directly to the provider you choose with your own API key.</footer>
<footer>
<span>Documents stay in this browser. AI extraction sends document text directly to the provider you choose with your own API key.</span>
<a href="https://github.com/edwardsage419/FlowExtract/issues/new/choose" target="_blank" rel="noreferrer">Feedback</a>
</footer>
</main>
);
}
2 changes: 1 addition & 1 deletion src/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -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; } }

Expand Down
1 change: 1 addition & 0 deletions tests/e2e/workflow.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
});
Loading