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.
Manage reminders and events with smart grouping, recurring schedules, and team roles
AI summary · README
ProductivityTypeScript · PLpgSQLGitHub @smohapOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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