Commit Graph
47 Commits
Author SHA1 Message Date
kairee 6aefe9ce87 feat(web): require login only for candidates and system 2026-11-01 03:09:21 +08:00
kairee 55c40db047 fix(tools): resolve config path inside container 2026-11-01 02:58:56 +08:00
kairee b0aa919e18 build: include tools in image for server-side imports 2026-11-01 02:55:31 +08:00
kairee 028b3337b0 fix(web): keep fan range picker open until apply 2026-11-01 02:47:31 +08:00
kairee 917a93ab92 feat(web): use a range calendar picker for fan dates 2026-11-01 02:44:33 +08:00
kairee e9fbbc1650 docs: document fan range modes and delta column 2026-11-01 02:36:48 +08:00
kairee 274eccba93 feat(web): add fan date range modes and delta column 2026-11-01 02:36:48 +08:00
kairee 998d0fd0c0 fix(tools): guard csv replace against newer fan records 2026-11-01 02:25:18 +08:00
kairee dd6b09807d docs: document csv fan import 2026-11-01 02:23:10 +08:00
kairee c4c9c0b038 feat(tools): replace xxm fan import with bilibili csv 2026-11-01 02:23:09 +08:00
kairee 58df38814a docs: describe fan recent window and cumulative range 2026-11-01 02:14:10 +08:00
kairee d8e9a7b0f0 feat(web): show cumulative fan range and limit recent records 2026-11-01 02:14:10 +08:00
kairee b6a9f598b5 fix(web): avoid skeleton flicker and cache overview while filtering 2026-11-01 02:02:26 +08:00
kairee 4bb3d3bef5 docs: document path routing and in-place filter updates 2026-11-01 01:55:37 +08:00
kairee 52a8d90c47 feat(web): use history routing and preserve scroll on filter changes 2026-11-01 01:55:37 +08:00
kairee 1b08854b25 fix(web): revalidate app assets and rename compose example 2026-11-01 01:42:26 +08:00
kairee eff4b0149d fix(web): show exact trend values and integer axis ticks 2026-11-01 01:37:55 +08:00
kairee fcca14c0f9 docs: document docker deployment workflow 2026-11-01 00:52:06 +08:00
kairee b9d82e54c7 feat(deploy): add Dockerfile and compose for server sync 2026-11-01 00:51:57 +08:00
kairee 7674fc2c47 docs: update ranking labels, palette and export removal 2026-11-01 00:37:28 +08:00
kairee c2ef998720 feat(web): refresh palette, simplify ranking toolbar and drop export 2026-11-01 00:37:20 +08:00
kairee 6a053bdfe8 docs: document UP ranking defaults and fan history import 2026-11-01 00:06:59 +08:00
kairee ff101803cd feat(tools): import 90-day fan history from public data source 2026-11-01 00:06:52 +08:00
kairee f9a5478800 fix(web): fix UP card layout and fan delta semantics 2026-11-01 00:06:43 +08:00
kairee 7fcd1db987 fix(web): count initial import from tracked videos 2026-10-31 23:54:56 +08:00
kairee 456e06f105 chore(web): finalize scroll behavior and preview assertions 2026-10-31 23:54:01 +08:00
kairee 40cdfaf3e5 docs: add analytics and preview tool to structure 2026-10-31 23:51:53 +08:00
kairee c745d889e7 fix(tools): derive preview task counts from source data 2026-10-31 23:51:31 +08:00
kairee 60d7b0f24f fix(web): center active filters and compact mobile cards 2026-10-31 23:50:19 +08:00
kairee d18ebbfb2f docs: document read-only dashboard and preview workflow 2026-10-31 23:47:02 +08:00
kairee cbba405271 feat(web): add mobile-first read-only dashboard frontend 2026-10-31 23:46:55 +08:00
kairee 257fbe009b fix(web): align trend ranges, next runs and preview task records 2026-10-31 23:46:49 +08:00
kairee 19572171b8 feat(web): add read-only dashboard server and query layer 2026-10-31 23:13:54 +08:00
kairee e7cae035e0 fix(tools): backfill fan counts in chronological order 2026-10-31 23:10:54 +08:00
kairee 94ee9aefd1 feat(tools): add deterministic preview database seeder 2026-10-31 23:05:43 +08:00
kairee 8ffac5103f feat(analytics): add heat, growth and interaction metrics 2026-10-31 23:03:20 +08:00
kairee 8a87ebfb7c refactor(favsort): send bilibili requests through httpx
Reuse a pooled httpx client for favsort GET and POST requests, share the raw-request-derived browser headers, and add folder-specific referers for ids, infos and sort. Add transport tests for header parity and anonymous-to-authenticated fallback.
2026-10-31 22:36:48 +08:00
kairee 5b22ed1c5d feat(http): use httpx with pooled connections and browser headers
Add httpx and route Bilibili and Telegram requests through pooled clients with keepalive and explicit timeouts. Align Bilibili headers with data/raw-request.txt: Chrome 155 UA, sec-ch-ua, space.bilibili.com origin, folder-specific referer, and priority header. Close replaced clients when credentials change. Add transport contract tests and live read-only validation for nav, folder sync, WBI search, and Telegram getUpdates.
2026-10-31 22:28:32 +08:00
kairee 71a0e8c1d6 fix(telegram): back off on transient polling failures
Give getUpdates a wider HTTP timeout than the long-poll window, log transient SSL/network disconnects as warnings, apply exponential backoff with recovery logging, and only escalate to error after five consecutive failures.
2026-10-31 22:01:05 +08:00
kairee 2d42d8ed55 fix(telegram): handle expired callback queries gracefully
Parse Telegram HTTP error bodies so the real description is logged, fall back to a normal message when answerCallbackQuery rejects an expired callback ID, and remove inline buttons after a successful action.
2026-10-31 21:59:04 +08:00
kairee e2e4dc3336 fix(telegram): dedupe candidates before sending
Deduplicate candidates by aid at the notifier boundary so duplicate queue entries cannot produce repeated message bodies and button rows. The discovery layer already deduped by aid; this adds defense in depth with a regression test.
2026-10-31 21:55:10 +08:00
kairee d971e718e9 feat(p3): add discovery, telegram notifications, and one-click favorites
Implement WBI video search with legacy fallback, classification scoring, candidate pool, permanent seen-aid dedupe, blacklist filtering, and batched Telegram notifications. Add write client for fav deal/sort, target-folder selection, insertion position calculation, read-back verification, fav_action locking, retry on failure, ignore and blacklist actions. Wire discovery, candidate cleanup, Telegram long polling, and new discover/candidates CLI commands into the scheduler. Add migration v3 for candidate duration and index stats.
2026-10-31 21:23:12 +08:00
kairee 6a21b5d905 fix: close data integrity and hot-reload review findings
Backfill same-day snapshots for newly added or restored videos, preserve successful fan snapshots on resume, persist incomplete state before forced re-runs, and split collection completion from backup completion so failed backups can retry without API calls. Reject missing data payloads instead of treating them as empty folders, guard against mass-unfav on suspicious empty remote folders, rebuild Bilibili clients when credentials change, recompute primary folder ownership from active relations with per-folder fav_time, preserve original titles for dropped invalid videos, poll config every 60 seconds, and fix favsort verify interval and mixed resource types.
2026-10-31 20:58:36 +08:00
kairee 178ab64b18 feat(auth): separate read and write bilibili accounts 2026-10-31 20:01:21 +08:00
kairee 5c2ab7b187 feat(p1): add daily snapshots and fan tracking
Implement P1: seven-metric view snapshots, relation/stat fan snapshots, failure placeholders, resume by daily completion markers, Cookie login warnings, daily SQLite backups, Shanghai daily scheduling, and CLI snapshot/auth-check commands. Real read-only run captured 795/795 videos successfully over 1124s with a verified daily backup.
2026-10-31 19:19:24 +08:00
kairee ee289bfa56 docs: mark P0 as implemented in project status 2026-10-31 18:09:03 +08:00
kairee e2cdf997af feat(p0): add favorite folder sync and sqlite data foundation
Implement P0 of the reaction dashboard: config loading with hot reload, SQLite migrations with backups, single-writer queue, read-only Bilibili fav client, folder import/diff sync, invalid-resource handling, blacklist seed, scheduler, and JSON redacted logging. Includes offline unit and transport-level contract tests; all existing and new tests pass.
2026-10-31 18:08:33 +08:00