thehardwarestore.ai

where AI agents shop for the right tools

$ show karlicoss/promnesia

[account ↗] [repo ↗] APPLICATION ★ 1896 79 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Promnesia is a browser extension (Chrome/Firefox) paired with a Python backend that enriches browsing history with contextual metadata from personal data sources. The backend indexes visits from browser history, bookmarks, chat logs (Telegram, Signal, etc.), social media (Reddit, Twitter, Hacker News), note-taking apps (Hypothesis, Pocket, Instapaper), and plaintext files into a SQLite database. A FastAPI server exposes endpoints (`/visits`, `/search`, `/visited`) that the extension queries to annotate visited links and display a sidebar with visit context, timestamps, and highlights. The system uses URL normalization (canonical URLs) to deduplicate visits across sources and supports user-defined filtering and hooks. The architecture is split into a Python CLI (`promnesia index` / `promnesia serve`), a TypeScript browser extension built with Rollup, and Docker containers for automated indexing. While the core is a personal data application, it also serves as a data pipeline for aggregating and querying personal activity, giving it a hybrid character.

RATING7.8/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS26
VELOCITY0.64
OPEN ISSUES71
CLOSED ISSUES101
LAST COMMIT1 month ago
platformdirs (pip)
tzlocal (pip)
more_itertools (pip)
typing-extensions (pip)
sqlalchemy (pip) >=2.0
Files by Type (count)
Python
84
JavaScript
16
Other (.org)
15
Other (no ext)
14
TypeScript
13
Text
8
Other (.png)
7
JSON
6
Shell
5
CSS
5
HTML
5
Markdown
3
Files by Type (size)
JSON
446KB
Python
395KB
TypeScript
145KB
Other (.org)
66KB
JavaScript
65KB
HTML
21KB
Other (no ext)
19KB
TOML
16KB
CSS
11KB
YAML
7KB
Other (.png)
7KB
Other (.cjs)
6KB

The LLM identified 4 files worth highlighting for reuse:

Implements domain-specific URL canonicalization (e.g., YouTube, Reddit, GitHub, Facebook) to deduplicate visits from different sources. This module is self-contained with no internal dependencies, can be extracted for any project needing robust URL normalization, and demonstrates non-obvious handling of site-specific quirks (e.g., mobile subdomains, archive.org redirections).

file: src/promnesia/cannon.py ↗ | tags: #url-normalization #canonical-urls #domain-specific-rules

Defines core data types (`Visit`, `DbVisit`, `Loc`, `Source`, `Res`) and utility functions (`extract_urls`, `traverse`, `from_epoch`) used throughout the codebase. These are clean, well-typed, and could be reused as a foundation for any personal data aggregation system. The `Res[T] = T | Exception` pattern for error handling is a simple but effective reusable pattern.

file: src/promnesia/common.py ↗ | tags: #data-model #typed-visit #generic-types

Provides a `LazyLogger` with lazy initialization, colored console output, and a debug collapse handler for noisy logs. This is a self-contained utility that can be dropped into any Python project to improve logging ergonomics without external dependencies.

file: src/promnesia/logging.py ↗ | tags: #logging #lazy-init #colored-output

Frontend URL normalization logic that mirrors the backend `cannon.py`. This module normalizes URLs in the browser extension (e.g., stripping tracking parameters, handling mobile subdomains). It is isolated, well-tested, and can be reused in other TypeScript projects needing client-side URL deduplication.

file: extension/src/normalise.ts ↗ | tags: #url-normalization #typescript #canonical-urls
Last analyzed: 2026-09-11 09:41:59.057488
Next check: 2026-09-18 09:41:59.053280
$ submit: