Short drama episodes are typically 60-120 seconds, making the 'last
played at XX:XX' resume prompt unnecessary and annoying. This change:
- Add isDuanju prop to VideoCard, passed as &duanju=1 URL parameter
- duanju page passes isDuanju to VideoCard
- play page checks duanju=1 param and skips the resume prompt entirely
Modify processImageUrl to proxy non-douban/non-TMDB/non-Bangumi images
(like video source covers) through /api/image-proxy, solving broken
cover image issues from third-party APIs.
- Add http/https protocol check (skip relative paths, data URIs)
- Non-douban images now go through /api/image-proxy with caching
- Users can disable via localStorage 'proxyAllImages' = 'false'
- Default: enabled
This matches the change previously made on the dev branch.
Add Microsoft Clarity as a fourth analytics provider option alongside
Umami, Google Analytics, and Custom. Clarity provides free heatmaps,
session recordings, and user analytics.
- admin.types.ts: Add 'clarity' to AnalyticsProvider union type
- api/admin/site/route.ts: Add 'clarity' to validation
- admin/page.tsx: Add Clarity option to dropdown + Project ID input UI
- layout.tsx: Inject Clarity tracking script with project ID
Add traffic analytics support to the admin panel with three provider
options:
- Umami (open-source, self-hosted) — script URL + website ID
- Google Analytics 4 — Measurement ID (G-XXXXXXXXXX)
- Custom — any third-party analytics script (百度统计, Plausible, 51la, etc.)
Changes:
- admin.types.ts: Add AnalyticsEnabled, AnalyticsProvider,
AnalyticsScriptUrl, AnalyticsWebsiteId, AnalyticsCustomScript to
SiteConfig interface
- config.ts: Add default values in getInitConfig() and configSelfCheck()
- api/admin/site/route.ts: Add analytics fields to destructuring, type
validation, and SiteConfig update
- admin/page.tsx: Add SiteConfig interface fields, state initialization,
config sync, and analytics configuration UI with provider-specific
input fields
- layout.tsx: Inject analytics scripts into <head> based on provider
type (Umami: async script with data-website-id; GA: gtag.js + config;
Custom: dangerouslySetInnerHTML)
Add Microsoft Clarity as a fourth analytics provider option alongside
Umami, Google Analytics, and Custom. Clarity provides free heatmaps,
session recordings, and user analytics.
- admin.types.ts: Add 'clarity' to AnalyticsProvider union type
- api/admin/site/route.ts: Add 'clarity' to validation
- admin/page.tsx: Add Clarity option to dropdown + Project ID input UI
- layout.tsx: Inject Clarity tracking script with project ID
Add traffic analytics support to the admin panel with three provider
options:
- Umami (open-source, self-hosted) — script URL + website ID
- Google Analytics 4 — Measurement ID (G-XXXXXXXXXX)
- Custom — any third-party analytics script (百度统计, Plausible, 51la, etc.)
Changes:
- admin.types.ts: Add AnalyticsEnabled, AnalyticsProvider,
AnalyticsScriptUrl, AnalyticsWebsiteId, AnalyticsCustomScript to
SiteConfig interface
- config.ts: Add default values in getInitConfig() and configSelfCheck()
- api/admin/site/route.ts: Add analytics fields to destructuring, type
validation, and SiteConfig update
- admin/page.tsx: Add SiteConfig interface fields, state initialization,
config sync, and analytics configuration UI with provider-specific
input fields
- layout.tsx: Inject analytics scripts into <head> based on provider
type (Umami: async script with data-website-id; GA: gtag.js + config;
Custom: dangerouslySetInnerHTML)
The data migration import/export API was missing 'turso' as a storage
type check. Without this, Turso storage fell into the Redis 'else'
branch, which tries to use hSet/withRetry methods that don't exist
on the D1Storage adapter (used by Turso), causing user data import
to fail silently.
- Import route: added 'turso' alongside 'd1' to use
createUserWithHashedPassword method
- Export route: added 'turso' alongside 'd1' to use
getUserPasswordHash method
The main @libsql/client entry point pulls in the native libsql module
and isomorphic-ws/isomorphic-fetch, which webpack cannot parse in
EdgeOne builds. Using the http subpath provides a pure HTTP client
that works in edge/serverless environments without native dependencies.
Also add libsql, @libsql/isomorphic-fetch, @libsql/isomorphic-ws to
the edge build alias list in next.config.js as a safety net.