TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.