Germany sends letters for everything β taxes, courts, landlords, immigration. Each one has a deadline. Most consequences are permanent if you miss it. BriefKlar tells you what the letter is, what to do, and how long you have.
Germany sends official letters that look like this:
"GemÀà § 355 Abs. 1 AO steht Ihnen gegen diesen Bescheid der Einspruch zu. Der Einspruch ist innerhalb eines Monats nach Bekanntgabe dieses Bescheids einzulegen."
For millions of immigrants, expats, and international students β this is unreadable. And the consequences of ignoring it are severe:
| Letter | Ignored for | Result |
|---|---|---|
| Steuerbescheid | 1 month | You permanently lose the right to contest β even if the amount is wrong |
| Mahnbescheid | 14 days | Automatic enforcement order β bank accounts and wages can be seized |
| KΓΌndigung (employer) | 21 days | You permanently lose the right to contest your dismissal |
| AuslΓ€nderbehΓΆrde | 4 weeks | Residence permit decisions become final |
BriefKlar solves this.
π± Scan with phone β π OCR + classify β β
Plain-language explanation
- Open BriefKlar on your desktop β a QR code appears
- Scan the QR with your phone β a camera viewfinder opens
- Photograph your letter β align it to the A4 guide frame
- Get instant results β letter type, deadline, what to do, free help resources
Everything runs locally on your computer. No cloud. No account. No subscription.
|
π Smart Classification with OCR Tolerance Identifies 26 German letter types using weighted keyword scoring with fuzzy matching β handles OCR errors like "F1nanzamt" β Finanzamt, broken umlauts, and ligature splits. Confidence score shown so you always know how certain the result is. |
β° Deadline Detection (Β§ 122 AO) Extracts deadlines from letter text and applies the Β§ 122 AO 3-Tages-Fiktion β letters are legally deemed delivered 3 days after the postmark, not when you receive them. |
|
π Multilingual Interface UI available in English, German, Turkish, Arabic, and Ukrainian β the five most common languages among people who need this app. Letter explanations are in plain English by default, with more languages coming. |
π Free Help Resources Each letter type links to the relevant free German counselling services β Caritas MBE, Schuldnerberatung, Mieterverein, VdK, and more. |
|
π€ Share with Advisor One-tap copy of a clean, advisor-friendly summary. Paste it into an email to your Migrationsberater, print it for Schuldnerberatung, or export as a professional PDF. |
π 100% Offline No data ever leaves your computer. OCR runs locally with Tesseract.js. Database is a local SQLite file. AI reply generation is optional BYOK (bring your own key). |
|
π± Mobile Scan via QR CamScanner-style viewfinder with A4 alignment frame. Phone and computer just need to be on the same WiFi. |
π Misclassification Feedback "Was this wrong?" button on every letter. Your corrections are saved locally and help improve classification accuracy over time. |
BriefKlar is intentionally a desktop app. When people receive an official letter and need to respond β write a formal Einspruch, research their rights, compare with previous correspondence β they sit down at a computer. The desktop is where the real work happens. The phone's role is just the camera: scan the QR, snap a photo, done.
- Instant. Classification takes <100ms. No waiting for inference.
- Offline. No model download, no background service, no dependencies.
- Deterministic. Same letter always produces the same result.
- Lightweight. The entire knowledge base is a 40KB JSON file.
The classifier uses fuzzy matching with Levenshtein distance to tolerate OCR errors β "F1nanzamt" matches "Finanzamt", broken umlauts are normalised, and ligature splits are handled. For letters that truly need AI (reply generation), BriefKlar supports optional BYOK (Bring Your Own Key) with Gemini's free tier β no bundled model, no mandatory install, no background process.
The target audience (immigrants, non-technical users) should never have to install Ollama, download a 3β7 GB model, or debug why a background service isn't running. BYOK means:
- Zero mandatory setup β the app works fully without any API key
- Free tier available β Gemini's free tier handles 15 req/min, no credit card
- No resource drain β no local LLM hogging RAM/CPU during a quick scan
- No dependency conflicts β Ollama sets
ELECTRON_RUN_AS_NODE=1globally, which breaks Electron apps
AI reply generation is a power-user feature, not a core requirement. The built-in legally-verified German reply templates (Einspruch, Widerspruch, KΓΌndigung) work without any API key.
Tax (7 types)
| Type | German | Urgency |
|---|---|---|
| Income Tax Assessment | Einkommensteuerbescheid | π High |
| VAT Assessment | Umsatzsteuerbescheid | π High |
| Property Tax | Grundsteuerbescheid | π‘ Medium |
| Trade Tax | Gewerbesteuerbescheid | π High |
| Vehicle Tax | Kfz-Steuer | π’ Low |
| EU VAT ID Notice | USt-IdNr (BZSt) | π‘ Medium |
| Personal Tax ID | Steueridentifikationsnummer | π’ Low |
Debt & Enforcement (4 types)
| Type | German | Urgency |
|---|---|---|
| Payment Reminder | Mahnung | π΄ Critical |
| Debt Collection | Inkasso | π High |
| Court Payment Order | Mahnbescheid | π΄ Critical |
| Bank/Wage Seizure | PfΓ€ndungs- und Γberweisungsbeschluss | π΄ Critical |
Social Benefits (7 types)
| Type | German | Urgency |
|---|---|---|
| Benefit Approval | Jobcenter β Bewilligungsbescheid | π’ Low |
| Benefit Cancellation | Jobcenter β Aufhebungsbescheid | π΄ Critical |
| Benefit Sanction | Jobcenter β Sanktionsbescheid | π΄ Critical |
| Health Insurance | Krankenkasse β Bescheid | π‘ Medium |
| Parental Benefit | Elterngeld | π High |
| Housing Benefit | Wohngeld | π‘ Medium |
| Child Benefit | Kindergeld β Familienkasse | π‘ Medium |
Immigration & Family (3 types)
| Type | German | Urgency |
|---|---|---|
| Immigration Notice | AuslΓ€nderbehΓΆrde | π΄ Critical |
| Naturalisation | EinbΓΌrgerungsbescheid | π High |
| Childcare Place | Kita / Kindergarten Bescheid | π High |
Housing, Employment & Other (8 types)
| Type | German | Urgency |
|---|---|---|
| Landlord Termination | KΓΌndigung vom Vermieter | π΄ Critical |
| Utility Bill Settlement | Nebenkostenabrechnung | π‘ Medium |
| Employer Termination | KΓΌndigung vom Arbeitgeber | π΄ Critical |
| Court Notice | Gerichtsbescheid | π΄ Critical |
| Pension Insurance | Deutsche Rentenversicherung | π‘ Medium |
| Student Aid | BAfΓΆG | π High |
| Utility Provider | Strom / Gas / Internet | π’ Low |
| Broadcasting Fee | Rundfunkbeitrag (GEZ) | π’ Low |
| Technology | Purpose | |
|---|---|---|
| π₯οΈ | Electron 41 | Desktop shell |
| β‘ | electron-vite | Build tooling |
| βοΈ | React 18 + TypeScript | Frontend |
| π¨ | Tailwind CSS | Styling |
| π | Tesseract.js | OCR (German deu.traineddata) |
| πΌοΈ | Sharp | Image preprocessing |
| ποΈ | better-sqlite3 | Local database |
| π¦ | electron-builder + NSIS | Windows installer |
| π | Custom i18n | 5 languages: EN, DE, TR, AR, UK |
git clone https://github.com/MfFischer/briefklar.git
cd briefklar
npm installBriefKlar needs deu.traineddata (~15 MB). Download it and place it at:
resources/tessdata/deu.traineddata
Download: github.com/tesseract-ocr/tessdata
On first launch, BriefKlar automatically copies it to the right place.
# Development
npm run dev
# Build Windows installer
npm run build:winInstaller output: dist/BriefKlar Setup 0.2.0.exe
briefklar/
βββ knowledge-base/
β βββ letters.json # 26 letter type definitions
βββ scripts/
β βββ dev.js # Dev server launcher
β βββ build.js # Installer build script
βββ src/
βββ main/ # Electron main process
β βββ pattern-matcher.ts # Classification engine (fuzzy matching)
β βββ image-processor.ts # Sharp + Tesseract pipeline
β βββ handoff-server.ts # Mobile scan QR server
β βββ feedback.ts # Misclassification tracking
β βββ db.ts # SQLite queries
β βββ ai-reply.ts # Optional BYOK Gemini integration
βββ renderer/src/ # React frontend
β βββ i18n.ts # Multi-language translations
β βββ pages/ # Dashboard, LetterView, Settings
β βββ components/
β βββ FeedbackButton.tsx # "Was this wrong?" reporting
β βββ ShareSummary.tsx # One-tap advisor sharing
β βββ ScanModal.tsx # QR scan + review flow
β βββ ReplyEditor.tsx # Template + AI reply generation
βββ shared/
βββ types.ts # Shared TypeScript interfaces
All classification logic lives in knowledge-base/letters.json. Each entry follows this schema:
{
"id": "my_letter_type",
"label": "English label",
"labelDe": "Deutscher Name",
"urgency": "low | medium | high | critical",
"senderPatterns": ["BehΓΆrde XY"],
"subjectPatterns": ["Betreff keyword"],
"bodyPatterns": ["Β§ 123 BGB", "specific phrase"],
"whatItIs": "Plain-English explanation of what this letter is.",
"whatToDo": ["Step 1", "Step 2"],
"consequence": "What happens if ignored.",
"deadlineRule": "explicit_or_1_month",
"replyTemplateId": null,
"freeHelp": ["Free resource β website.de"]
}Scoring weights: senderPatterns Γ3, subjectPatterns Γ4, bodyPatterns Γ2.
The fuzzy matcher tolerates OCR errors automatically: patterns with 6β10 characters allow 1 edit, 11β20 allow 2 edits, 21+ allow 3 edits. Short patterns (< 6 chars) require exact matches to avoid false positives.
- OCR quality depends on photo quality β good lighting and a flat letter make a big difference
- Windows only for now (macOS/Linux builds are possible but untested)
- App is unsigned β Windows SmartScreen shows a warning on first run: click More info β Run anyway
- German letters only (classification is German-specific; UI supports 5 languages)
- AI reply generation requires a Gemini API key (free tier available)
- OCR + rule-based letter classification (26 types)
- Fuzzy matching for OCR error tolerance (Levenshtein distance)
- Β§ 122 AO 3-Tages-Fiktion deadline calculation
- Betreff, reference number, and amount extraction
- "Was this wrong?" misclassification feedback button
- Multi-language UI (EN, DE, TR, AR, UK)
- Share with advisor β copy summary + PDF export
- Free help resources per letter type (Caritas, VdK, Mieterverein, etc.)
- Windows installer (NSIS, no click-through)
- Reply template library β Einspruch, Widerspruch, KΓΌndigung variants
- Windows calendar reminder β add deadline directly to Windows Calendar
- Feedback-driven pattern boosting β misclassifications improve weights over time
- Code signing β remove SmartScreen warning
- macOS build
The current mobile flow (QR β same WiFi β local HTTP) works well but requires the desktop to be on. A PWA companion would remove that constraint:
Current: Phone β QR code β local HTTP β Desktop (must be online)
With PWA: PWA on phone
β
Local API ββββ if desktop is online
OR
IndexedDB ββββ if offline (photos queued)
β
Desktop syncs + processes when it comes back online
This is a v2 feature β the right time to build it is when real users hit the "desktop was off" problem in practice.
MIT Β© 2026 Maria Fe Fischer
Built for everyone who has ever stared at a German letter and thought: "what does this even mean?"