Live preview

See a real HexPatrol scan report

Below is the full scan-report UI, hydrated from a seeded sample repo (hexpatrol/demo) so you can browse the bounded-context graph, the layer-boundary map, and the suggested-fix preview — and download the matching git apply-safe patch — without hooking the scanner up to a repo first.

Sample scan completed 7/15/2026, 9:00:00 AM · 5 violations · pattern hexagonal-lite

Bounded contexts
5 contexts · 6 cross-context edges from the sample scan.

From the seed scan of 7/15/2026, 9:00:00 AM.

Bounded contexts (demo)5 contexts · 6 cross-context edges.Billing → Orders: 12 dependencies Samples: ./orders/cart, ./orders/checkout, ./orders/invoiceOrders → Billing: 8 dependencies Samples: ./billing/invoice, ./billing/refundInventory → Shipping: 5 dependencies Samples: ./shipping/picklist, ./shipping/manifestOrders → Identity: 4 dependencies Samples: ./identity/session, ./identity/permissionsOrders → Shipping: 3 dependencies Samples: ./shipping/label, ./shipping/trackingIdentity → Billing: 2 dependencies Samples: ./billing/customerOrderssep 0.78Billingsep 0.92Inventorysep 0.88Shippingsep 0.71Identitysep 0.96
Orders14 internal · 6 external · sep 0.78
Billing18 internal · 3 external · sep 0.92
Inventory9 internal · 2 external · sep 0.88
Shipping7 internal · 4 external · sep 0.71
Identity11 internal · 1 external · sep 0.96
Layer boundaries
5 layers · 5 layer-boundary violations from the sample scan.

From the seed scan of 7/15/2026, 9:00:00 AM.

Layer boundaries (demo)5 layers · 5 layer-boundary violations.application → adapters: 2 violations Samples: ./adapters/legacy-printer, ./adapters/legacy-pageradapters → domain: 1 violation Samples: ./domain/billing/invoiceadapters → ports: 1 violation Samples: ./ports/printer-portapplication → ports: 1 violation Samples: ./adapters/legacy-mailerdomain → adapters: 2 violations Samples: ./adapters/repos/order-repo, ./adapters/repos/inventory-repodomain3 violationsapplication4 violationsports1 violationadapters5 violationsui0 violations
Hexagonal architecture
5 contexts · 10 ports · 10 adapters from the seed scan.

Ports and adapters per bounded context — derived from 7/15/2026, 9:00:00 AM.

Hexagonal ports-and-adapters diagram5 contexts · 10 ports · 10 adapters.CheckoutAPI → CheckoutRouteHandlerOrderRepoPort → OrderRepositoryOrdersCart, checkout, and order …CheckoutAPIinputOrderRepoPortoutputCheckoutRouteHandlerNext.js Route HandlerOrderRepositoryPostgres via PrismaInvoicingPort → InvoiceServicePaymentPort → StripeCheckoutAdapterBillingInvoicing, pricing rules, …InvoicingPortinputPaymentPortoutputInvoiceServiceStripe Checkout (linked)StripeCheckoutAdapterStripe Connect payment linkStockQueryPort → InventoryConsoleReservationPort → InventoryRepositoryInventoryStock levels, reservations…StockQueryPortinputReservationPortoutputInventoryConsoleInternal CLI / Polsia scanInventoryRepositoryPostgres via PrismaLabelRequestPort → ShippingWebAppTrackingEventPort → PostmarkShippingCarrier selection, label g…LabelRequestPortinputTrackingEventPortoutputShippingWebAppNext.js Route HandlerPostmarkPostmark transactional emailSignInPort → SignInFormAuditPort → AuditLogIdentityAuthentication, sessions, …SignInPortinputAuditPortoutputSignInFormBrowser form via better-authAuditLogPostgres via Prisma
Ports and adapters
Upload a code-bundle archive to see the repo's hexagonal architecture.

Drop a .zip, .tar, or .tar.gz archive below — we'll lift the top-level folders into bounded contexts and group ports/ / adapters/ into ports and adapters automatically.

up to 25 MB
Upload your repo
Drop a .zip, .tar, or .tar.gzarchive of your source files (up to 25 MB). Files are uploaded to Polsia's R2 bucket for analysis.
Suggested Fixes
hexagonal-lite — 5 violations — 7/15/2026, 9:00:00 AM

Sample scan completed 7/15/2026, 9:00:00 AM — 3 moves · 4 drops · 1 unsupported

Source fileRulePreview
src/adapters/legacy-printer.ts
adapters
ports-and-adapters/in-adapter-out-of-layer
move src/adapters/legacy-printer.ts → src/ports/printer-port.ts (layer: ports)
drop import in src/adapters/legacy-printer.ts:2 '../adapters/logger'
update import in src/app/api/print/route.ts:1 '../../adapters/legacy-printer' → '../../ports/printer-port'
src/adapters/legacy-pager.ts
adapters
ports-and-adapters/in-adapter-out-of-layer
move src/adapters/legacy-pager.ts → src/ports/pager-port.ts (layer: ports)
drop import in src/adapters/legacy-pager.ts:3 '../adapters/sms-sender'
update import in src/app/api/alert/route.ts:1 '../../adapters/legacy-pager' → '../../ports/pager-port'
src/adapters/legacy-mailer.ts
adapters
ports-and-adapters/in-adapter-out-of-layer
move src/adapters/legacy-mailer.ts → src/ports/mailer-port.ts (layer: ports)
drop import in src/adapters/legacy-mailer.ts:4 '../adapters/smtp-client'
update import in src/app/api/notify/route.ts:1 '../../adapters/legacy-mailer' → '../../ports/mailer-port'
src/domain/billing/csv-billing-reporter.ts
domain
domain/no-cross-domain-import
drop import in src/domain/billing/csv-billing-reporter.ts:6 '../adapters/csv-writer'
src/legacy/spaghetti.ts
adapters
domain/no-cross-domain-import
unsupported
unsupported — multi-layer fan-out
Export the patch
Download the unified diff covering every supported violation in the sample scan. The bytes download from /api/demo/patch and apply cleanly with git apply.
Export patch

Saves as hexpatrol-demo-run.patch (text/x-diff).