RepoPilotOpen in app →

JerryZLiu/Dayflow

The automatic work journal. Privately turns your screen into a timeline of what you actually accomplished. Open-source and local-first.

Mixed

Solo project — review before adopting

worst of 4 axes
Use as dependencyMixed

single-maintainer (no co-maintainers visible); no CI workflows detected

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit 6d ago
  • MIT licensed
  • Tests present
Show 2 more →
  • Solo or near-solo (1 contributor active in recent commits)
  • No CI workflows detected
What would change the summary?
  • Use as dependency MixedHealthy if: onboard a second core maintainer

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Forkable" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/jerryzliu/dayflow?axis=fork)](https://repopilot.app/r/jerryzliu/dayflow)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/jerryzliu/dayflow on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: JerryZLiu/Dayflow

Generated by RepoPilot · 2026-05-10 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/JerryZLiu/Dayflow shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

WAIT — Solo project — review before adopting

  • Last commit 6d ago
  • MIT licensed
  • Tests present
  • ⚠ Solo or near-solo (1 contributor active in recent commits)
  • ⚠ No CI workflows detected

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live JerryZLiu/Dayflow repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/JerryZLiu/Dayflow.

What it runs against: a local clone of JerryZLiu/Dayflow — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in JerryZLiu/Dayflow | Confirms the artifact applies here, not a fork | | 2 | License is still MIT | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | Last commit ≤ 36 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>JerryZLiu/Dayflow</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of JerryZLiu/Dayflow. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/JerryZLiu/Dayflow.git
#   cd Dayflow
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of JerryZLiu/Dayflow and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "JerryZLiu/Dayflow(\\.git)?\\b" \\
  && ok "origin remote is JerryZLiu/Dayflow" \\
  || miss "origin remote is not JerryZLiu/Dayflow (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
  && ok "license is MIT" \\
  || miss "license drift — was MIT at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 36 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~6d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/JerryZLiu/Dayflow"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

Dayflow is a macOS app (written in Swift) that automatically captures and analyzes your screen activity to build a chronological timeline of your work, without manual timers or notes. It uses AI (local or cloud-based) to understand context from screenshots and turns raw activity into meaningful work journal entries, daily standups, and weekly analytics. Single-target Xcode project structure: Dayflow/Dayflow/App/ contains core app lifecycle (DayflowApp.swift, AppDelegate.swift, AppState.swift), Dayflow/Dayflow/App/ has managers for inactivity detection (InactivityMonitor.swift), recording control (RecordingControl.swift), pause management (PauseManager.swift), and deep-link routing (AppDeepLinkRouter.swift). Assets live in Assets.xcassets/. AnalyticsEventDictionary.md documents event tracking.

👥Who it's for

Knowledge workers on macOS who want an objective record of their daily accomplishments for standups, retrospectives, and time tracking—without the friction of manual logging. Developers, designers, and managers who need to reconstruct what they actually did (not just which apps were open) and communicate progress credibly.

🌱Maturity & risk

Actively developed single-maintainer project (JerryZLiu) with a polished UI (evident from hero animations and multiple view layouts) and production-ready features (daily standup, weekly review, chat). No visible test suite in the file list and no CI pipeline data provided, suggesting pre-1.0 maturity; however, the feature completeness and public downloads indicate beta-to-RC status rather than experimental.

Single maintainer (JerryZLiu) with no visible test coverage or CI setup increases fragility risk. Dependencies on AI provider APIs (both local and cloud) create external service coupling; local-first design mitigates cloud-only risk. No open issues, PRs, or recent commit dates visible in provided data, so assess currency before use. Swift/macOS-only limits contributor pool.

Active areas of work

No recent commit data, open PRs, or issue backlog visible in the provided file list. The presence of AnalyticsEventDictionary.md and ScreenshotShortcutTracker.swift suggests ongoing work on analytics instrumentation and keyboard shortcut integration. Feature set (timeline, standup, weekly, chat) appears feature-complete at current snapshot.

🚀Get running

Clone the repo: git clone https://github.com/JerryZLiu/Dayflow.git. Open the project: cd Dayflow && open Dayflow/Dayflow.xcodeproj. Build and run in Xcode (⌘R). No explicit npm/pip install needed—Swift Package Manager dependencies are in Dayflow/Dayflow.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved.

Daily commands: Open Dayflow/Dayflow.xcodeproj in Xcode 15+. Select the 'Dayflow' scheme (top-left scheme selector). Press ⌘R to build and run on the active Mac. App launches with menu bar presence (standard macOS background app pattern). No development server, no configuration files required for basic run.

🗺️Map of the codebase

🛠️How to make changes

Timeline/Activity UI: edit files in Dayflow/App/ or unknown subdirectories (Views/, Models/ not visible in file list—likely under Dayflow/Dayflow/). Recording behavior: modify RecordingControl.swift, InactivityMonitor.swift, PauseManager.swift in App/. AI analysis: likely in an unknown Services/ or AI/ folder (not listed). Events/Analytics: update AnalyticsEventDictionary.md and add tracking calls. Deep linking: modify AppDeepLinkRouter.swift. Start by exploring the unlisted subdirectories under Dayflow/Dayflow/ (Views, ViewModels, Models, Services).

