goon/app
jtrzupek bcee5851e9 feat(api): per-device saved searches (keyword favorites)
User-report (mobilism): scenes are often poorly titled, so saved keyword queries are a useful extra retrieval strategy. New saved_searches table (device-scoped via X-Device-Id, unique per device+query, 50/device cap) + GET/POST/DELETE /saved-searches. Migration 0024. Verified CRUD on prod: add trims+dedups idempotently, empty rejected 422, delete idempotent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:52:18 +02:00
..
api feat(api): per-device saved searches (keyword favorites) 2026-06-16 13:52:18 +02:00
connectors fix(scrapers): freshporno browse from /latest-updates/ not homepage root 2026-06-15 09:59:40 +02:00
extractors fix(extractors): 4k69 direct okcdn extraction (replaces WebView fallback) 2026-06-14 11:39:36 +02:00
models feat(api): per-device saved searches (keyword favorites) 2026-06-16 13:52:18 +02:00
normalize feat(ingest): SQL phash match, tag inference + backfill, clip-store skip, browse tubes, watchdog 2026-06-01 15:07:35 +02:00
resolve fix(ingest): cap code/director to column length (GOON-J) 2026-06-13 19:04:10 +02:00
scheduler feat(scheduler): per-origin ingest freshness watchdog -> Sentry 2026-06-15 10:26:25 +02:00
templates feat(seo): public HTML SEO router + templates; add CLAUDE.md; ignore .nimbalyst 2026-05-31 16:29:59 +02:00
__init__.py Initial commit 2026-05-20 10:10:22 +02:00
auth.py Initial commit 2026-05-20 10:10:22 +02:00
config.py feat(scheduler): per-origin ingest freshness watchdog -> Sentry 2026-06-15 10:26:25 +02:00
db.py Initial commit 2026-05-20 10:10:22 +02:00
ingest.py fix(ingest): strip NUL bytes from raw payloads before Postgres write 2026-06-11 19:48:22 +02:00
main.py feat(api): per-device saved searches (keyword favorites) 2026-06-16 13:52:18 +02:00