Someone asks for a certificate, an old bill or that insurance document you’re sure you saved. Now you’re checking Downloads, email attachments, and three folders called “important.” You remember what the document was about. Its filename is scan_0047.pdf. That’s the problem I’m building Klefki around: having a place for documents you’ll probably forget about until the day you need them. It’s open source, works offline, and keeps your document library encrypted. You import your files, and desktop OCR makes the words inside your scans searchable locally. Here’s what it can do today: Keep things organized: folders, custom tags, categories for Identity/Money/Legal/Health/Education/Work, favorites, renaming, and sorting by name, type, or size. Import and read documents: drag and drop or use the file picker, with upload progress and cancellation. Desktop has PDF page navigation and zoom, image previews with zoom, and text previews. Search inside files: search filenames, tags, PDF text, supported text documents, scanned PDFs, and PNG/JPEG images. OCR runs locally, including for PDFs with a mix of selectable text and scanned pages. Manage indexing: desktop uploads are indexed automatically. You can rebuild the index manually, see progress, and cancel. The index is encrypted and can sync to another device without repeating OCR there. Try optional semantic search: combine keyword search with a local embedding model when you remember the meaning rather than the exact wording. It’s English-first, off by default, and configurable per device. Review organization suggestions: the local model can suggest existing or custom tags, group unmatched documents, and propose editable new tags. It also suggests categories, dates, and currency amounts with source evidence. You review suggestions before applying them, and confirmed category corrections can guide later suggestions. Work without a connection: add files and make edits offline. Pending changes survive restarts and sync when you reconnect. Carry the library between devices: Linux and Windows desktop apps, an installable browser app, and a CLI share compatible encryption formats. Interrupted uploads resume, and conflicting edits keep both versions. Run your own sync server: Docker/Compose support, with desktop sync status and pending-change feedback. Document contents, filenames, folder names, tags, and search indexes are encrypted before upload. Lock it when you’re done: password unlock, desktop recovery-code unlock, manual locking, inactivity locking, and desktop locking when minimized. Linux also supports fingerprint unlock through your enrolled reader and system keyring, with password fallback. Recover from mistakes: desktop Trash, restore, and an undo action after moving something to Trash. Back up and leave with your files: the CLI supports encrypted backups, verified restore using a password or recovery code, integrity checks, plaintext export with metadata, and standalone file encryption/decryption. Export and restore refuse to overwrite existing destinations. Use the browser for everyday edits: uploads/downloads, folders, names, tags, favorites, offline edits, and editing supported text files up to 1 MiB. It searches synced indexes; OCR and indexing happen on desktop or CLI. Make it comfortable: light, dark, and system themes, document spacing, default sorting, configurable desktop lock time, and shortcuts for search and locking. The part I care about is being able to find a document months later using something you remember from inside it. It’s still early. Semantic search is implemented, but acceptance on a private document collection is still pending. There hasn’t been an independent security audit. Native mobile apps, macOS desktop support, and sharing are future work. Sync also runs while the app is unlocked, and browser storage needs separate backups. I wrote the core features myself; AI generated the UI and tests. The project is licensed under AGPLv3. The video uses sample documents. I’d love for people to try it with a few sample documents and tell me what feels awkward, what breaks, and what would make it useful enough to keep using.   submitted by   /u/galalei [link]   [comments]