Skip to content

Commit 309af4e

Browse files
committed
update readme
1 parent 45fb265 commit 309af4e

1 file changed

Lines changed: 76 additions & 76 deletions

File tree

README.md

Lines changed: 76 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,88 @@
11
<h2 id="project-overview">📄 Project Overview</h2>
22

33

4-
**MatchFlow – Zero Paperwork, 100% Confidence** 🔒
4+
**MatchFlow – Zero Paperwork, 100% Confidence**
55

66
MatchFlow is a web-based invoice reconciliation platform built to eliminate the tedious, error-prone process of manual invoice checking. Born from the real-world frustrations of a busy café owner juggling dozens of ingredients and line items, MatchFlow empowers any business—whether a small restaurant or an enterprise finance team—to:
77

8-
- 📥 **Upload** a vendor’s PDF invoice in seconds
9-
- 🤖 **Extract** structured data (invoice number, date, line items, totals) via Azure Form Recognizer
10-
- 🔗 **Compare** against pre-recorded Purchase Orders
11-
- ⚠️ **Flag** any discrepancies for rapid human review
8+
- **Upload** a vendor’s PDF invoice in seconds
9+
- **Extract** structured data (invoice number, date, line items, totals) via Azure Form Recognizer
10+
- **Compare** against pre-recorded Purchase Orders
11+
- **Flag** any discrepancies for rapid human review
1212

1313
The entire end-to-end flow—PO entry through discrepancy resolution—takes just one click, turning hours of spreadsheet work into instant confidence that you’re only paying exactly what you ordered.
1414

15-
### 🧑‍🤝‍🧑 Who It’s For
16-
- 🏪 Small-to-medium businesses and enterprise procurement teams
17-
- Restaurant owners and café operators
18-
- 💼 Accounting and finance departments seeking to automate invoice matching
15+
### Who It’s For
16+
- Small-to-medium businesses and enterprise procurement teams
17+
- Restaurant owners and café operators
18+
- Accounting and finance departments seeking to automate invoice matching
1919

20-
### ❤️ Why You’ll Love It
21-
- ⏱️ **Save Time** — replace 1–2 hours of manual checks with a single click
22-
- 🛡️ **Reduce Risk** — catch pricing mistakes, duplicate invoices, or fraud before they post
23-
- 📜 **Full Audit Trail** — every upload, extraction, and approval is logged for compliance
24-
- 🌐 **Anywhere Access** — responsive web app works on desktop and mobile
20+
### Why You’ll Love It
21+
- **Save Time** — replace 1–2 hours of manual checks with a single click
22+
- **Reduce Risk** — catch pricing mistakes, duplicate invoices, or fraud before they post
23+
- **Full Audit Trail** — every upload, extraction, and approval is logged for compliance
24+
- **Anywhere Access** — responsive web app works on desktop and mobile
2525

26-
### 🚀 Tech Highlights
27-
- 📊 **OCR Accuracy:** Powered by Azure Form Recognizer to convert PDF invoices into queryable data
28-
- ⚙️ **Modern Stack:** React + Vite frontend, .NET 6 Web API backend, Azure Blob Storage, and SQL Server
29-
- 🔒 **Secure:** JWT-based authentication and role-based access controls
26+
### Tech Highlights
27+
- **OCR Accuracy:** Powered by Azure Form Recognizer to convert PDF invoices into queryable data
28+
- **Modern Stack:** React + Vite frontend, .NET 6 Web API backend, Azure Blob Storage, and SQL Server
29+
- **Secure:** JWT-based authentication and role-based access controls
3030

3131
MatchFlow delivers real, measurable value by automating repetitive finance tasks—so you can focus on your business, not on paperwork.
3232

3333

