D
DocSort v0.1.2

A filing app for people with piles

Scan it
and forget it.

Local-first document organization that reads your scans, learns from your existing folders, and files things where they belong — so the pile on your desk stops being a decision.

Everyone's one of two paperwork personas.

PERSONA 01

“I have stacks of paper.”

Mail opens, glances at it, sets it down. Scanner plugged in. Folder called to-sort/. Good intentions, later problem.

Deferred by default ADHD-friendly
PERSONA 02

“I handle my paper like a boss.”

Scans immediately. Folder tree manicured. Naming conventions memorized. Rules written. Spreadsheets reconciled. In control.

High-control Rule-writer

DocSort is built so both of you like it. Let me show you why.

I have stacks
of paper.

Mail. Receipts. Statements. A scanner plugged in for two years. A folder called ~/Desktop/to-sort/ with four thousand PDFs in it.

If you have ADHD, or you run anything that generates paperwork, you know what this stack looks like.

~/Desktop/to-sort/
IMG_20240112_0001.jpg2.1 MB scan-0032.pdf860 KB Scan from HP ENVY.pdf1.4 MB Untitled-3.pdf3.9 MB statement (4).pdf210 KB IMG_3902.HEIC5.0 MB … 3,994 more files

— a real folder, changed-name-to-protect-the-guilty

I handle my paper
like a boss.

Every scan hits the right folder the day it arrives. Naming scheme locked. Rules written in Hazel. Everything lives where it's supposed to.

You already know the shape of a well-run filing system. The friction is maintaining it — keeping rules working when vendor templates change, onboarding each new document type by hand, writing regex at 11 PM.

~/Documents/business/
2025-01 — WSB Statement (Richland).pdf 2025-01 — Acme Corp Invoice.pdf 2025-01 — Stripe Payout.pdf 2025-01 — Property Tax (1603 Howard).pdf … impeccably named, hand-filed
Already has a system Wants the system automated

Every piece of paper is three decisions.

01 · IDENTIFY
What is it?

Invoice? Statement? Receipt? Which vendor? Which year?

02 · ROUTE
Where does it go?

Business? Personal? Which LLC? Taxes this year or next?

03 · NAME
What do I call it?

Date first or vendor first? Which date format? Do I even remember?

Times fifty pages. So it becomes a later problem. Later always wins.

Scan a thing.
Have it end up in the
right folder.

Not in an app. Not in a database. In a folder. On your drive. Right where your file manager expects it. That's the whole ask.

D
DocSort

A local-first filing cabinet
powered by any LLM you trust.

You watch a folder, or drop a file in. DocSort reads the text, asks an AI what it is, checks it against your existing library, and files it with a clean name. Your files stay on your drive. Your folders stay in Finder.

Local-first OpenAI · Claude · Ollama macOS · Windows · Linux Open source

Scan.
Then forget.

Either let DocSort file it automatically, or leave it as "needs review" until you feel like it.

Nothing is final. You can revert, rename, or re-file anything later. The paper is off your desk without being a commitment.

1
Drop the scan
…or point at a watched folder
2
DocSort analyzes & files
or parks it as "needs review"
3
Come back to it whenever
revert, rename, re-route — history remembers

Three shapes of solution. None of them fit me.

Rule engines

Hazel, File Juggler

  • Powerful — but regex per vendor
  • Brittle when templates change
  • No semantic understanding

Self-hosted dashboards

Paperless-NGX

  • Run Docker, manage a DB
  • Docs live inside their app
  • Heavy web UI, not your Finder

Cloud knowledge tools

Evernote, Notion

  • Your tax returns on their servers
  • Proprietary lock-in
  • Not privacy-forward

The magic middle.

Organizes actual files on your actual drive, with AI understanding instead of brittle rules.

Rule engine

Hazel

  • Files in Finder ✓
  • AI understanding ✗
  • Local ✓

The middle

DocSort

  • Files in Finder ✓
  • AI understanding ✓
  • Local-first ✓
  • Bring your own LLM ✓

Dashboard / cloud

Paperless / Evernote

  • Files in Finder ✗
  • AI understanding ~
  • Local ✗

Four steps. Mostly invisible.

01 · READ
Extract text
OCR the scan, parse the PDF, pull what's readable.
02 · UNDERSTAND
Find entities
Dates, amounts, vendors, accounts, people — via the LLM.
03 · CLASSIFY
Pick a folder
Score every destination; take the top — if it's confident enough.
04 · FILE
Move & rename
Apply your naming template. Move the bits. Log it all.

