Inspiration
<1% of the World uses AI Properly , and less than 0.01% of that 1% use the Frontier Versions of AI via Codex or Claude Code or any proper platform , most of us are still stuck at using AI on browsers. Current AI Companies care less trying to optimize browser versions but that requires the most focus as 9 out of 10 people you know only use AI via browsers and thats where we come in
The missing layer isn't another chatbot. It's a private memory and organization layer that sits on top of the apps you already use — without uploading your chats to someone else's cloud.
That's why we built Tecora.
What it does
Tecora is a Manifest V3 Chrome extension that captures chats from claude.ai, chatgpt.com, and gemini.google.com into one on-device library.
With it you can:
- Browse chats across platforms in a side panel
- Organize with folders, tags, pins, and derived titles
- Resume work via a cross-platform "Continue where you left off" list
- Search titles + captured message text with
Ctrl/Cmd+K - Export markdown, portable JSON archives, or ZIP (with an honest
MISSING.mdwhen assets can't be fetched) - Bulk-delete with a safety-gated queue
- Toggle message capture per platform, or wipe all Tecora data anytime
What it is not: an AI wrapper, a model router, or a sync SaaS. Tecora does not call models. There is no Tecora account and no Tecora backend. Data lives in IndexedDB in your browser.
How we built it
Stack: WXT (MV3) · React · TypeScript · Dexie (IndexedDB) · MiniSearch · fflate (ZIP)
Architecture in one glance:
page (main world) patches fetch/XHR — catches chat list + detail JSON
-> postMessage
content script adapters normalize data, hosts palette + τ dock
-> runtime messages
service worker Dexie writes, folders/tags, MiniSearch, bulk queue
-> IndexedDB (on device)
side panel React UI over local data
- Claude / ChatGPT: main-world fetch/XHR intercept for lists + messages
- Gemini: DOM scrape for lists; messages when the chat is open
- UI surfaces: side panel, Shadow DOM command palette, floating τ dock
- Privacy controls and local usage estimates (never fake platform quota)
Landing page: chat-local-organizer.lovable.app
Repo: github.com/nothariharan/Tecora
Challenges we ran into
- Three different host UIs. Each platform exposes history differently. Claude/ChatGPT lend themselves to network intercept; Gemini needed scrape + open-chat capture.
- MV3 service worker lifecycle. Idle kills are real — anything that must survive goes to IndexedDB, not memory.
- Host CSS leakage. Palette and dock mount in Shadow DOM so Claude/ChatGPT styles don't break our UI.
- Honest export. ZIP asset harvest fails sometimes — we surface that in
MISSING.mdinstead of pretending every file made it. - Scope discipline. Easy to drift into "another AI product." We kept Tecora as the organization layer only.
Accomplishments that we're proud of
- A usable v0.1 across all three platforms
- Real local organization: folders, tags, pins, resume, search, export/import
- Privacy model that matches the pitch: no account, no backend, wipe anytime
- Product surfaces that feel like one system: side panel +
⌘Kpalette + τ dock - A clear story for judges: install → capture → organize → search → export
What we learned
- Multi-model users don't need another chat box — they need memory that travels with them
- "Local-first" is a product decision, not a slogan: every feature has to work without a server
- Extension work is mostly adapters + resilience (selectors change, workers die, hosts fight your CSS)
- Honesty beats hype: estimates labeled as estimates, missing assets documented, no fake quota meters
What's next for Tecora
- Chrome Web Store packaging and install polish
- Richer project / workspace support where platforms allow
- Real usage meters only where APIs make that honest
- Deeper artifact / Canvas export
- Keep the core promise: one local library for the AI apps you already use
Built With
- chrome
- dexie
- dom
- extension
- fflate
- indexeddb
- manifest
- minisearch
- playwright
- react
- shadow
- typescript
- v3
- vitest
- wxt
Log in or sign up for Devpost to join the conversation.