Skip to content

Latest commit

 

History

History
131 lines (104 loc) · 5.35 KB

File metadata and controls

131 lines (104 loc) · 5.35 KB

FAQ

Stuff I or other people have actually run into. Not a marketing page.

Running it

npm run web opens on which port? 8081 by default (Expo Metro). If that's taken, the terminal will show the actual port. Just click whatever link it prints.

The dev server says "EMFILE: too many open files" on macOS. Bump the file descriptor limit:

ulimit -n 65536

Then restart npm run web.

TypeScript complains about missing types after npm install. npm run typecheck should be the only thing that knows. If it fails on a fresh install, rm -rf node_modules package-lock.json && npm install usually fixes it.

Does the dev server work offline? Yes, once the first install is done. Web Audio and other browser APIs still need the browser to be online the first time they fetch.

Building

APK is taking forever. First build downloads Gradle + Android dependencies. ~20 minutes on a good connection. Subsequent builds are ~3 minutes.

iOS build fails with "No code signing identities found". EAS handles this with its own credentials; for local builds, you need an Apple Developer account. Use EAS Build if you can.

EAS Build keeps timing out. The free tier has a 30-minute limit. If your first build includes expo prebuild, you might hit it. Run prebuild once locally to materialise the android/ directory, commit it, then eas build will just be the gradle step.

Data

Where is my data? AsyncStorage, keyed under a single root. On web that's localStorage["taskflow-storage"]. Don't clear site data unless you mean it.

I cleared my browser data and lost everything. Help. Sorry, that one is on me not shipping export-by-default yet. Open Settings → Data → Export before you do anything destructive, and import on the other end.

Can two devices sync? Yes. Mobile ⇄ desktop syncs end-to-end-encrypted over a P2P session, with an optional self-hosted relay as a NAT-traversal fallback. Pairing is a one-shot 8-digit code; after that, LAN-direct is preferred when reachable. The relay only ever sees ciphertext. Setup is in docs/desktop-user-guide.md §7, and the protocol stack is in ARCHITECTURE.md §9.

Things that look like bugs but aren't

Search history disappears when I close the app. This is a known UX gap — search history lives in component state because the store doesn't have a searchHistory slice yet. It's on the list. Workaround: don't close the app, or live with it.

TaskCard shows "今天" / "明天" on a date that's clearly in the past. The overdue logic only fires if the task has a dueTime and the current time is past it. Date-only tasks don't trigger the overdue state. I think this is the right call (a task "due today" isn't overdue at 9am) but it surprises people.

Voice input is greyed out on mobile. Voice input uses the Web Speech API, which is Web-only. Native would need @react-native-voice/voice or similar, and I don't want to balloon the APK for a feature most people use once. If you need it, PRs welcome.

Desktop

The desktop app is a separate Electron project under desktop/. The full manual is docs/desktop-user-guide.md; this section is the short version of what people actually ask.

I forgot my master password. Is there a reset? No. PBKDF2 600000 rounds derives the SQLCipher key; there's no server to send a reset link. The only path back is uninstall, delete the userData directory, reinstall, and restore from an encrypted backup (.taskflow-backup file) — if you still remember the backup password. If both are gone, the data is gone. This is the cost of local-first encryption.

Where's the data stored? A single SQLite file encrypted with SQLCipher, under the OS userData dir:

  • macOS: ~/Library/Application Support/TaskFlow/taskflow.db
  • Windows: %APPDATA%\TaskFlow\taskflow.db
  • Linux: ~/.config/TaskFlow/taskflow.db

Don't move just the .db file alone — the master password derives the key, so as long as you know the password, copying the file to a new machine and unlocking works. Without the password, the file is random bytes.

Biometric unlock stopped working. Most common cause on Linux: fprintd isn't running. Check with systemctl status fprintd. On macOS/Windows: the OS biometric enrollment changed (re-enrolled fingers, Windows Hello reconfigured). The fallback is always the master password — the lock screen keeps the password field regardless of biometric state.

Sync pairing keeps failing. Nine times out of ten it's clock skew. The relay rejects timestamps outside ±60 seconds. NTP both machines and retry. Other causes: relay URL typo (must include ws:// or http:// scheme), relay not reachable from one side (check firewalls on cross-network setups), or the 8-digit code expired (5-minute TTL — generate a new one).

Can I sync the vault to mobile? Via E2EE sync, yes — vault items go through the same encrypted channel as tasks. Via JSON export, no — JSON export is plaintext and intentionally excludes the vault, so credentials can't leak through an insecure channel. See docs/desktop-user-guide.md §5.

The desktop build is huge. Electron ships Chromium + Node, so the baseline is ~80 MB before any app code. There's no good way around that without throwing away Electron. The installer sizes are in desktop/electron-builder.yml.