{"id":31402075,"url":"https://github.com/JerryZLiu/Dayflow","last_synced_at":"2025-09-29T15:09:07.342Z","repository":{"id":317015064,"uuid":"1062234789","full_name":"JerryZLiu/Dayflow","owner":"JerryZLiu","description":"Generate a timeline of your day, automatically","archived":false,"fork":false,"pushed_at":"2025-09-28T08:16:28.000Z","size":41161,"stargazers_count":2244,"open_issues_count":16,"forks_count":76,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-28T09:24:28.753Z","etag":null,"topics":["gemini","lmstudio","ollama","productivity","productivity-tools","swift","time","timeline"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JerryZLiu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-23T01:58:21.000Z","updated_at":"2025-09-28T09:17:57.000Z","dependencies_parsed_at":"2025-09-28T09:34:37.609Z","dependency_job_id":null,"html_url":"https://github.com/JerryZLiu/Dayflow","commit_stats":null,"previous_names":["jerryzliu/dayflow"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/JerryZLiu/Dayflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JerryZLiu%2FDayflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JerryZLiu%2FDayflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JerryZLiu%2FDayflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JerryZLiu%2FDayflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JerryZLiu","download_url":"https://codeload.github.com/JerryZLiu/Dayflow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JerryZLiu%2FDayflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277534570,"owners_count":25834757,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-29T02:00:09.175Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gemini","lmstudio","ollama","productivity","productivity-tools","swift","time","timeline"],"created_at":"2025-09-29T15:01:56.623Z","updated_at":"2025-09-29T15:09:07.336Z","avatar_url":"https://github.com/JerryZLiu.png","language":"Swift","funding_links":[],"categories":["Swift","其它实用工具","Utilities"],"sub_categories":["系统相关工具","Text"],"readme":"\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/images/dayflow_header.png\" alt=\"Dayflow\" width=\"400\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cem\u003eA timeline of your day, automatically.\u003c/em\u003e\u003cbr\u003e\n  Turns your screen activity into a clean timeline with AI summaries and distraction highlights.\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- Badges --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/macOS-13%2B-000?logo=apple\" alt=\"Platform: macOS 13+\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/SwiftUI-✓-orange\" alt=\"SwiftUI\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Updates-Sparkle-informational\" alt=\"Updates: Sparkle\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/AI-Gemini%20or%20Local-blue\" alt=\"AI: Gemini / Local\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-green\" alt=\"License: MIT\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/images/hero_animation_1080p.gif\" alt=\"Dayflow Hero Animation\" width=\"800\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/JerryZLiu/Dayflow/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Download%20for%20Mac-⬇%20%20Dayflow.dmg-blue?style=for-the-badge\u0026logo=apple\" alt=\"Download for Mac\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quickstart\"\u003eQuickstart\u003c/a\u003e •\n  \u003ca href=\"#why-i-built-dayflow\"\u003eWhy I built Dayflow\u003c/a\u003e •\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#how-it-works\"\u003eHow it works\u003c/a\u003e •\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e •\n  \u003ca href=\"#data--privacy\"\u003eData \u0026 Privacy\u003c/a\u003e •\n  \u003ca href=\"#debug--developer-tools\"\u003eDebug \u0026 Developer Tools\u003c/a\u003e •\n  \u003ca href=\"#auto-updates-sparkle\"\u003eAuto‑updates\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What is Dayflow?\n\nDayflow is a **native macOS app** (SwiftUI) that records your screen at **1 FPS**, analyzes it **every 15 minutes** with AI, and generates a **timeline** of your activities with summaries. \nIt's lightweight (25MB app size) and uses ~100MB of RAM and \u003c1% cpu. \n\n\u003e _Privacy‑minded by design_: You choose your AI provider. Use **Gemini** (bring your own API key) or **local models** (Ollama / LM Studio). See **Data \u0026 Privacy** for details.\n\n\n## Why I built Dayflow\n\nI built Dayflow after realizing that my calendar wasn't the source of truth for how I actually spent my time. My screen was. I wanted a calm, trustworthy timeline that let me see my workday without turning into yet another dashboard I had to maintain.\n\nDayflow stands for ownership and privacy by default. You control the data, you choose the AI provider, and you can keep everything local if that's what makes you comfortable. It's MIT licensed and fully open source because anything that watches your screen all day should be completely transparent about what it does with that information. The app should feel like a quiet assistant: respectful of your attention, honest about what it captures, and easy to shut off.\n\n\n---\n\n## Features\n\n- **Automatic timeline** of your day with concise summaries.\n- **1 FPS recording** - minimal CPU/storage impact.\n- **15-minute analysis intervals** for timely updates.\n- **Watch timelapses of your day**.\n- **Auto storage cleanup** - removes old recordings after 3 days.\n- **Distraction highlights** to see what pulled you off‑task.\n- **Native UX** built with **SwiftUI**.\n- **Auto‑updates** with **Sparkle** (daily check + background download).\n\n### Coming soon\n\n- **Infinitely customizable dashboard** — ask any question about your workday, pipe the answers into tiles you arrange yourself, and track trends over time.\n\n  \u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"docs/images/DashboardPreview.png\" alt=\"Dayflow dashboard preview\" width=\"800\"\u003e\n  \u003c/div\u003e\n\n- **Daily journal** — review the highlights Dayflow captured, reflect with guided prompts, and drop screenshots or notes alongside your generated timeline.\n\n  \u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"docs/images/JournalPreview.png\" alt=\"Dayflow journal preview\" width=\"800\"\u003e\n  \u003c/div\u003e\n\n## How it works\n\n1) **Capture** — Records screen at 1 FPS in 15-second chunks.\n2) **Analyze** — Every 15 minutes, sends recent footage to AI.\n3) **Generate** — AI creates timeline cards with activity summaries.\n4) **Display** — Shows your day as a visual timeline.\n5) **Cleanup** — Auto-deletes recordings older than 3 days.\n\n### AI Processing Pipeline\n\nThe efficiency of your timeline generation depends on your chosen AI provider:\n\n```mermaid\nflowchart LR\n    subgraph Gemini[\"Gemini Flow: 2 LLM Calls\"]\n        direction LR\n        GV[Video] --\u003e GU[Upload + Transcribe\u003cbr/\u003e1 LLM call] --\u003e GC[Generate Cards\u003cbr/\u003e1 LLM call] --\u003e GD[Done]\n    end\n\n    subgraph Local[\"Local Flow: 33+ LLM Calls\"]\n        direction LR\n        LV[Video] --\u003e LE[Extract 30 frames] --\u003e LD[30 descriptions\u003cbr/\u003e30 LLM calls] --\u003e LM[Merge\u003cbr/\u003e1 call] --\u003e LT[Title\u003cbr/\u003e1 call] --\u003e LC[Merge Check\u003cbr/\u003e1 call] --\u003e LMC[Merge Cards\u003cbr/\u003e1 call] --\u003e LD2[Done]\n    end\n\n    %% Styling\n    classDef geminiFlow fill:#e8f5e8,stroke:#4caf50,stroke-width:2px\n    classDef localFlow fill:#fff8e1,stroke:#ff9800,stroke-width:2px\n    classDef geminiStep fill:#4caf50,color:#fff\n    classDef localStep fill:#ff9800,color:#fff\n    classDef processing fill:#f5f5f5,stroke:#666\n    classDef result fill:#e3f2fd,stroke:#1976d2\n\n    class Gemini geminiFlow\n    class Local localFlow\n    class GU,GC geminiStep\n    class LD,LM,LT,LC,LMC localStep\n    class GV,LV,LE processing\n    class GD,LD2 result\n```\n\n**Gemini** leverages native video understanding for direct analysis, while **Local models** reconstruct understanding from individual frame descriptions - resulting in dramatically different processing complexity.\n\n\n---\n\n## Quickstart\n\n**Download (end users)**\n1. Grab the latest `Dayflow.dmg` from **GitHub Releases**.\n2. Open the app; grant **Screen \u0026 System Audio Recording** when prompted:  \n   macOS → **System Settings** → **Privacy \u0026 Security** → **Screen \u0026 System Audio Recording** → enable **Dayflow**.\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/JerryZLiu/Dayflow/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Download%20for%20Mac-⬇%20%20Dayflow.dmg-blue?style=for-the-badge\u0026logo=apple\" alt=\"Download the latest Dayflow.dmg\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n**Build from source (developers)**\n1. Install **Xcode 15+** and open `Dayflow.xcodeproj`.\n2. Run the `Dayflow` scheme on macOS 13+.\n3. In your Run **scheme**, add your `GEMINI_API_KEY` under _Arguments \u003e Environment Variables_ (if using Gemini).\n\n---\n\n## Installation\n\n### Requirements\n- macOS **13.0+**\n- Xcode **15+**\n- A **Gemini API key** (if using Gemini): https://ai.google.dev/gemini-api/docs/api-key\n\n### From Releases\n1. Download `Dayflow.dmg` and drag **Dayflow** into **Applications**.\n2. Launch and grant the **Screen \u0026 System Audio Recording** permission.\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/JerryZLiu/Dayflow/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Download%20for%20Mac-⬇%20%20Dayflow.dmg-blue?style=for-the-badge\u0026logo=apple\" alt=\"Download the latest Dayflow.dmg\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n### From source\n```bash\ngit clone https://github.com/JerryZLiu/Dayflow.git\ncd Dayflow\nopen Dayflow.xcodeproj\n# In Xcode: select the Dayflow target, configure signing if needed, then Run.\n```\n\n---\n\n## Data \u0026 Privacy\n\nThis section explains **what Dayflow stores locally**, **what leaves your machine**, and **how provider choices affect privacy**.\n\n### Data locations (on your Mac)\n- **App support folder:** `~/Library/Application Support/Dayflow/`\n- **Recordings (video chunks):** `~/Library/Application Support/Dayflow/recordings/`\n- **Local database:** `~/Library/Application Support/Dayflow/chunks.sqlite`\n- **Recording details:** 1 FPS capture, analyzed every 15 minutes, 3-day retention\n- **Purge / reset tip:** Quit Dayflow. Then delete the entire `~/Library/Application Support/Dayflow/` folder to remove recordings and analysis artifacts. Relaunch to start fresh.\n\n\u003e These paths are created by the app at first run. If you package Dayflow differently or run in a sandbox, paths may vary slightly.\n\n### Processing modes \u0026 providers\n- **Gemini (cloud, BYO key)** — Dayflow sends batch payloads to **Google’s Gemini API** for analysis.\n- **Local models (Ollama / LM Studio)** — Processing stays **on‑device**; Dayflow talks to a **local server** you run.\n\n### TL;DR: Gemini data handling (my reading of Google’s ToS)\n- **Short answer: There is a way to prevent Google from training on your data.** If you **enable Cloud Billing** on **at least one** Gemini API project, Google treats **all of your Gemini API and Google AI Studio usage** under the **“Paid Services”** data‑use rules — **even when you’re using unpaid/free quota**. Under Paid Services, **Google does not use your prompts/responses to improve Google products/models**.  \n  - Terms: “When you activate a Cloud Billing account, all use of Gemini API and Google AI Studio is a ‘Paid Service’ with respect to how Google Uses Your Data, even when using Services that are offered free of charge.” ([Gemini API Additional Terms](https://ai.google.dev/gemini-api/terms#paid-services-how-google-uses-your-data))  \n  - Abuse monitoring: even under Paid Services, Google **logs prompts/responses for a limited period** for **policy enforcement and legal compliance**. ([Same Terms](https://ai.google.dev/gemini-api/terms#paid-services-how-google-uses-your-data))  \n  - **EEA/UK/Switzerland:** the **Paid‑style data handling applies by default** to **all Services** (including AI Studio and unpaid quota) **even without billing**. ([Same Terms](https://ai.google.dev/gemini-api/terms#unpaid-services-how-google-uses-your-data))\n\n**A couple useful nuances** (from docs + forum clarifications):\n- **AI Studio is still free** to use; enabling billing changes **data handling**, not whether Studio charges you. ([Pricing page](https://ai.google.dev/gemini-api/docs/pricing))  \n- **UI “Plan: Paid” check:** In **AI Studio → API keys**, you’ll typically see “Plan: Paid” once billing is enabled on any linked project (UI may evolve).  \n- **Free workaround:** _“Make one project paid, keep using a free key elsewhere to get the best of both worlds.”_ The **Terms** imply **account‑level** coverage once any billing account is activated, but the **Apps** nuance above may limit this in specific UI contexts. **Treat this as an interpretation, not legal advice.**\n\n### Local mode: privacy \u0026 trade‑offs\n- **Privacy:** With **Ollama/LM Studio**, prompts and model inference run on your machine. LM Studio documents full **offline** operation once models are downloaded.  \n- **Quality/latency:** Local open models are improving but **can underperform** cloud models on complex summarization.  \n- **Power/battery:** Local inference is **GPU‑heavy** on Apple Silicon and will drain battery faster; prefer **plugged‑in** sessions for long captures.  \n- **Future:** We may explore **fine‑tuning** or distilling a local model for better timeline summaries.\n\nReferences:  \n- LM Studio offline: https://lmstudio.ai/docs/app/offline  \n- Ollama GPU acceleration (Metal on Apple): https://github.com/ollama/ollama/blob/main/docs/gpu.md\n\n### Permissions (macOS)\nTo record your screen, Dayflow requires the **Screen \u0026 System Audio Recording** permission. Review or change later at:  \n**System Settings → Privacy \u0026 Security → Screen \u0026 System Audio Recording**.  \nApple’s docs: https://support.apple.com/guide/mac-help/control-access-screen-system-audio-recording-mchld6aa7d23/mac\n\n---\n\n## Configuration\n\n- **AI Provider**\n  - Choose **Gemini** (set `GEMINI_API_KEY`) or **Local** (Ollama/LM Studio endpoint).  \n  - For Gemini keys: https://ai.google.dev/gemini-api/docs/api-key\n- **Capture settings**\n  - Start/stop capture from the main UI. Use **Debug** to verify batch contents.\n- **Data locations**\n  - See **Data \u0026 Privacy** for exact paths and a purge tip.\n\n---\n\n## Debug \u0026 Developer Tools\n\nYou can click the Dayflow icon in the menu bar and view the saved recordings\n\n---\n\n## Auto‑updates (Sparkle)\n\nDayflow integrates **Sparkle** via Swift Package Manager and shows the current version + a “Check for updates” action. By default, the updater **auto‑checks daily** and **auto‑downloads** updates.\n\n\n## Project structure\n\n```\nDayflow/\n├─ Dayflow/                 # SwiftUI app sources (timeline UI, debug UI, capture \u0026 analysis pipeline)\n├─ docs/                    # Appcast and documentation assets (screenshots, videos)\n├─ scripts/                 # Release automation (DMG, notarization, appcast, Sparkle signing, one-button release)\n```\n\n---\n\n## Troubleshooting\n\n- **Screen capture is blank or fails**  \n  Check System Settings → Privacy \u0026 Security → **Screen \u0026 System Audio Recording** and ensure **Dayflow** is enabled.\n- **API errors**  \n  Go into settings and verify your `GEMINI_API_KEY` and network connectivity.\n\n---\n\n## Roadmap\n\n- [ ] V1 of the Dashboard (track answers to custom questions)\n- [ ] V1 of the daily journal\n- [ ] Fine tuning a small VLM \n\n---\n\n## Contributing\n\nPRs welcome! If you plan a larger change, please open an issue first to discuss scope and approach.  \n\n---\n\n## License\n\nLicensed under the MIT License. See LICENSE for the full text.\nSoftware is provided “AS IS”, without warranty of any kind.\n\n---\n\n## Acknowledgements\n\n- [Sparkle](https://github.com/sparkle-project/Sparkle) for battle‑tested macOS updates.\n- [Google AI Gemini API](https://ai.google.dev/gemini-api/docs) for analysis.\n- [Ollama](https://ollama.com/) and [LM Studio](https://lmstudio.ai/) for local model support.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJerryZLiu%2FDayflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJerryZLiu%2FDayflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJerryZLiu%2FDayflow/lists"}