Every one of these is a Job — versioned, revertable, and visible in History. Nothing ever "just happens."

Destinations, not tags.

Point at a folder. Give it a name and a description. That's the spec.

You can have one catch-all or a dozen specific buckets. Each destination is just a real folder on disk, scanned for context.

Destinations view

It learns from
your mess.

DocSort scans the destination folder and extracts patterns from names that are already there.

Your convention — even an accidental one — becomes the blueprint. No template to write.

DETECTED PATTERNS · business-and-finance/
YYYY-MM - vendor (property).pdf
matched 312 files · 96% confidence
YYYY-MM-vendor.pdf
matched 148 files · 92% confidence
Vendor_Statement_YYYYMM.pdf
matched 74 files · 88% confidence
813 learned patterns ~9,000 files scanned

Seven signals: a committee decision, not a dictatorship.

Each destination collects points across 7 signals. Every signal is hard-capped so no one can railroad the decision. Top score wins — if it clears 40%.

Linked entity matchhard rules you set on a destination
+60%
Direct AI suggestionthe LLM explicitly picks this folder
+60%
Embedding similaritysemantic match to existing docs
+40%
Metadata tagskeywords you tag on destinations
+30%
Destination name matchkeywords from the folder name
+25%
Description matchkeywords from the folder description
+15%
THRESHOLD
< 40% = Needs Review

If nothing's confident, DocSort refuses to guess. The file sits in your queue until you decide.

WHY CAPS

Without them, a name-match for "LLC" would drag every business doc into one folder. Caps keep signals honest — global entities inflate no scores at all.

Global entities & linked entities.

Global · soft touch

Your cheat sheet

Names, places, and vendors your app should know about — but not route on.

  • Your name and family members
  • Your home address
  • Cross-business vendors: Home Depot, IRS

Makes the AI smarter. Standardizes names on output. Doesn't force a filing decision.

Linked · hard rule

Strict routing

Entities that belong to exactly one folder — when matched, confidence jumps 60%.

  • A specific LLC: Gatsby Ventures, LLC
  • An account number: Acct: 25067771
  • A property address: 1603 Howard Ave

Use sparingly. The heavy hammer, for text that means exactly one destination.

"Needs review" is
a first-class state.

If DocSort isn't confident, it won't guess. Your file sits in a review queue — scanned, read, understood, but unfiled — until you want to deal with it.

The pile is processed without being decided. This is the line that lets ADHD brains scan.

Every decision is revertable.

History is a full job log. Every analysis, every scan, every filing.

Jump back to any file, see what DocSort thought, change its mind. Nothing is a commitment.

Pending Processing Needs review Filed Error
History view

Your files don't leave your machine.

Only the extracted text snippets get sent to the AI provider you chose — with your own API key. Or run it fully offline.

LOCAL · RECOMMENDED
Ollama

100% on-device. Nothing leaves your network. Slower, cheaper, fully private.

SMART CLOUD
Claude · OpenAI

Extracted text only, sent with your key. Enterprise APIs don't train on your data by default.

NEVER
Our servers

DocSort has no server. Nothing flows through us. There's no "us" to flow through.

Good defaults.
High ceiling.

Drop a file — it just works. But when you want control, every knob is there.

Naming templates
{date}-{vendor}-{description}.pdf
Per-destination tags
tune what signals a match
Linked-entity rules
hard-route specific text
Custom subdirectory logic
year/month/property folders
Watched folders + CLI
docsort process ~/Documents/unsorted --recursive

A real native app.
Not a web app wearing a costume.

SHELL
Tauri

Small native binaries, not Electron.

BACKEND
Rust

Fast, safe, gets out of the way.

STATE
SQLite

Local job store. One file. Inspectable.

LLM
BYO

Claude, OpenAI, or local Ollama.

macOS · Apple Silicon & Intel Windows Linux Open source

Early, but real.

This is a finalizing-for-release build. I use it daily on a ~9,000-file corpus across 5 destinations.

Rough edges exist. It's open source. I'd rather have five people use it and tell me it's wrong than polish in a vacuum.

Version
v0.1.2
Files indexed (my setup)
~9,000
Learned patterns
800+
D
DocSort v0.1.2

One ask

Point it at a folder.
Drop something in.

Tell me what breaks. Tell me what feels right. That's the ask.

github.com/JonathanPorta/docsort make setup && make dev

Tweaks

roomy
tight