34-
## 📑 Table of Contents
35-
36-
1. [📄 Project Overview](#project-overview)
37-
2. [ Key Features](#key-features)
38-
3. [🛠️ Tech Stack](#tech-stack)
39-
4. [🏛️ Architecture](#architecture)
40-
5. [📸 Screenshots / Demo](#screenshots--demo)
41-
6. [🚀 Getting Started](#getting-started)
42-
- [🔧 Prerequisites](#prerequisites)
43-
- [⚙️ Installation](#installation)
44-
- [🔑 Configuration](#configuration)
45-
- [▶️ Running the App](#running-the-app)
46-
7. [📚 API Reference](#api-reference)
47-
8. [💡 Usage Examples](#usage-examples)
48-
9. [🧪 Testing](#testing)
49-
10. [📦 Deployment](#deployment)
50-
11. [🛣️ Roadmap](#roadmap)
51-
12. [🤝 Contributing](#contributing)
52-
13. [📄 License](#license)
53-
14. [☎️ Contact / Support](#contact--support)
34+
## Table of Contents
35+
36+
1. [ Project Overview](#project-overview)
37+
2. [ Key Features](#key-features)
38+
3. [ Tech Stack](#tech-stack)
39+
4. [ Architecture](#architecture)
40+
5. [ Screenshots / Demo](#screenshots--demo)
41+
6. [ Getting Started](#getting-started)
42+
- [ Prerequisites](#prerequisites)
43+
- [ Installation](#installation)
44+
- [ Configuration](#configuration)
45+
- [ Running the App](#running-the-app)
46+
7. [ API Reference](#api-reference)
47+
8. [ Usage Examples](#usage-examples)
48+
9. [ Testing](#testing)
49+
10. [ Deployment](#deployment)
50+
11. [ Roadmap](#roadmap)
51+
12. [ Contributing](#contributing)
52+
13. [ License](#license)
53+
14. [ Contact / Support](#contact--support)
5454

5555

5656
<a id="key-features"></a>
57-
## Key Features
57+
## Key Features
5858

59-
- 📥 **One-Click Invoice Upload**
59+
- **One-Click Invoice Upload**
6060
Drag-and-drop or browse your PDFs in seconds—no fiddly forms required.
6161
**Why It Matters:** Cuts upload time by up to 95%.
6262

63-
- 🤖 **AI-Powered OCR Extraction**
63+
- **AI-Powered OCR Extraction**
6464
Instantly pulls out invoice number, date, line items and totals via Azure Form Recognizer.
6565
**Why It Matters:** Eliminates manual data-entry errors—>99% field accuracy in our tests.
6666

67-
- 🔗 **Automated PO Matching**
67+
- **Automated PO Matching**
6868
Cross-checks extracted invoice data against your stored Purchase Orders.
6969
**Why It Matters:** Flags mismatches (vendor, amount, quantities) before they hit your ledger—reduces payment errors by 90%.
7070

71-
- 🚨 **Real-Time Discrepancy Alerts**
71+
- **Real-Time Discrepancy Alerts**
7272
Any mismatch is pushed into an internal review queue and notifies your finance team instantly.
7373
**Why It Matters:** Ensures exceptions are caught and resolved in minutes, not days.
7474

75-
- 🔒 **Secure Cloud Storage**
75+
- **Secure Cloud Storage**
7676
All invoices live safely in Azure Blob Storage with role-based access controls.
7777
**Why It Matters:** Keeps sensitive financial documents locked down and audit-ready.
7878

79-
- 📊 **Interactive Dashboard & Reporting**
79+
- **Interactive Dashboard & Reporting**
8080
Search, filter and export full audit logs, match-rate charts and spend summaries.
8181
**Why It Matters:** Provides complete visibility into your payables pipeline—perfect for month-end close.
8282

8383

8484
<a id="tech-stack"></a>
85-
## 🛠️ Tech Stack
85+
## Tech Stack
8686

8787
<details>
8888
<summary>🖥️ Backend</summary>
@@ -93,22 +93,22 @@ MatchFlow delivers real, measurable value by automating repetitive finance tasks
9393
</details>
9494

9595
<details>
96-
<summary>🗄️ Database</summary>
96+
<summary> Database</summary>
9797
<ul>
9898
<li><a href="https://www.microsoft.com/en-us/sql-server">SQL Server (Azure SQL)</a></li>
9999
</ul>
100100
</details>
101101

102102
<details>
103-
<summary>⚛️ Frontend</summary>
103+
<summary> Frontend</summary>
104104
<ul>
105105
<li><a href="https://reactjs.org/">React 19.1.0</a></li>
106106
<li><a href="https://vitejs.dev/">Vite</a> (<code>@vitejs/plugin-react 4.4.1</code>)</li>
107107
</ul>
108108
</details>
109109

110110
<details>
111-
<summary>🖌️ UI / Styling</summary>
111+
<summary> UI / Styling</summary>
112112
<ul>
113113
<li><a href="https://tailwindcss.com/">Tailwind CSS</a></li>
114114
<li><a href="https://ui.shadcn.com/">shadcn/ui</a></li>
@@ -117,7 +117,7 @@ MatchFlow delivers real, measurable value by automating repetitive finance tasks
117117
</details>
118118

119119
<details>
120-
<summary>☁️ Cloud Services</summary>
120+
<summary> Cloud Services</summary>
121121
<ul>
122122
<li><a href="https://azure.microsoft.com/en-us/services/storage/blobs/">Azure Blob Storage</a></li>
123123
<li><a href="https://azure.microsoft.com/en-us/services/cognitive-services/form-recognizer/">Azure Form Recognizer</a></li>
@@ -126,67 +126,67 @@ MatchFlow delivers real, measurable value by automating repetitive finance tasks
126126
</details>
127127

128128
<details>
129-
<summary>🐳 Containerization & Hosting</summary>
129+
<summary> Containerization & Hosting</summary>
130130
<ul>
131131
<li><a href="https://www.docker.com/">Docker</a></li>
132132
<li><a href="https://fly.io/">Fly.io</a></li>
133133
</ul>
134134
</details>
135135

136136
<details>
137-
<summary>📡 Web Server / Proxy</summary>
137+
<summary> Web Server / Proxy</summary>
138138
<ul>
139139
<li><a href="https://nginx.org/">Nginx</a></li>
140140
</ul>
141141
</details>
142142

143143
<details>
144-
<summary>🔒 Authentication</summary>
144+
<summary> Authentication</summary>
145145
<ul>
146146
<li>JWT Bearer tokens</li>
147147
</ul>
148148
</details>
149149

150150
<details>
151-
<summary>📦 Package Management</summary>
151+
<summary> Package Management</summary>
152152
<ul>
153153
<li><a href="https://www.npmjs.com/">npm</a> (frontend)</li>
154154
<li><a href="https://www.nuget.org/">NuGet</a> (backend)</li>
155155
</ul>
156156
</details>
157157

158158
<details>
159-
<summary>📑 API Documentation</summary>
159+
<summary> API Documentation</summary>
160160
<ul>
161161
<li><a href="https://swagger.io/specification/">Swagger / OpenAPI</a></li>
162162
<li><a href="https://www.postman.com/">Postman Collection</a></li>
163163
</ul>
164164
</details>
165165

166166
<details>
167-
<summary>🛠️ Local Dev & Scripts</summary>
167+
<summary> Local Dev & Scripts</summary>
168168
<ul>
169169
<li>Docker Compose for local end-to-end testing</li>
170170
</ul>
171171
</details>
172172

173173
<details>
174-
<summary>🧪 Testing</summary>
174+
<summary> Testing</summary>
175175
<ul>
176176
<li><a href="https://xunit.net/">xUnit</a> (backend)</li>
177177
</ul>
178178
</details>
179179

180180
<details>
181-
<summary>🔄 CI/CD</summary>
181+
<summary> CI/CD</summary>
182182
<ul>
183183
<li><a href="https://github.com/features/actions">GitHub Actions</a></li>
184184
<li>Fly.io automatic deploy</li>
185185
</ul>
186186
</details>
187187

188188
<details>
189-
<summary>📈 Monitoring</summary>
189+
<summary> Monitoring</summary>
190190
<ul>
191191
<li><a href="https://azure.microsoft.com/en-us/services/monitor/">Azure Application Insights</a></li>
192192
</ul>
@@ -239,37 +239,37 @@ MatchFlow delivers real, measurable value by automating repetitive finance tasks
239239

240240

241241
<a id="architecture"></a>
242-
## 🏛️ Architecture
242+
## Architecture
243243

244244
[![Architecture Diagram](/frontend/public/architecture.svg)](/frontend/public/architecture.svg)
245245

246246
[View on Eraser![](https://app.eraser.io/workspace/1wX2yEL4ckFloMZ5chjD/preview?elements=22osCHEEW3uJF1qCVzKzKQ&type=embed)](https://app.eraser.io/workspace/1wX2yEL4ckFloMZ5chjD?elements=22osCHEEW3uJF1qCVzKzKQ)
247247

248248
MatchFlow is built on Clean Architecture principles, with clear separation of concerns across six horizontal layers. Requests flow from left to right (and back), while dependencies always point inward toward the core Domain layer. Below is a breakdown of each layer, the major components within it, and the primary data flows.
249249

250-
### 🖥️ 1. Client Layer
250+
### 1. Client Layer
251251
- **Browser (React SPA)**
252252
- Contains ten page components:
253253
AuthPage, LandingPage, CreatePOPage, PurchaseOrdersPage, PurchaseOrderDetailsPage, DashboardPage, InvoicePage, AutoMatchPage, UploadInvoicePage, and UploadResultPage.
254254
- Sends and receives JWT-protected HTTPS calls to the Nginx proxy.
255255

256-
### 🌐 2. Presentation Layer
256+
### 2. Presentation Layer
257257
- **Nginx Reverse Proxy** (Fly.io container “React+Nginx”)
258258
- Terminates TLS, serves the React bundle, and forwards API requests.
259259
- **API Gateway** (.NET 6 Web API, Fly.io container “Backend”)
260260
- Hosts all controllers and orchestrates application logic.
261261
- **Redirector** (Fly.io container)
262262
- Routes requests from `matchflow.app``www.matchflow.app`.
263263

264-
### 🛡️ 3. Controller Layer
264+
### 3. Controller Layer
265265
_All running inside the API Gateway container:_
266266
- **AuthController** (handles login, JWT issuance & validation)
267267
- **PurchaseOrderListController**
268268
- **InvoiceListController**
269269
- **InvoiceMatchController**
270270
- **InvoiceUploadController**
271271

272-
### 🧩 4. Application Layer
272+
### 4. Application Layer
273273
- **Services** (use-case implementations):
274274
- `CreatePurchaseOrderService`
275275
- `MatchingService`
@@ -281,29 +281,29 @@ _All running inside the API Gateway container:_
281281
- `IExceptionRecordRepository`, `IServiceBusClient`, `IUserService`
282282
- Dependencies are injected here, following the Dependency Inversion Principle.
283283

284-
### 🛠️ 5. Infrastructure Layer
284+
### 5. Infrastructure Layer
285285
_Concrete implementations of all ports:_
286286
- **EF Core Repositories**: `InvoiceRepository`, `PurchaseOrderRepository`, `ExceptionRecordRepository`, backed by `AppDbContext`
287287
- **Azure Clients**: `BlobStorageService`, `FormRecognizerClient`, `ServiceBusClient`
288288
- **UserService** (JWT key management & refresh logic)
289289

290-
### 📦 6. Domain Layer
290+
### 6. Domain Layer
291291
_Pure business entities with no external dependencies:_
292292
- `Invoice`, `PurchaseOrder`, `InvoiceLineItem`, `PurchaseOrderLineItem`, `ExceptionRecord`, `User`
293293

294-
### ☁️ Cloud Services
294+
### Cloud Services
295295
- **Azure Blob Storage** (PDF persistence)
296296
- **Azure Form Recognizer** (OCR)
297297
- **Azure SQL Database** (POs, invoices, audit logs)
298298
- **Azure Service Bus** (discrepancy messaging)
299299
- **Application Insights** (telemetry & logging)
300300

301-
### 🐳 Local Development
301+
### Local Development
302302
- **Docker Compose** spins up all containers (React+Nginx, API, SQL emulator, Blob emulator, etc.) for end-to-end testing without Azure.
303303

304304
---
305305

306-
### 🔄 Primary Data Flows
306+
### Primary Data Flows
307307

308308
1. **User Upload**
309309
Browser → Nginx (HTTPS + JWT) → API Gateway
@@ -323,16 +323,16 @@ _Pure business entities with no external dependencies:_
323323

324324
By following Clean Architecture, MatchFlow achieves high testability, clear module boundaries, and the ability to swap out or mock any external dependency (databases, cloud services, UI) without impacting the business core.
325325

326-
## 📸 Screenshots
327-
### 🔒 Authentication
326+
## Screenshots
327+
### Authentication
328328

329329
![Authentication Flow](/frontend/public/authentication.gif)
330330
*Figure 1: User logs in by entering username & password, then is taken to the main dashboard.*
331331

332332
A simple, secure login step that grants access to the rest of the MatchFlow app.
333333

334334

335-
### 📊 Dashboard Overview
335+
### Dashboard Overview
336336

337337
![Dashboard](/frontend/public/dashboard.png)
338338
*Figure 2: Central dashboard where you can:*
@@ -343,26 +343,26 @@ A simple, secure login step that grants access to the rest of the MatchFlow app.
343343

344344
A single screen to kick off every step of your MatchFlow workflow.
345345

346-
### 🛒 Create & View Purchase Order
346+
### Create & View Purchase Order
347347

348348
![Create Purchase Order Flow](/frontend/public/purchase_order.gif)
349349
*Figure 3: Fill out the PO form, submit it, and immediately land on the detailed Purchase Order page.*
350350

351351
A quick, end-to-end demo of creating a PO and reviewing its details in one seamless flow.
352352

353-
### 🧾 Sample Invoice
353+
### Sample Invoice
354354

355355
![Sample Invoice](/frontend/public/sample_invoice.png)
356356
*Figure 4: Cropped PDF showing invoice number, date, line items and totals used in our demo (all data is fictitious).*
357357

358-
### 📥 Upload Invoice & Ready to Match
358+
### Upload Invoice & Ready to Match
359359

360360
![Upload Invoice Flow](/frontend/public/upload_invoice.gif)
361361
*Figure 5: Upload your invoice PDF and instantly see its extracted details labeled “Ready to Match.”*
362362

363363
Now you’re all set to run the auto-match and reconcile against your purchase orders.
364364

365-
### Auto-Match Results
365+
### Auto-Match Results
366366

367367
![Auto-Match Flow](/frontend/public/invoice_matching.gif)
368368
*Figure 6: The Auto-Match engine processes your invoice and then confirms a 100% match—every line item and the total perfectly aligned with your Purchase Order.*

0 commit comments

Comments
 (0)