Skip to content

Latest commit

 

History

History
315 lines (228 loc) · 11.4 KB

File metadata and controls

315 lines (228 loc) · 11.4 KB

Split — Product Requirements Document

Version: 1.0 (MVP) Author: [You] Target ship date: End of weekend Platform: iOS (React Native + Expo) Status: Draft


1. Overview

Split is an iOS app for Filipinos that turns a restaurant or group expense receipt into exact peso amounts per person, then opens GCash or Maya pre-filled to send/request the payment in two taps.

One-liner: Splitting a bill in GCash takes 5+ taps per person. Split makes it 2 taps total.


2. Problem

When Filipinos split a bill with friends, the current flow is:

  1. Someone (the "ate" of the group) calculates shares mentally or on a calculator
  2. Each person opens GCash or Maya
  3. Types in the recipient's mobile number
  4. Types in the amount (and usually gets it slightly wrong)
  5. Sends — and then there's a back-and-forth confirming who paid what

This is annoying for groups of 3+, especially when items are unevenly distributed (one person had drinks, another didn't). Splitwise exists but: (a) requires everyone to install it, (b) doesn't integrate with PH payment apps, (c) overkill for one meal.

The insight: Most splits are one-shot, not ongoing balances. Users want a calculator with a payment shortcut, not an accounting system.


3. Target Audience

Primary: Filipinos aged 20–35, urban (Metro Manila, Cebu, Davao), who:

  • Eat out with friends 1+ times per week
  • Use GCash and/or Maya as their primary payment method
  • Are the "designated splitter" in their friend group, OR are tired of the designated splitter getting it wrong

Secondary: Office workers ordering group food delivery (Grab Food, Foodpanda) where one person pays and collects from others.

Market size (rough): GCash has ~80M registered users in the Philippines. Conservatively, 5-10M are in the target demographic and split bills regularly. Capturing even 0.1% is 5k–10k users.


4. Goals & Non-Goals

Goals (v1)

  • Compute exact per-person amounts in under 30 seconds of input
  • Open GCash or Maya with the amount pre-filled (recipient still entered manually due to OS limits, but amount is one less thing to fat-finger)
  • Support uneven splits (item-by-item assignment)
  • Save split history locally so users can re-reference past splits
  • Feel fast and satisfying — haptics, smooth transitions, no loading spinners

Non-Goals (v1 — explicitly cut)

  • ❌ User accounts / auth
  • ❌ Backend / cloud sync
  • ❌ Multi-device sync
  • ❌ Tracking ongoing balances between friends (Splitwise's job)
  • ❌ Direct API integration with GCash/Maya (their public APIs don't support this; deep links are the workaround)
  • ❌ Receipt OCR (great v2 feature, kills the weekend timeline)
  • ❌ Android (later)
  • ❌ Currency support beyond PHP

5. User Stories

As a user paying for the group, I want to:

  1. Enter the total bill quickly and split it evenly across N people
  2. Optionally mark that certain people had extra items (drinks, extra mains) so they pay more
  3. Add tip and service charge handling (10% service charge is standard in PH)
  4. Tap a person's share to open GCash/Maya with the amount ready, so I can request payment fast
  5. Save the split so I can pull it up later if someone asks "wait, how much did I owe again?"

As a user being asked to pay my share, I want to:

  1. Receive the amount via screenshot or shared link
  2. Know exactly what I'm paying for (item-level breakdown)

6. Core User Flows

Flow A: Even Split (the 80% case)

  1. Open app → land on New Split screen
  2. Enter total amount (large numpad, no decimals required, peso symbol prefixed)
  3. Tap "+" to add people (default 2; quick add up to 10)
  4. Optionally add service charge toggle (10%) and tip
  5. See per-person amount instantly at the bottom
  6. Tap a person → bottom sheet with "Send via GCash" / "Send via Maya" / "Copy amount"
  7. Deep link opens the payment app

Flow B: Itemized Split (the 20% case)

  1. Same as A through step 3
  2. Tap "Itemize" toggle
  3. Add items: name + price + tap to assign to person(s)
  4. App computes uneven shares including shared items split among assignees
  5. Same payment flow as Flow A

Flow C: History

  1. Tap history icon on home
  2. List of past splits with date, total, # of people
  3. Tap a split to view the breakdown again
  4. Long-press to delete

7. Functional Requirements

Must Have (MVP)

ID Requirement
F1 Input total amount via numeric keypad
F2 Add/remove people, each with a label (defaults to "Person 1", "Person 2"; tap to rename)
F3 Even split calculation, rounded to nearest peso (configurable: round up to ensure payer is covered)
F4 Service charge toggle (10% default, editable)
F5 Tip entry (flat amount or %)
F6 Itemized mode: add items, assign to one or more people
F7 Per-person amount display, updated live
F8 Deep link to GCash with amount: gcash://... or fallback URL
F9 Deep link to Maya with amount
F10 Copy-to-clipboard for amount
F11 Save split to local history (AsyncStorage or expo-sqlite)
F12 View past splits
F13 Delete past splits
F14 Haptic feedback on key interactions (add person, compute, copy, send)

Nice to Have (if time permits)

ID Requirement
N1 Share split as image (export to Photos / share sheet)
N2 Frequent contacts: remember names you've split with before
N3 Dark mode
N4 Currency formatter with thousands separator (₱1,234.50)
N5 "Round up to nearest 5 pesos" option (common in PH)

Cut from MVP

  • Receipt photo / OCR
  • Group balances over time
  • Push notifications
  • iCloud sync

8. Technical Specifications

Stack

  • Framework: React Native (Expo SDK 51+)
  • Routing: Expo Router (file-based)
  • State: Zustand or React Context (avoid Redux — overkill)
  • Storage: AsyncStorage for history; expo-secure-store for any sensitive data (none planned in v1)
  • Styling: NativeWind (Tailwind for RN) or StyleSheet — pick one and stick with it
  • Icons: lucide-react-native or SF Symbols via expo-symbols

Key Expo APIs

  • expo-linking — deep links to GCash/Maya
  • expo-haptics — tactile feedback
  • expo-clipboard — copy amount
  • expo-sharing (optional) — share split summary

Deep Link Notes

  • GCash: Uses scheme gcash://. Direct amount-prefill via URL is not officially supported, but gcash:// opens the app. Test on real device — simulators won't have these apps installed.
  • Maya: Uses scheme mayaapp:// or paymaya://. Same caveat.
  • Fallback: If the app isn't installed, deep linking will fail silently. Implement a Linking.canOpenURL() check and show a "Copy amount instead" option.
  • Verify the schemes on your own device before building UI around them — payment apps update their URL schemes occasionally and what works today may not work next month.

Data Model

type Person = {
  id: string;
  name: string;
  customAmount?: number; // for itemized splits
};

type Item = {
  id: string;
  name: string;
  price: number;
  assignedTo: string[]; // person ids
};

type Split = {
  id: string;
  createdAt: number;
  total: number;
  people: Person[];
  items?: Item[];
  serviceCharge: number; // 0–1, e.g. 0.10
  tip: number; // absolute peso
  mode: "even" | "itemized";
};

9. Design Principles

  1. Fast over featured — every tap that doesn't help split a bill is a tap to cut
  2. Numeric input is the hero — big keypad, large numbers, peso symbol always visible
  3. Haptics on every meaningful action — this is what makes it feel "iOS native"
  4. No empty states with cartoons — if there's no history, show a one-line tip and the new-split CTA
  5. Filipino, not generic — peso symbol, "kasama" or "barkada" copywriting where it fits naturally, but don't overdo it

Visual Direction

  • Single accent color (suggest: GCash blue OR Maya green — pick neither to stay neutral, or a third color like a warm orange to feel distinct)
  • SF Pro for everything (Expo handles this on iOS by default)
  • Lots of whitespace; numbers are the content
  • Bottom sheets for actions, not modal dialogs

10. Success Metrics

For a weekend portfolio project, success is not DAU. Success is:

Primary (portfolio outcomes):

  • App is installable on a real iPhone via TestFlight or Expo Go by Sunday night
  • 3 clean App Store-quality screenshots produced
  • 60-second demo video recorded
  • README with the one-liner, screenshots, and a "what I learned" section

Secondary (if you choose to ship to App Store):

  • 50+ installs in first month from organic posts (r/Philippines, Twitter, friend group chats)
  • 5+ pieces of qualitative feedback
  • 1 retained user who splits 3+ bills

Anti-metrics (do not chase):

  • DAU, MAU, revenue — not the point of a weekend portfolio piece

11. Two-Day Build Plan

Day 1 — Core logic and the even-split flow

Morning (4 hours)

  • Expo project setup, file structure, navigation skeleton
  • Build the NewSplit screen: total input, add/remove people, live per-person display
  • Service charge + tip toggles
  • Wire up haptics

Afternoon (4 hours)

  • Per-person tap → bottom sheet with payment options
  • Deep linking to GCash and Maya — test on real device
  • Copy-to-clipboard fallback
  • AsyncStorage: save split on completion
  • History list screen

Day 2 — Itemized mode, polish, ship

Morning (4 hours)

  • Itemized mode: add items, assign to people, compute uneven shares
  • Edit split / delete from history
  • Fix bugs from day 1

Afternoon (4 hours)

  • Visual polish: spacing, typography, color, transitions
  • App icon (use SF Symbols or commission a quick one)
  • Splash screen
  • Take screenshots in iOS simulator at multiple device sizes
  • Record demo video
  • Write README

Evening

  • Optional: submit to TestFlight (this can take 24-48h for review so don't block on it for the portfolio)
  • Post the project — Twitter/X, LinkedIn, r/reactnative, r/Philippines

12. Open Questions & Risks

Risks:

  • Deep link schemes may not work as expected. GCash and Maya don't publish official URL schemes for amount pre-fill. Worst case: app opens, user still types amount manually — but having the amount on clipboard makes this a single paste. Build the clipboard fallback first; treat deep linking as the bonus.
  • App Store review. Apple may flag this as a "calculator" (low utility). Mitigate by emphasizing the payment integration in the App Store description and screenshots. Have a real demo video ready.
  • Scope creep. The temptation to add OCR, accounts, sync, or Android will be strong. Resist. Ship v1, then decide based on feedback.

Open questions:

  • Should the app suggest "round up to nearest peso" or "split exactly to the centavo"? (Recommendation: round up by default, with a setting to change. Filipinos generally round up.)
  • Should service charge default to 10% or 0%? (Recommendation: 0% but with a one-tap toggle, since not all venues charge it.)
  • What's the right empty-state copy? Skip the cartoon, write something dry and friendly: "No splits yet. Tap + to start one."

13. Out of Scope (v2+ ideas)

Keep a running list — don't build these now, but capture them:

  • Receipt photo + OCR auto-fill
  • Apple Wallet / Apple Pay integration
  • Group balance tracking (Splitwise-style)
  • Currency support for OFWs and travelers
  • Friend contacts integration
  • Recurring splits (rent, utilities)
  • Web version for desktop entry
  • Android version