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。 以下为已保存的摘录。
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