diff --git a/src-tauri/src/vault.rs b/src-tauri/src/vault.rs index ee37b3f8..7a6dfa06 100644 --- a/src-tauri/src/vault.rs +++ b/src-tauri/src/vault.rs @@ -24,6 +24,7 @@ pub struct VaultEntry { pub status: Option, pub owner: Option, pub cadence: Option, + pub archived: bool, #[serde(rename = "modifiedAt")] pub modified_at: Option, #[serde(rename = "createdAt")] @@ -53,6 +54,8 @@ struct Frontmatter { owner: Option, #[serde(rename = "Cadence")] cadence: Option, + #[serde(rename = "Archived")] + archived: Option, #[serde(rename = "Created at")] created_at: Option, #[serde(rename = "Created time")] @@ -202,7 +205,7 @@ fn parse_frontmatter(data: &HashMap) -> Frontmatter { /// Known non-relationship frontmatter keys to skip (case-insensitive comparison). /// Only skip keys that can never contain wikilinks. const SKIP_KEYS: &[&str] = &[ - "is a", "aliases", "status", "cadence", "created at", "created time", + "is a", "aliases", "status", "cadence", "archived", "created at", "created time", ]; /// Check if a string contains a wikilink pattern `[[...]]`. @@ -351,6 +354,7 @@ pub fn parse_md_file(path: &Path) -> Result { status: frontmatter.status, owner: frontmatter.owner, cadence: frontmatter.cadence, + archived: frontmatter.archived.unwrap_or(false), modified_at, created_at, file_size, }) } diff --git a/src/mock-tauri.ts b/src/mock-tauri.ts index 8df180ad..4470bc76 100644 --- a/src/mock-tauri.ts +++ b/src/mock-tauri.ts @@ -575,6 +575,47 @@ A **book** you're reading or have read. Track reading progress, notes, and key t - **Author**: The book's author - **Status**: Reading, Finished, Abandoned - **Rating**: 1-5 stars +`, + // --- Archived entries --- + '/Users/luca/Laputa/project/25q3-website-redesign.md': `--- +title: Website Redesign +is_a: Project +status: Done +archived: true +owner: Luca Rossi +belongs_to: + - "[[quarter/q3-2025]]" +--- + +# Website Redesign + +Completed redesign of the company website. Migrated from WordPress to Next.js with improved performance and SEO. + +## Results +- Page load time: 4.2s → 1.1s +- Organic traffic: +35% in 3 months +- Bounce rate: 58% → 42% +`, + '/Users/luca/Laputa/experiment/twitter-thread-experiment.md': `--- +title: Twitter Thread Growth Experiment +is_a: Experiment +status: Done +archived: true +owner: Luca Rossi +related_to: + - "[[responsibility/grow-newsletter]]" +--- + +# Twitter Thread Growth Experiment + +## Hypothesis +Publishing 3 Twitter threads per week (instead of 1) will increase newsletter signups by 50%. + +## Result +After 6 weeks, signups increased by only 12%. The additional threads had diminishing returns — quality matters more than quantity. + +## Decision +Reverted to 1 high-quality thread per week. Archived this experiment. `, // --- Instances of custom types --- '/Users/luca/Laputa/recipe/pasta-carbonara.md': `--- @@ -622,6 +663,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: 'Active', owner: 'Luca Rossi', cadence: null, + archived: false, modifiedAt: Date.now() / 1000, createdAt: null, fileSize: 2048, @@ -643,6 +685,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: 'Active', owner: 'Luca Rossi', cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 3600, createdAt: null, fileSize: 1024, @@ -669,6 +712,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: 'Active', owner: 'Matteo Cellini', cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 7200, createdAt: null, fileSize: 890, @@ -689,6 +733,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: 'Active', owner: 'Luca Rossi', cadence: 'Weekly', + archived: false, modifiedAt: Date.now() / 1000 - 86400, createdAt: null, fileSize: 512, @@ -709,6 +754,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: 'Active', owner: 'Matteo Cellini', cadence: 'Weekly', + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 2, createdAt: null, fileSize: 640, @@ -729,6 +775,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: 'Active', owner: 'Luca Rossi', cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400, createdAt: null, fileSize: 3200, @@ -750,6 +797,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 3600 * 5, createdAt: null, fileSize: 847, @@ -771,6 +819,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400, createdAt: null, fileSize: 560, @@ -791,6 +840,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 7, createdAt: null, fileSize: 320, @@ -810,6 +860,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 3600 * 2, createdAt: null, fileSize: 1200, @@ -830,6 +881,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 30, createdAt: null, fileSize: 256, @@ -850,6 +902,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 14, createdAt: null, fileSize: 180, @@ -870,6 +923,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 3, createdAt: null, fileSize: 4200, @@ -890,6 +944,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 7, createdAt: null, fileSize: 3800, @@ -911,6 +966,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 10, createdAt: null, fileSize: 5100, @@ -932,6 +988,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 320, @@ -949,6 +1006,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 280, @@ -966,6 +1024,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 310, @@ -983,6 +1042,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 290, @@ -1000,6 +1060,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 200, @@ -1017,6 +1078,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 180, @@ -1034,6 +1096,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 170, @@ -1051,6 +1114,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 200, @@ -1068,6 +1132,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 90, createdAt: null, fileSize: 190, @@ -1086,6 +1151,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 30, createdAt: null, fileSize: 250, @@ -1103,6 +1169,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 30, createdAt: null, fileSize: 220, @@ -1121,6 +1188,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 5, createdAt: null, fileSize: 420, @@ -1140,6 +1208,7 @@ const MOCK_ENTRIES: VaultEntry[] = [ status: null, owner: null, cadence: null, + archived: false, modifiedAt: Date.now() / 1000 - 86400 * 14, createdAt: null, fileSize: 380, @@ -1148,6 +1217,49 @@ const MOCK_ENTRIES: VaultEntry[] = [ 'Type': ['[[type/book]]'], }, }, + // --- Archived entries --- + { + path: '/Users/luca/Laputa/project/25q3-website-redesign.md', + filename: '25q3-website-redesign.md', + title: 'Website Redesign', + isA: 'Project', + aliases: [], + belongsTo: ['[[quarter/q3-2025]]'], + relatedTo: [], + status: 'Done', + owner: 'Luca Rossi', + cadence: null, + archived: true, + modifiedAt: Date.now() / 1000 - 86400 * 120, + createdAt: null, + fileSize: 680, + snippet: 'Completed redesign of the company website. Migrated from WordPress to Next.js with improved performance and SEO.', + relationships: { + 'Belongs to': ['[[quarter/q3-2025]]'], + 'Type': ['[[type/project]]'], + }, + }, + { + path: '/Users/luca/Laputa/experiment/twitter-thread-experiment.md', + filename: 'twitter-thread-experiment.md', + title: 'Twitter Thread Growth Experiment', + isA: 'Experiment', + aliases: [], + belongsTo: [], + relatedTo: ['[[responsibility/grow-newsletter]]'], + status: 'Done', + owner: 'Luca Rossi', + cadence: null, + archived: true, + modifiedAt: Date.now() / 1000 - 86400 * 90, + createdAt: null, + fileSize: 520, + snippet: 'Publishing 3 Twitter threads per week instead of 1 will increase newsletter signups by 50%. Result: only 12% increase.', + relationships: { + 'Related to': ['[[responsibility/grow-newsletter]]'], + 'Type': ['[[type/experiment]]'], + }, + }, ] function mockFileHistory(path: string): GitCommit[] { diff --git a/src/types.ts b/src/types.ts index 0f15d9eb..b0427e04 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,6 +9,7 @@ export interface VaultEntry { status: string | null owner: string | null cadence: string | null + archived: boolean modifiedAt: number | null createdAt: number | null fileSize: number @@ -32,7 +33,7 @@ export interface ModifiedFile { } export type SidebarSelection = - | { kind: 'filter'; filter: 'all' | 'favorites' } + | { kind: 'filter'; filter: 'all' | 'favorites' | 'archived' } | { kind: 'sectionGroup'; type: string } | { kind: 'entity'; entry: VaultEntry } | { kind: 'topic'; entry: VaultEntry }