Trove
Everything that's yours, from every circle.
Shared lists for the circles you belong to, and one personal view of the work that is actually yours.
Most of us don't belong to one team. We belong to a household, a garden crew, a choir, a side project, a volunteer circle. The work is scattered across those circles, and no tool shows everything that is yours in one place. Trove is built for that.
Make a circle for each part of your life. Everyone in the circle sees the whole shared list. Mine gathers the tasks assigned to you from every circle you have joined, so the same person, in the same circles, still has their own pile.
Get it out of the chat, and onto a list you can actually see.
What you get
- A circle for every part of life. Home, garden, choir, crew, team. Each with its own accent colour, members, and roles (owner, admin, member, viewer).
- Mine, across every circle. The Mine view is every task assigned to you, from every circle you have joined. A circle's own board stays the full shared list.
- A board that fits the screen. Kanban columns with drag and drop on desktop and web, a calm single column with swipe gestures on your phone. Same code, same data.
- Invites that just work. Invite by email, share a link, they land in the right circle with the right role. Free, no per-person cost.
- Real-life tasks. Notes, priority, due dates, assignees, and photos or videos on any task.
- A private circle that stays private. Every account starts with a Personal circle. Nobody sees it until you invite someone. That is not a setting, it is the security model.
- Confetti. Finish something, get confetti. Small joys matter.
The one rule
Trove's visibility is not a UI filter. It is one rule, enforced by the database:
You can see or change a task only if you are a member of its circle.
That rule is a Postgres Row Level Security policy (see supabase/migrations), so it holds for every query the app can possibly make, on every platform. Membership is the boundary. Mine is an extra filter on top of that: tasks where you are the assignee. It does not hide other people's tasks on a circle board you belong to.
Built with
One TypeScript codebase, three platforms (iOS, Android, web):
- Expo SDK 56 / React Native 0.85, with Expo Router for file-based navigation
- Supabase: Postgres, Auth, Row Level Security, Storage
- TanStack Query for data and mutations
- Reanimated + Gesture Handler for the drag, swipe, and splash animations
- react-native-fast-confetti (Skia) on native, canvas-confetti on web
- Fraunces + Hanken Grotesk, and a warm hand-rolled design system
- EAS for builds and deployment
Run it locally
You'll need Node 20+ and a Supabase project. Apply the SQL in supabase/migrations in filename order, then set the Auth redirects described in supabase/README.md. supabase/seed.sql is local demo data only.
Create a .env in the project root:
EXPO_PUBLIC_SUPABASE_URL=your-project-url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-publishable-key
Then:
npm install
npx expo start --web
npx expo run:ios
Contributing
Issues and pull requests are welcome. Keep the tone of the product in mind: warm, plain, human. If you're proposing a feature, open an issue first so we can talk it through. Run npm test and npm run typecheck before pushing.
Store listing copy, the Mac distribution note, and a privacy policy draft live in store/.
License
AGPL-3.0. You can use, study, and modify Trove freely; if you host a modified version for others, you share your changes under the same license.
Built in the open by The React Native Rewind.