Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

Built a local-first mood journal in React Native — and the boring sync parts nearly broke it

说明与用途

MoodMO 是一个基于 React Native/Expo 的本地优先情绪日记应用,支持可选 Supabase 同步,并注重隐私保护。

问题

Need a private, single-player mood journal that records relationship context without forcing social or therapeutic framing.

结果

MoodMO delivers a private, local-first mood journal with optional cloud sync, respecting user privacy and avoiding common pitfalls of generic mood apps.

工作流

  • 1. Record entry locally in AsyncStorage as JSON.
  • 2. Optionally sign in to enable Supabase sync.
  • 3. Use Profile to upload (push) or pull data; pull replaces server‑shared IDs, push uploads rows with updatedAt newer than last sync.
  • 4. Soft delete stamps deletedAt; permanent delete inserts tombstone in cloud table.
  • 5. Widget (Soft Stack) displays weather/garden snapshot via App Group UserDefaults.
  • 6. AI features run only if Groq key present at build time, sending aggregates to provider.
  • 7. No telemetry or Sentry; data sent over HTTPS when synced.

证据

I built MoodMO for myself first, in React Native / Expo. It is currently published on the iOS App Store —not Android.

来源

Local-first storage (and an honest at-rest gap). Entries live on-device first as JSON in AsyncStorage (guest key vs per-user key).

来源

Optional sync uses Supabase when you sign in. Auth session tokens use SecureStore; diary entries do not.

来源

Soft delete stamps deletedAt (recycle bin can restore). Permanent delete inserts a tombstone id for signed-in users; pull/push filter those ids so another device cannot resurrect a purged entry.

来源

Upload and pull are separate actions—not one automatic pipeline.

来源

Widget as hostile multi-process storage (iOS). Soft Stack never receives diary body, people names, or audio paths—only a whitelist snapshot.

来源

  • 记录日期: 2026-10-18T02:41:23.854Z