Most expenses aren't split 50/50.
You order a steak, they order a salad. You share an appetizer, but someone else had three drinks.
- "Why am I paying for your cocktail?" — traditional "even split" apps are unfair.
- "I'll figure out the math later." — manual itemization on napkins is error-prone.
- "Who had the extra side?" — confusion leads to social friction.
The result? You pay more than your fair share just to avoid the hassle.
PrismSplit: Item-Level Bill Splitting with AI Receipt Scanning.
We built the system designed for true fairness. PrismSplit replaces "even splits" with granular precision, allowing everyone to pay exactly what they owe.
- Scan It. Point your camera at a receipt — AI extracts every item in seconds.
- Itemize It. Break down bills item-by-item with inline editing.
- Split It. Equal, percentage, shares, or exact amounts — per item or per bill.
- Settle It. Real-time balances, one-tap settlement.
Capture a receipt photo → AI extracts merchant, items, tax, tip → review and edit inline → create bill. Handles multi-image receipts with parallel upload and discount normalization.
- Dual-mode entry: Simple amount or itemized breakdown
- Ledger-style item editor: Focus-driven expandable rows, auto-advance keyboard flow, swipe-to-delete
- Auto-category detection: Type "uber" → auto-selects Transport
- 4 split methods: Equal (toggle participants), Unequal (exact amounts), Percentage, Shares — with live redistribution
- Invite links & QR codes for instant group joining
- Guest members — add friends who don't have the app yet; they claim their history on signup
- Multi-currency support per group
- Group quota system with tier-based limits
- Real-time balances with animated number transitions
- Settlement tracking with one-tap settle-up
- Bill-level and item-level discounts — correctly calculated through the entire stack
- Tax & tip intelligence — proportional or equal distribution with inline mode selector
| Layer | Technology | Purpose |
|---|---|---|
| Framework | Expo SDK 54 + React Native 0.81 | Cross-platform mobile |
| Language | TypeScript | Type safety |
| Backend | Supabase | PostgreSQL, Auth, Realtime, Edge Functions, Storage |
| State | Zustand + TanStack Query | Client state + server cache with optimistic updates |
| UI | Tamagui | Compiled styles, theming, 60fps animations |
| Animations | React Native Reanimated | Layout transitions, gesture-driven interactions |
| Storage | MMKV + EncryptedStorage | Offline cache + secure keychain |
| AI | Gemini (via Edge Functions) | Receipt OCR and item extraction |
| Analytics | PostHog + Firebase + Sentry | Usage tracking, crash reporting, error monitoring |
| Validation | Zod + React Hook Form | Runtime schema validation |
4-font typography system with strict role separation:
- Sora — Body text, inputs, descriptions
- Space Grotesk — Page titles, hero text
- Outfit — UI chrome: badges, labels, section headers
- SpaceMono — Currency amounts, tabular numbers
Theme-aware components with light/dark mode, brand color overrides, and 12-color avatar palette.
src/
├── app/ # Expo Router (file-based routing)
│ ├── (auth)/ # Auth screens (login, signup)
│ ├── (tabs)/ # Main tabs (Home, Groups, Activity, Friends)
│ ├── bill/ # Bill flows (create, edit, scan, review, processing)
│ └── group/ # Group screens (details, settings, edit)
├── components/
│ ├── ui/ # Design system (Avatar, SwipeableRow, Button, etc.)
│ ├── bill/ # Bill components (LedgerItemRow, SplitModal, etc.)
│ ├── home/ # Dashboard (BalanceCard, SmartFeed, TopCircle)
│ └── group/ # Group components
├── hooks/ # Custom hooks (useThemeColors, useAnalytics, etc.)
├── lib/
│ ├── store/ # Zustand stores (auth, bills, groups, UI, quota)
│ ├── services/ # Service layer (billService, notifications)
│ ├── utils/ # Utilities (billCalculations, formatting)
│ └── supabase.ts # Supabase client singleton
├── theme/ # Design tokens, typography, themes
└── types/ # Shared TypeScript interfaces
graph LR
User -->|Interacts| UI[Tamagui UI]
UI -->|Updates| Store[Zustand Store]
Store -->|Syncs| Query[TanStack Query]
Query -->|Persists| DB[(Supabase Postgres)]
DB -->|Pushes| Realtime[Realtime Events]
Realtime -->|Refreshes| UI
Camera -->|Captures| Upload[Supabase Storage]
Upload -->|Processes| Edge[Edge Function + Gemini]
Edge -->|Returns| Review[Structured Items]
Review -->|Creates| Store
- Node.js 18+
- Expo CLI (
npm install -g expo-cli) - iOS Simulator / Android Emulator / Physical device with Expo Go
git clone https://github.com/architagrawal/prismsplit.git
cd prismsplit/src
npm installCreate a .env file in src/ with your Supabase credentials:
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_KEY=your-anon-key-herenpx expo startActive Development — V1.1 shipped with AI receipt scanning, ledger-style item editor, and redesigned split flow.
- Redesigned itemize modal with ledger-style inline editing
- Redesigned receipt review screen with inline item editing
- Redesigned split customization modal
- Redesigned alert dialog system
- Auto-advance keyboard flow across item fields
- Scroll-synced keyboard management
- Item validation with auto-focus on incomplete fields
- Smart Feed with pending approvals and settle requests
- Offline write queue with conflict resolution
- Self-select flow (each participant claims their own items)