{"id":50530119,"url":"https://github.com/zaaack/daily-habit","last_synced_at":"2026-06-03T13:00:32.052Z","repository":{"id":361991899,"uuid":"1256775608","full_name":"zaaack/daily-habit","owner":"zaaack","description":"A daily habit app via  capacitor \u0026 pure web, webdav-syncs ","archived":false,"fork":false,"pushed_at":"2026-06-02T05:57:36.000Z","size":1244,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T06:26:03.489Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://daily-habit.zaaack.workers.dev/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zaaack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-02T04:43:12.000Z","updated_at":"2026-06-02T05:54:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zaaack/daily-habit","commit_stats":null,"previous_names":["zaaack/daily-habit"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/zaaack/daily-habit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fdaily-habit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fdaily-habit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fdaily-habit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fdaily-habit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zaaack","download_url":"https://codeload.github.com/zaaack/daily-habit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fdaily-habit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33865655,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"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":[],"created_at":"2026-06-03T13:00:18.690Z","updated_at":"2026-06-03T13:00:32.044Z","avatar_url":"https://github.com/zaaack.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Daily Habit\n\n[English](#english) · [中文](#中文)\n\n每日打卡 App · Capacitor + React + TypeScript + Vite + Zustand + Dexie/SQLite + WebDAV Sync\n\n## 中文\n\n### 功能\n\n- ✅ / ❌ / 留空 三种打卡状态（留空不入库）\n- 数字单位、备注\n- 首页：项目列表 + 最近 N 天打卡状态（3-7 滑块自由选），单元格点击循环、双击/长按弹窗编辑\n- 详情页：月度热力图 + uPlot 折线 + 历史查询\n- WebDAV 同步（启动 + 打卡后触发），每项目一个 JSON，ETag 乐观锁，冲突弹窗\n- 跨平台：Android（Capacitor 6 + Capacitor SQLite）/ Web（PWA，Dexie/IndexedDB）\n\n### 开发\n\n```bash\npnpm install\npnpm dev              # 浏览器预览\npnpm build            # 打包到 docs/（GitHub Pages）\npnpm build:cf         # 打包到 docs/（Cloudflare Pages，根路径）\npnpm preview          # 预览构建\npnpm android:build    # 打包 APK\n```\n\n### 部署\n\n| 平台 | 方式 | 说明 |\n|------|------|------|\n| GitHub Pages | 推送 `main` → CI 自动部署 | 路径 `/daily-habit/` |\n| Cloudflare Pages | 连接仓库，build 命令 `pnpm build:cf`，输出目录 `docs` | 支持自定义域，免费计划无限流量 |\n| Android | 本地 `pnpm android:build` | APK 输出 `android/app/build/outputs/apk/debug/app-debug.apk` |\n\n### 目录约定\n\n- `src/db/` 数据层（Repo 接口 + Dexie/SQLite 双实现）\n- `src/sync/` WebDAV 同步引擎\n- `src/state/` zustand store\n- `src/components/` 通用组件\n- `src/routes/` 路由页面\n\n---\n\n## English\n\n### Features\n\n- ✅ / ❌ / skip three check-in states (skip = no record)\n- Numeric values, notes\n- Home: project list + last N day heatmap (3-7 slider), single-click cycle, double-click/long-press edit\n- Detail: monthly heatmap + uPlot line chart + history\n- WebDAV sync (on startup \u0026 after check-in), one JSON per project, ETag optimistic locking, conflict dialog\n- Cross-platform: Android (Capacitor 6 + Capacitor SQLite) / Web (PWA, Dexie/IndexedDB)\n\n### Development\n\n```bash\npnpm install\npnpm dev              # Browser preview\npnpm build            # Build to docs/ (GitHub Pages)\npnpm build:cf         # Build to docs/ (Cloudflare Pages, root path)\npnpm preview          # Preview production build\npnpm android:build    # Build APK\n```\n\n### Deployment\n\n| Platform | Method | Notes |\n|----------|--------|-------|\n| GitHub Pages | Push `main` → CI auto-deploys | Base path `/daily-habit/` |\n| Cloudflare Pages | Connect repo, build command `pnpm build:cf`, output dir `docs` | Custom domain supported, free plan unlimited bandwidth |\n| Android | `pnpm android:build` locally | APK at `android/app/build/outputs/apk/debug/app-debug.apk` |\n\n### Directory Structure\n\n- `src/db/` Data layer (Repo interface + Dexie/SQLite dual impl)\n- `src/sync/` WebDAV sync engine\n- `src/state/` Zustand store\n- `src/components/` Shared components\n- `src/routes/` Route pages\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaaack%2Fdaily-habit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzaaack%2Fdaily-habit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaaack%2Fdaily-habit/lists"}