TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Work for your scroll. Drift is an iOS app that blocks the apps you choose until you earn screen time by doing real things: a workout, a chapter, a chore. You prove it with a photo or a short video, and an AI check approves it before the time is credited.
· Website
┌────────────────────────────────┐ ┌────────────────────────────────────┐
│iOS app (Expo / React Native) │ │Supabase │
│ Drift.jsx shell, JS/JSX │──JWT──▶│ Edge Functions (Deno/TS) │
│ Native modules (Swift): │ │ verify-task, evaluate-task │
│ ScreenTime, Lockbox, │ │ -> OpenAI (server-side only) │
│ SleepGuard │ │ revenuecat-webhook <- RevenueCat │
└────────────────────────────────┘ │ family + push functions │
│ Postgres + RLS │
┌────────────────────────────────┐ │ is_pro(uuid): one entitlement │
│Extensions (App Group) │ │ definition for every caller │
│ DriftMonitor: DeviceActivity │ └────────────────────────────────────┘
│ DriftShield: shield UI │
│ DriftWidgets │
└────────────────────────────────┘
A few decisions worth calling out:
is_pro(), which every edge
function calls instead of re-implementing the check.revenuecat-webhook (which
authenticates every request) may write a subscription's active/expiry
fields; a database trigger rejects writes from anywhere else.DriftMonitor is a
DeviceActivityMonitor extension that iOS wakes on its own schedule, so the
shield goes up even if Drift is force-quit or the phone is offline.| Path | What's there |
|---|---|
App.js, Drift.jsx, *.jsx | App shell, screens and modals |
screenTime.js, blockedApps.js | JS side of the Screen Time bridge |
ios/Drift/ | Native modules (Screen Time, Lockbox AR, Sleep Guard) |
ios/DriftMonitor, ios/DriftShield, ios/DriftWidgets | App extensions |
supabase/functions/ | Edge functions |
supabase/admin/ | Annotated schema history (schema_v*.sql): explains why |
supabase/migrations/ | The migrations as applied |
i18n/ | Translation sources (i18n/src/*.tsv) and the build that emits JS, Swift and InfoPlist strings |
dashboard/ | Internal metrics page (Vercel) |
docs/ | Public website, served by GitHub Pages |
You'll need a Mac with Xcode, Node, CocoaPods and your own Supabase project. Screen Time features (shields, the app picker, the monitor extension) only work on a real iPhone, not in the simulator or Expo Go.
npm install --legacy-peer-deps
cd ios && pod install && cd ..
cp .env.example .env # Google OAuth client IDs
npx expo start --dev-client
Point SUPABASE_URL / SUPABASE_ANON in supabase.js at your own project.
Then build the Drift scheme from ios/Drift.xcworkspace in Xcode. On Xcode
27, npx expo run:ios can't find the simulator; build with xcodebuild
instead (see CLAUDE.md for the exact command).
The backend runs on Supabase. supabase/migrations/ only starts in August
2026 and assumes the tables created before it, so a fresh project needs the
base schema first:
supabase.js (profiles,
screen time, friendships, challenges).supabase/admin/schema_v*.sql in version order, plus the unnumbered
table files (push_tokens.sql, analytics_events.sql). They are written
to be safe to re-run.supabase/migrations/ with supabase db push.Bootstrapping a brand-new project from scratch this way hasn't been tested end to end, so expect to fix up an ordering issue or two.
Then deploy the functions and set OPENAI_API_KEY, OPENAI_MODEL (must be
vision-capable) and REVENUECAT_WEBHOOK_SECRET as function secrets.