TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
The intelligent reminder platform — a multi-tenant reminder & event-notification app with two account roles (User, Super Admin) plus per-group admins, recurring reminders, smart grouping, compliance acknowledgement with escalation, quiet hours, and paid plans (Personal Plus, Team, Growth) billed through Stripe.README 전문 보기 ↗The intelligent reminder platform — a multi-tenant reminder & event-notification app with two account roles (User, Super Admin) plus per-group admins, recurring reminders, smart grouping, compliance acknowledgement with escalation, quiet hours, and paid plans (Personal Plus, Team, Growth) billed through Stripe.
Built with Vite + React + TypeScript + Tailwind CSS v4 + Motion, with Supabase (PostgreSQL + Auth) as the backend and Stripe (via Vercel functions in api/) for billing. Responsive: a three-column dashboard on desktop that becomes a native-feeling mobile app (bottom tab bar, bottom sheets, swipe gestures) on phones.
npm install
npm run dev # http://localhost:5173
The app runs out of the box in demo mode (simulated auth, no backend). To enable real authentication and data, connect Supabase (below).
| Path | Page |
|---|---|
/ | Marketing landing page |
/login | Sign in / sign up (email + password, or Google) |
/app | Dashboard (protected): Today · Calendar · Workspace · Groups · Finance · Business · Inbox · Settings · Admin |
/pricing | Plans |
/contact | Contact us |
/terms | Terms & conditions |
/privacy | Privacy policy |
Create a project at supabase.com.
In the SQL editor, run the schema then the seed:
supabase/migrations/0001_initial_schema.sqlsupabase/migrations/0002_premium_features.sql … 0006_business_compliance.sqlsupabase/migrations/0007_billing_recurrence_admin.sql (billing, activity log, recurring reminders, admin bootstrap)supabase/migrations/0008_role_guard_service_role.sql (lets the SQL editor change roles)supabase/migrations/0009_groups_rpc.sql (groups created in-app; creator becomes group admin)supabase/migrations/0010_membership_approval.sql (invitations must be accepted; join requests must be approved)supabase/migrations/0011_search_and_notifications.sql (search people/groups; membership notifications in the Inbox)supabase/migrations/0012_group_workspace.sql (group workspace: shared lists, notes, documents + the private group-docs bucket)supabase/migrations/0014_workspace_access.sql (per-member workspace access — superseded by 0015)supabase/migrations/0015_item_access.sql (access set per list and per note: a default for members plus per-member overrides)supabase/migrations/0013_admin_plan_read.sql (Super Admins can see everyone's plan)supabase/seed.sql (optional — creates demo user [email protected] / Password123!; no sample data)Enable Google as an auth provider: Supabase Dashboard → Authentication → Providers → Google (add your Google OAuth client ID & secret, and set the authorised redirect to your Supabase callback URL).
Add the redirect URLs for your app (e.g. http://localhost:5173/app and your Vercel domain /app) under Authentication → URL Configuration.
Copy .env.example to .env.local and fill in:
VITE_SUPABASE_URL=https://YOUR-PROJECT.supabase.co
VITE_SUPABASE_ANON_KEY=YOUR-ANON-KEY
With these set, the login page uses real Supabase auth (email/password + Google) and the demo banner disappears.
Account roles live in profiles.role (user, super_admin; the legacy group_admin value is treated as user) and are enforced by RLS. Group admin is a per-group membership (group_members.member_role), not an account role — the UI only decides what to show. After migration 0007, the first account to sign up becomes Super Admin automatically. To promote any existing account, run migration 0008 once (it lets the SQL editor bypass the in-app role guard), then:
update public.profiles set role = 'super_admin' where email = '[email protected]';
Super Admins see the Admin tab: people, roles and plans (a Super Admin can put anyone on Free / Personal Plus / Team / Growth without Stripe via /api/admin-set-plan; a later Stripe event for that person overrides it), including removing accounts — this calls /api/admin-delete-user, which needs SUPABASE_SERVICE_ROLE_KEY on Vercel), groups, the Discover events catalogue (public events anyone can subscribe to), compliance policy, analytics and the audit log. Whoever creates a group is its Group Admin by default. Membership needs consent on both sides: inviting someone by email creates an invitation they accept or decline under Groups, and anyone can find a group by name (or enter its code) and ask to join, which an admin approves or rejects. Invitations, requests and approvals show up in the Inbox. Each group also has a workspace: group admins create, rename and delete shared lists and notes, and set access on each list and note — a default for members (No access, Read, or Read & write) plus per-member overrides from the item's Access panel; writers tick and add list items and edit note text. Documents (up to 20 MB each; any member may upload, admins or the uploader remove) and group chat need Personal Plus or a business plan; Team and Growth include everything. Inviting an email with no account yet sends a Supabase Auth invitation email (/api/invite-user; needs the service-role key, and https://<your-domain>/app in Supabase → Authentication → URL Configuration → Redirect URLs). Local data is per device: signing in as a different account on the same browser clears the previous account's on-device data. In local demo mode (no Supabase) everyone is treated as Super Admin so the console is explorable.
Feature gating is defined once in src/lib/plans.ts and read by every gate. The user's plan comes from billing_subscriptions, a row written only by the Stripe webhook. Locked features show an Upgrade button → plan chooser → Stripe Checkout → back to /app?checkout=success.
In Stripe (test mode) create three recurring monthly Prices: Personal Plus, Team, Growth. Copy their price_… ids.
Add these environment variables to the Vercel project (Production + Preview) — they are server-side only, never VITE_-prefixed:
| Variable | Value |
|---|---|
STRIPE_SECRET_KEY | Stripe secret key |
STRIPE_WEBHOOK_SECRET | Signing secret of the webhook endpoint (step 4) |
STRIPE_PRICE_PLUS / STRIPE_PRICE_TEAM / STRIPE_PRICE_GROWTH | The three Price ids |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Settings → API → service_role (lets the webhook write billing_subscriptions) |
SUPABASE_URL | Optional; falls back to VITE_SUPABASE_URL |
Redeploy.
Stripe → Developers → Webhooks → add endpoint https://<your-domain>/api/stripe-webhook with events checkout.session.completed, customer.subscription.updated, customer.subscription.deleted. Paste its signing secret into STRIPE_WEBHOOK_SECRET and redeploy once more.
Until the keys are present, the checkout button reports "Billing isn't configured on this deployment yet". In local demo mode (no Supabase) the chooser activates the plan on-device so the whole flow can be exercised without a card.
See supabase/migrations/. Core tables: profiles, groups, group_members, events (reminders, with recurrence), user_preferences (quiet hours), discover_events, event_subscriptions, activity (Inbox/History), billing_subscriptions (plan), plus the premium and business tables from 0002–0006. Row-Level Security is enabled with owner/member-scoped policies, and a signup trigger auto-provisions each new user's profile and preferences.
npm run build, output dist).VITE_SUPABASE_* environment variables (Production + Preview), plus the Stripe variables above when you're ready to bill.vercel.json rewrites all routes to index.html so client-side routing and deep links work.npm run dev — start the dev servernpm run build — type-check and build for productionnpm test — unit tests (plan gating, recurrence, snooze, parsing, Stripe webhook)npm run preview — preview the production build locally