🪤Traps & gotchas

macOS permissions: app requires Screen Recording (Privacy > Screen Recording) and Accessibility (Privacy > Accessibility) permissions; first-run will prompt but may require manual enable. No visible env vars or secrets management—AI provider setup (OpenAI key, Ollama URL) likely in Settings/Preferences (unknown file location). Xcode build may fail if running on non-M1/Intel Mac without simulator target—check scheme settings. Swift 5.9+ required (inferred from SwiftUI-only structure); Xcode 14.3+ needed. No Docker or test harness visible—manual testing only.

💡Concepts to learn

  • Screen activity capture & OCR-free screenshot analysis — Dayflow's core strength is understanding work context from raw pixel data without OCR (no text extraction), which respects privacy; contributors need to understand this tradeoff between accuracy and sensitivity.
  • Idle/inactivity detection (using macOS accessibility APIs) — InactivityMonitor.swift implements heuristics to pause logging when the user steps away; critical for accurate billing and honest time tracking. Understanding idleTime, mouse movement, and window focus is key to timeline accuracy.
  • Local-first architecture with optional cloud sync — Dayflow stores all data locally by default (macOS file system or Core Data), with optional AI cloud integration; this hybrid design trades convenience for privacy and requires understanding conflict resolution and edge-case sync.
  • macOS menu bar applications (LSUIElement pattern) — Dayflow runs as a background app with a menu bar icon (no Dock presence by default); contributors need to understand menu bar lifecycle, persistent windows, and hot-reload state.
  • Prompt engineering for AI timeline summarization — The chat feature and daily standup rely on crafting LLM prompts that turn noisy activity logs into coherent narratives; Dayflow's prompt templates likely live in hidden files and are non-obvious to modify correctly.
  • Activity event batching & stream processing — Raw screenshots come in at high frequency; Dayflow must batch, deduplicate, and segment them into meaningful 'activity chunks' before AI analysis. This is a hidden complexity that affects memory usage and response time.
  • Keyboard shortcut interception in macOS (Global Hot Keys) — ScreenshotShortcutTracker.swift hooks into macOS global event stream to capture user shortcuts; requires understanding of CGEventTap and may conflict with system or other apps' shortcuts.
  • microsoft/PowerToys — Windows equivalent with activity tracking and timeline reconstruction; study its ActivityMonitor and ShortcutGuide modules for cross-platform UX patterns.
  • RescueTime/RescueTimeAPI — Cloud-based time-tracking competitor with public API; shows alternative architecture for persistent storage and analytics that Dayflow could integrate with.
  • ollama/ollama — Local LLM runtime that Dayflow likely uses for on-device AI analysis; essential dependency for private timeline understanding.
  • openai/gpt-3.5-turbo — Cloud AI endpoint that Dayflow likely supports as fallback AI provider for users without local GPU; API integration reference.
  • ankane/pghero — Not directly related, but shows patterns for data analytics dashboards (weekly/daily views) that Dayflow's UI mirrors; useful for learning dashboard design.

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add unit tests for InactivityMonitor.swift and ScreenshotShortcutTracker.swift

These core app components in Dayflow/Dayflow/App/ handle critical functionality (inactivity detection and screenshot tracking) but have no visible test coverage. Adding unit tests would ensure reliability of the activity monitoring pipeline, which is central to the app's value proposition of automatic timeline generation.

  • [ ] Create Tests/AppTests/ directory structure
  • [ ] Add InactivityMonitorTests.swift with tests for timeout detection, pause/resume state transitions, and edge cases like app backgrounding
  • [ ] Add ScreenshotShortcutTrackerTests.swift with tests for screenshot event logging and deduplication
  • [ ] Configure test targets in Dayflow.xcodeproj/project.pbxproj
  • [ ] Run tests via xcodebuild test and verify coverage

Document analytics events by creating AnalyticsEventDictionary companion guide

Dayflow/Dayflow/AnalyticsEventDictionary.md exists but is referenced with no visible schema documentation. New contributors need clear guidance on what analytics events are tracked, their purposes (privacy implications?), and how to add new ones. This is critical for a privacy-first app where users need transparency.

  • [ ] Review AnalyticsEventDictionary.md and any analytics code in AppState.swift or AppDelegate.swift
  • [ ] Create docs/ANALYTICS.md documenting: (1) all current events with descriptions, (2) privacy guarantees, (3) how local-first design impacts analytics
  • [ ] Add subsection 'Contributing New Events' with code examples showing where/how to log new events
  • [ ] Link to this guide from main README.md in the privacy/transparency section
  • [ ] Update CONTRIBUTING.md (if exists) to reference analytics guidelines

Extract AppState.swift into modular domain files (ActivityState, RecordingState, PauseState)

