Batwara is a personal & group expense tracker, money-lending log, and household work ledger. Split bills, simplify group debts, track money you lend to friends, import your Splitwise history, and log & peer-validate household chores, all in one app.
![]() Dashboard |
![]() Recent Activities |
![]() Work Ledger |
![]() Groups |
📸 See more app screenshots:
View Complete Screenshot Gallery
- Personal and group expenses, organized by category
- Split equally, by exact amounts, or by percentage
- Tap any expense for full detail — payer, split method, and per-person breakdown
- Create groups with a name and emoji
- Add only registered users (search by name or email — no free-text members)
- Group detail shows members, your balances, expense history, and logged work
- Settle up within a group; delete a group and its data
- Net balance across all groups, from your perspective, folding in group debts and outstanding loans (lent adds, borrowed subtracts), with a per-person breakdown
- Pairwise balances plus a Splitwise-style debt-simplification algorithm
- Record a payment between members — balances update instantly
- Settle Up clears both expense debts and loans in one place
- Log money you lent or borrowed and track it until it's returned
- Pick an onboarded user (search by name/email) or add someone by name with an optional email
- Linked loans show the mirror side on the other person's account; loans added by email auto-link when that person later signs up
- Tap a loan for details — mark settled / undo or delete
- Dashboard shows outstanding lent and borrowed totals
- Log chores with category, effort level, duration, and optional photos
- Peer validation — group-mates approve or reject each entry:
- Verified once approvals reach 50% of eligible voters (rounded up)
- Auto-rejected when that threshold becomes unreachable
- You can never validate your own work; each entry has a 7-day window with a live countdown
- Effort points (Easy 10 · Medium 20 · Hard 30), a leaderboard (weekly / monthly / all-time), and emoji reactions
- Per-member contribution profiles with stats and history
- Status (Pending / Verified / Rejected) is derived on the client from votes — never stored, so it can't drift between devices
- Date-range picker — 7 days, 30 days, year, all time, or a custom range
- Group and personal totals, a spending-by-category pie chart, and outstanding lent/borrowed totals
- Recent-activity feed spanning expenses, work, and loans
- A single quick-add "+" button to create an Expense, Lend / Borrow, Log work, or New group
- Unified log with four filters: Group, Personal, Lending, and Work
- Tap any item for its detail view
- Import a group's full history from a Splitwise CSV export in one tap
- Auto-creates the group, members, and every expense, and links your column to your account
- Email/password sign-in with password recovery via an emailed code
- Cloud sync through Supabase — groups are shared, each member seeing balances from their own perspective
- Pull-to-refresh and refresh buttons to fetch the latest changes
- Works offline in local mode (on-device storage, no account needed)
- Light, Dark, and System themes, switchable from Settings → Appearance
- System follows your phone's OS appearance and updates live when it changes
- The whole app recolors instantly — backgrounds, text, cards, tab bar, status bar, and every screen
- Your choice is remembered across launches
| Layer | Technology |
|---|---|
| Framework | React Native 0.76.9 via Expo SDK 52 (New Architecture enabled) |
| Language | TypeScript |
| Navigation | React Navigation v6 — five-tab navigator (Dashboard · Activity · Work · Groups · Settings) |
| Backend | Supabase (PostgreSQL + Auth) |
| Local storage | AsyncStorage |
| Charts | react-native-chart-kit + react-native-svg |
| Icons | Custom Ionicons renderer (draws glyphs directly from the bundled font) |
| Build | Local Gradle (android/) or EAS Build |
Note on icons: the app renders Ionicons via a small custom component (
src/components/Icon.tsx) that draws the glyph directly throughfontFamily, bypassingexpo-font's async load gate which was leaving icons blank in release builds.
Run supabase/setup.sql once in the Supabase SQL Editor — it creates every table, RLS policy, trigger, and helper function in a single pass. It drops and recreates all tables, so only run it on a fresh project (or when you intend to reset).
| Table | Purpose |
|---|---|
profiles |
User profile (name, email, avatar color); auto-created on signup via a trigger |
groups |
A shared group with a name and emoji |
group_members |
Links users to the groups they belong to |
expenses |
Personal and group expenses, including split details |
settlements |
Recorded repayments between members |
lendings |
Money lent to or borrowed from a friend, tracked until returned |
work_entries |
Logged household chores |
work_votes |
Approve / reject validations on work entries |
work_reactions |
Emoji reactions on work entries |



