kairee
b017af7593
docs: update readme for video/up split and follower backfill
2026-11-01 11:37:40 +08:00
kairee
cb9e8e031b
docs: document duration efficiency, up follower snapshot and nav split
2026-11-01 11:36:34 +08:00
kairee
c0b0286395
feat(web): split video and up rankings and add about page
2026-11-01 11:33:15 +08:00
kairee
5a656d42a8
feat(web): add duration efficiency rankings and about payload
2026-11-01 11:21:42 +08:00
kairee
519fc39fca
feat(up): capture follower snapshots at ingest and backfill history
2026-11-01 11:18:06 +08:00
kairee
4942d1d161
feat(db): add video pages and up follower snapshot schema
2026-11-01 11:14:36 +08:00
kairee
707ed7d7d7
docs: document dashboard cache
2026-11-01 03:27:50 +08:00
kairee
9fd277c05f
feat(web): cache dashboard aggregations with version invalidation
2026-11-01 03:27:49 +08:00
kairee
91aa3e1f95
docs: describe partial page protection
2026-11-01 03:09:21 +08:00
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