AppState.swift is likely a large god object managing multiple concerns: activity tracking, recording control, pause state, and deep link routing (given AppDeepLinkRouter.swift exists separately). Splitting this into focused domain modules would improve testability and maintainability for contributors working on specific features.

  • [ ] Analyze AppState.swift to identify state domains (activity/recording/pause management)
  • [ ] Create Dayflow/Dayflow/App/State/ directory with ActivityState.swift, RecordingState.swift, PauseState.swift
  • [ ] Refactor AppState to compose these modules using property delegation or struct composition
  • [ ] Update AppDelegate.swift and DayflowApp.swift to use new modular state structure
  • [ ] Add unit tests for each new state module using tests created in PR #1
  • [ ] Verify no breaking changes in UI by running app and checking all features work

🌿Good first issues

  • Add unit tests for InactivityMonitor.swift: currently no test files visible in the list; contributors could write tests for idle detection edge cases (sudden window focus changes, sleep/wake transitions). This would improve reliability and serve as documentation of expected behavior.
  • Implement missing Views/Models documentation: the codebase has no visible Views/, Models/, or Services/ folders in the file list, but the feature set (daily standup, weekly review, chat) implies these exist. New contributors could document the view hierarchy and data flow (e.g., 'TimelineCardView→TimelineEntry→AIAnalysis' etc.) in ARCHITECTURE.md.
  • Add keyboard shortcut customization UI: ScreenshotShortcutTracker.swift exists but no visible preferences/settings view for users to rebind shortcuts. Contributors could build a Preferences window in SwiftUI to let users map custom key combos to capture/pause/review actions.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 6211adf — release: update appcast for v1.11.0 (JerryZLiu)
  • b69cdcc — release: bump to v1.11.0 (108) (JerryZLiu)
  • 4853204 — docs(readme): update download links (JerryZLiu)
  • 23c311d — ui(whatsnew): ask about Pro pricing (JerryZLiu)
  • 82af61a — ui(sidebar): hide weekly from sidebar (JerryZLiu)
  • 68e4def — ui(summary): remove day summary early access gate (JerryZLiu)
  • 9cc68df — settings: open account tab by default (JerryZLiu)
  • 20fa143 — settings(account): refresh Pro account management (JerryZLiu)
  • 8d189bb — settings(providers): show Dayflow Pro actions (JerryZLiu)
  • 57ab330 — settings(providers): gate Dayflow provider behind Pro (JerryZLiu)

🔒Security observations

The Dayflow codebase shows a reasonable security posture for an open-source macOS application, particularly given its privacy-first positioning. Primary concerns are around development environment configuration (user-specific files in version control) and the need for dependency auditing. No obvious critical vulnerabilities such as hardcoded credentials, SQL injection, or XSS risks are visible in the file structure. The application's focus on local-first processing and privacy is commendable. Key recommendations: (1) improve .gitignore configuration, (2) implement regular dependency auditing, (3) review analytics implementation for PII exposure, and (4) clean up project structure. Overall suitable for a privacy-focused local application with standard development hygiene improvements needed.

  • Medium · User-specific Xcode data in version control — Dayflow/Dayflow.xcodeproj/xcuserdata/jerry.xcuserdatad/. The repository contains xcuserdata directories with user-specific Xcode configuration files (Breakpoints_v2.xcbkptlist, xcschememanagement.plist). These should not be committed to version control as they contain local development environment details. Fix: Add xcuserdata/ to .gitignore to prevent user-specific Xcode files from being tracked.
  • Medium · Hardcoded developer username in project structure — Dayflow/Dayflow.xcodeproj/xcuserdata/jerry.xcuserdatad/. The Xcode project contains hardcoded developer username 'jerry' in the directory path (jerry.xcuserdatad), which could leak information about the development team. Fix: Use Xcode shared schemes or ensure user-specific files are excluded from version control.
  • Low · Missing or unclear package dependency management — Dayflow/Dayflow.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved. The Package.resolved file is included in version control within the Xcode workspace. While this ensures reproducible builds, without visibility into the actual dependency versions and sources, potential vulnerabilities in dependencies cannot be assessed. Fix: Regularly audit Swift Package Manager dependencies using tools like 'swift package update --dry-run' and review for known vulnerabilities. Document all dependencies.
  • Low · AnalyticsEventDictionary.md may expose sensitive event tracking data — Dayflow/Dayflow/AnalyticsEventDictionary.md. The presence of 'AnalyticsEventDictionary.md' suggests analytics event tracking is implemented. Without reviewing the file contents, there's a risk of sensitive user activity data being tracked or exposed. Fix: Review the analytics implementation to ensure no PII or sensitive user data is being collected or transmitted. Ensure analytics comply with privacy regulations (GDPR, CCPA).
  • Low · Nested Xcode projects without clear purpose — Dayflow/Dayflow.xcodeproj/AmiTime.xcodeproj/. The repository contains nested Xcode projects (AmiTime.xcodeproj inside Dayflow.xcodeproj), which may indicate code organization issues or outdated project references. Fix: Clarify the purpose of the nested AmiTime project. Remove if obsolete or properly document its integration.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · JerryZLiu/Dayflow — RepoPilot