Local-first Chrome extension for visual bookmarks, tasks, reminders, notes, and AI assist.
Little Later is a Manifest V3 Chrome extension with no backend. The 500 by 600 popup stores visual bookmarks, tasks, reminders, and notes in a Dexie IndexedDB vault. A service worker captures tabs, fires reminder notifications, and offers context-menu save and note actions. Profiles lock with AES-GCM. AI Assist talks to Ollama, LM Studio, or a custom OpenAI-compatible endpoint and will not write or export until the user confirms in chat.
Keep browsing captures, tasks, reminders, and notes in the browser profile instead of a hosted account, and let a local model act on that data only after a click.
Problem being solved
Bookmarks, todos, reminders, and notes usually live in separate cloud products. A local-only Chrome popup needs capture, encryption, notifications, and optional AI without a server.
Key challenges
The MV3 service worker suspends, so alarms re-run tab capture and reminder notifications. (src/background/background.ts)
The whole product UI is a 500 by 600 HashRouter popup, not a website. (src/popup/index.css)
Local Ollama and LM Studio reject the extension Origin, so a DNR rule rewrites it. (src/background/background.ts)
Only one Dexie vault can be unlocked; another unlock is refused until lock. (src/services/user.ts)
AI settings live outside the vault, so a mismatched activeUserId stamp must fail closed. (src/services/settings.ts)
Importable backups are a custom length-prefixed binary, not a Dexie JSON dump. (src/services/dataExchange.ts)
Conceptual capture and scheduling interface preview. This is a code-rendered concept preview, not a product screenshot.
Screenshots
Not added yet
Unsaved visual-bookmark history is LRU-capped so capture cannot grow without bound. (src/services/visualBM.ts)
Design decisions
Stay a Chrome extension with no backend or hosted sync. (manifest.json)
Keep a single unlocked Dexie database named LLDB. (src/utils/db.ts)
Queue mutate, destructive, and export AI tools until in-chat Confirm. (src/services/ai/main.ts)
Require the profile lock password for importable .lldat backups. (src/services/dataExchange.ts)
Store settings in chrome.storage.local and stamp them with activeUserId. (src/services/settings.ts)
Use built-in local URLs for Ollama and LM Studio; Custom supplies its own. (src/services/ai/config.ts)
Fall back to localStorage when chrome.storage is unavailable in non-production. (src/utils/chrome.ts)
Git & development activity
Future
What’s next
Add a signed CRX to GitHub Release assets using SIGNING_KEY, while keeping the zip as the supported Chrome install.
Roadmap
The committed release workflow still ships zip plus checksums only.
CI runs typecheck, test, and build; Playwright e2e and the visual tour are local scripts, not CI jobs.
Upcoming features
Note the current webpage from AI Assist
Link a note to the current webpage from AI Assist
Ideas
Chrome Web Store listing with a store-assigned ID.