DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A calm, ADHD-friendly daily to-do app. Brain-dump, AI breaks down the dreaded task, work a doable Today, then a Lookback that proves you did it. React Native + Expo, Cloudflare Workers + Claude, Supabase. Local-first, never-shame.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗DoubleDone is a calm daily to-do app for people who find ordinary to-do apps overwhelming: people with ADHD, autism or both, people with OCD, and anyone living with chronic overwhelm. The home screen is Today, and Today is sized to be finishable. You empty your head into one box, the app helps you choose what belongs to today and start the thing you have been avoiding, and at the end it shows you everything you actually finished. One rule sits under every screen: never shame the backlog. Nothing turns red, nothing is "overdue", and an old task is celebrated when it closes, never punished for existing.
DoubleDone is live and has paying subscribers.
| Where | State (5 October 2026) |
|---|---|
| Web | doubledone.app, deployed from main on every push. It already runs 1.8.0. |
| App Store | 1.7.0 is live. 1.8.0 (build 41) is with App Review. |
| Google Play | 1.7.0 is live. 1.8.0 (versionCode 35) goes through closed testing, then Production. |
The daily loop is free. Premium is sold through each platform's own checkout: Stripe on the web, Apple in-app purchase on iOS and Google Play Billing on Android, with RevenueCat carrying the two store purchases to the server. 1.8.0 adds "Where you left off" and a round of finishing fixes (release notes).
The core loop
Around it
Premium adds Scan, Pin, the colour themes, Chart a course (a goal turned into ordered steps), Plan my day, Your patterns, unlimited energy matching and weekly scrapbooks. A signed-in account can take one card-free month to try it. On the web Premium is A$5 a month or A$50 a year. The App Store and Google Play show their own local price. Break it down, Make it tiny, Lighten today, Sort for me, the Calendar, Routines, Rhythms, Ours, Settle and Quiet stay free.
One Expo codebase builds the iOS app, the Android app and the web app. The list is kept on the device first, so the whole app works with no account. Supabase handles optional sign-in and sync, with row-level security on every table. A single Cloudflare Worker at api.doubledone.app is the only component that holds the Anthropic key. It serves the AI routes, billing and entitlements, web push, the MCP server and the REST API, and runs an hourly health check.
flowchart LR
App["Expo app: iOS, Android, web"]
Local[("On-device store, local-first")]
SB["Supabase: email-code sign-in, Postgres with RLS"]
W["Cloudflare Worker: api.doubledone.app"]
AI["Anthropic Claude: Haiku 4.5, Sonnet 4.6"]
CF["D1, R2, KV and Workers AI"]
Pay["Stripe and RevenueCat (App Store, Google Play)"]
Agents["AI agents and scripts"]
App --> Local
App -->|"optional sync"| SB
App -->|"AI, billing, push"| W
W --> AI
W --> CF
W -->|"the user's own token, under RLS"| SB
Pay -->|"verified webhooks"| W
Agents -->|"MCP · REST API"| W
The web build is served by Cloudflare Pages, and the store builds come from EAS. The full picture, with every route, table and data flow, is in docs/architecture.md.
| Layer | Choice |
|---|---|
| App | Expo SDK 56, React Native 0.85, React 19, expo-router, TypeScript |
| Local store | AsyncStorage (localStorage on the web) |
| Accounts and sync | Supabase Auth with a six-digit email code, Postgres with row-level security |
| Server | One Cloudflare Worker, with jose for token verification and @cloudflare/workers-oauth-provider for MCP sign-in |
| Server data | Cloudflare D1 (telemetry, outcomes, entitlements, push), R2 (keepsake images), KV (OAuth) |
| AI | Anthropic Claude Haiku 4.5 and Sonnet 4.6, with forced tool use on every route that returns structured data. Workers AI draws the keepsake image (FLUX.1 schnell), with Llama 3.2 3B as a fallback scene writer. |
| Payments | Stripe on the web. RevenueCat for Apple in-app purchase and Google Play Billing. |
| Notifications | expo-notifications on phones, Web Push (VAPID) on the web |
| Hosting and builds | Cloudflare Pages for the web. EAS Build for iOS and Android, EAS Submit for iOS. |
| Quality | Vitest, ESLint, tsc, gitleaks, GitHub Actions |
client/ Expo app: iOS, Android and web from one codebase
src/app/ expo-router screens (index is the web landing page, today is the home screen)
src/components/ UI pieces such as CaptureSheet, TaskRow, BreakdownReview and Bloom
src/lib/ pure logic with co-located tests, plus the platform-split files
src/lib/catalogs/ the five language catalogues
src/widget/ the Android home-screen widget
public/ static web files: privacy, terms, manifest, service worker, version.json
server/ the Cloudflare Worker, doubledone-ai
src/ routes, AI prompts, billing, MCP, REST API and the monitor, tests beside each file
d1/ the D1 schema and its one-off migration
wrangler.jsonc bindings, rate limits and the hourly cron
supabase/ Postgres schema and RLS, the shared-list SQL, auth setup notes
scripts/ screenshots, store assets, web meta, version stamp, migration check, test-suite generator
docs/ product, architecture, API, MCP, operations, QA and store material
patches/ a patch-package fix for expo-notifications
.githooks/ the pre-commit Inspector and a commit-msg reminder
.github/workflows/ CI and the web deploy
You need Node 22, the version CI uses (the repo itself pins none), and npm. gitleaks is optional but recommended, because the pre-commit Inspector runs it when it is installed. Python 3 is needed only for the scripts in scripts/ that end in .py.
From the repo root (an npm workspaces monorepo, so one install covers client/ and server/):
npm install # installs both workspaces and applies the patches
npm run setup # turns on the git hooks in .githooks/
npm run dev # the web app, at http://localhost:8081
npm run android # Expo on an Android emulator or device
For iOS, run npm --workspace client run ios on a Mac.
The same gates the Inspector and CI run, from the root:
npm test # client, then server
npm run typecheck # client, then server
npm run lint # client
npm run test:coverage
Client config. Copy .env.example to client/.env. With nothing set, the app runs fully local with no account, and the AI features call the live Worker. The keys the code reads:
EXPO_PUBLIC_SUPABASE_URL and EXPO_PUBLIC_SUPABASE_ANON_KEY turn on sign-in and sync.EXPO_PUBLIC_AI_URL points at a different Worker (it defaults to https://api.doubledone.app).EXPO_PUBLIC_VAPID_KEY overrides the web push public key.EXPO_PUBLIC_RC_IOS_KEY and EXPO_PUBLIC_RC_ANDROID_KEY are the RevenueCat public SDK keys for the store builds.EXPO_PUBLIC_PREMIUM_DEV=true shows the Settings Premium override in a preview build. Development builds always show it, and production never sets it.Every EXPO_PUBLIC_ value is bundled into the app, so none of them is a secret. EXPO_PUBLIC_APP_NAME, EXPO_PUBLIC_STRIPE_PUBLISHABLE_KEY and LOG_LEVEL are in the example file but not read by the code today.
The Worker. npm run dev -w server runs it with wrangler dev. Local secrets go in server/.dev.vars, which is gitignored, and Workers AI only runs with --remote. The core secrets are ANTHROPIC_API_KEY, SUPABASE_URL and SUPABASE_ANON_KEY. Billing uses STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, RC_WEBHOOK_AUTH, RC_WEBHOOK_HMAC and RC_SECRET_KEY. MCP sign-in uses MCP_GRANT_KEY, web push uses VAPID_PRIVATE_KEY and VAPID_SUBJECT, and operations use FEEDBACK_TO, HEARTBEAT_URL and ANALYTICS_TOKEN. COMP_EMAILS and SANDBOX_GRANT_UIDS are optional allowlists (complimentary Premium, and test purchases that may grant it). Bindings, vars and rate limits live in server/wrangler.jsonc. To point the app at a local Worker, set EXPO_PUBLIC_AI_URL to the address wrangler dev prints. The Worker accepts browser calls from http://localhost:8081.
Databases. The D1 schema is server/d1/schema.sql, applied with npm exec -w server -- wrangler d1 execute doubledone-telemetry --remote --file d1/schema.sql. The Supabase files in supabase/ are applied by hand in the SQL editor, and python scripts/check-migrations.py reports which of them are live without writing anything.
client/src/lib, and 70% lines and statements, 85% functions and 73% branches on the server (client config, server config).platform-split.contract.ts fails it when an iOS or Android file drifts from its base, and schema-drift.test.ts keeps the SQL that lives in two files in step..githooks/pre-commit) runs lint, typecheck, the tests and a secret scan, plus gitleaks when it is installed. The house rule is never to skip it with --no-verify.ci.yml) runs on every push and pull request to main: lint, typecheck, tests with coverage, a full-history gitleaks scan, and a web export that checks the injected page meta and the stamped version.docs/qa/, generated from scripts/gen-test-suite.py. The house rule is that every user-facing feature adds its cases there in the same commit.What is tested and why is in docs/testing.md. The build discipline behind all this is in PLAYBOOK.md.
main runs deploy-web.yml: an Expo web export, the page meta injected by scripts/inject-web-meta.mjs, the version stamped by scripts/stamp-version.mjs, then a Cloudflare Pages deploy. The deploy does not wait for CI, so the local Inspector is the gate before a push.client/ with the production profile in client/eas.json. EAS holds the build numbers and increments them. iOS goes through EAS Submit to TestFlight and App Review. The Android bundle is uploaded to a Play testing track first, then promoted to Production. Store notes for recent releases live in docs/release-notes/.client/public/version.json. The web value is stamped at deploy, so the committed one is a placeholder. The ios and android values are raised by hand once a release is live in that store.npx wrangler deploy from server/, before any client that calls a new route.DoubleDone is local-first and anonymous by default: with no account, your list lives on your device. Signing in (an email and a six-digit code, no password) turns on sync, and row-level security scopes every personal row to its owner and every shared list to its two members. AI features run only when you tap them, send only the text you chose, and can be switched off entirely. The Anthropic key never leaves the Worker. The Worker keeps a pseudonymous log of AI calls (the input text, with no user id or IP address), counts feature use as daily totals, and verifies each bearer token's signature before it acts on an account. The plain-English privacy policy sets out what leaves the device and when, SECURITY.md explains how to report a vulnerability, and docs/architecture.md has the detail.
| Document | What it covers |
|---|---|
| docs/README.md | The index of everything in docs/ |
| docs/architecture.md | The solution architecture: components, routes, data stores and flows |
| docs/api.md | The public REST API, /api/v1, with OpenAPI 3.1 and Swagger UI |
| docs/mcp.md | The MCP server: both sign-in paths, the ten tools, connecting an agent |
| docs/testing.md | The testing strategy, the gates and the manual suite |
| docs/operations.md | Running the live service: the monitor, billing runbooks, releases |
| docs/product-spec.md | What DoubleDone is, who it is for, and why it is shaped this way |
| decision-log.md | The why-trail, including what was decided against |
| CHANGELOG.md | Notable changes by release |
| SECURITY.md | Reporting a vulnerability, and how data is protected |
| docs/qa/ |
MIT. See LICENSE. Copyright (c) 2026 Melroy D'Souza.
DoubleDone is built and run by Melroy D'Souza in Melbourne. He does not have ADHD himself. He built it out of care for people he works with, has managed and is friends with who have ADHD and OCD, and that closeness shapes every calm, shame-free decision in it.
| The manual end-to-end suite |