export interface Article { id: string; url: string; title: string; author: string | null; siteName: string | null; excerpt: string | null; content: string; textContent: string; leadImage: string | null; wordCount: number; readingProgress: number; readingTimeSeconds: number; isFavorite: boolean; isArchived: boolean; folderId: string | null; tags: string; createdAt: string; updatedAt: string; readAt: string | null; finishedAt: string | null; } export interface Folder { id: string; name: string; color: string; icon: string; parentId: string | null; sortOrder: number; createdAt: string; } export interface Highlight { id: string; articleId: string; text: string; note: string | null; color: string; startOffset: number | null; endOffset: number | null; createdAt: string; } export interface ReaderSettings { fontSize: number; // 14-32 fontFamily: "system" | "serif" | "sans" | "mono"; lineHeight: number; // 1.4-2.2 maxWidth: number; // 500-900 theme: "dark" | "light" | "sepia"; autoTheme: boolean; dayTheme: "dark" | "light" | "sepia"; nightTheme: "dark" | "light" | "sepia"; } export interface TTSSettings { engine: "browser" | "kokoro"; speed: number; // 0.5-3.0 voice: string; kokoroUrl: string; } export interface ReadingStats { date: string; articlesRead: number; articlesAdded: number; wordsRead: number; timeSpentSeconds: number; streak: number; } export interface ReadingGoal { id: string; type: "daily" | "weekly" | "monthly"; metric: "articles" | "words" | "time"; target: number; isActive: boolean; } export const defaultReaderSettings: ReaderSettings = { fontSize: 18, fontFamily: "serif", lineHeight: 1.8, maxWidth: 700, theme: "dark", autoTheme: false, dayTheme: "light", nightTheme: "dark", }; export const defaultTTSSettings: TTSSettings = { engine: "browser", speed: 1.0, voice: "", kokoroUrl: "http://localhost:8880", };