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.