TogetherFunds is a warm, mobile-first Expo app for couples who want to plan shared expenses, monthly bills, savings goals, and virtual cash-envelope piggy banks.
npm install
npx expo start --tunnelOpen Expo Go on your phone and scan the QR code shown by Expo.
- Dashboard summary
- Monthly expenses
- Virtual piggy banks
- Add and edit expense forms
- Add and edit piggy bank forms
- Partner contribution tracking
- Partner summary
- Plaid Sandbox-ready bank sync mock
- Recent transaction assignment mock
- AsyncStorage persistence
- Demo data reset
The Bank Sync screen is a sandbox-ready architecture for Plaid integration. The current MVP uses mock data only so Expo Go remains runnable with:
npm install
npx expo start --tunnelSecurity rules for production:
- Plaid Link must be used on the client. Do not ask users for bank usernames or passwords directly.
- The Plaid
public_tokenmust be exchanged for anaccess_tokenon a secure backend. - The Plaid
access_tokenmust never be stored in AsyncStorage or on the device. - Backend services should handle all Plaid API calls and return only safe account metadata and app-ready transaction data.
- Add a Firebase, Supabase, or Node backend before connecting real financial institutions.
The local mock stores only sandbox account metadata and mock transactions:
- Institution name
- Account name and type
- Last 4 digits
- Current/available balances when provided
- Last synced time
TogetherFunds is scaffolded to fit the SmashPro shared app architecture. The backend API uses:
spd_appsfor reusable app registration withapp_key = togetherfundsspd_app_tenantsfor tenant/workspace scope withtenant_key = demo-couplespd_app_featuresusing SmashPro'sapp_slug + codeconventionspd_app_feature_flagsfor tenant-level feature overridesspd_app_component_registryandspd_app_component_configsfor reusable app componentsspd_tf_*tables for TogetherFunds-specific couples, expenses, envelopes, contributions, bank metadata, and transaction assignmentsspd_usersplus shared membership, session, preference, and app-setting tables for reusable SmashPro loginspd_api_keysandspd_api_error_logsfor shared auth and API logging
The Expo client sends these headers on server requests:
X-SmashPro-Api-Key
X-SmashPro-App-Key: togetherfunds
X-SmashPro-Tenant-Key: demo-couple
Authorization: Bearer <session_token>
Server Sync Mode in Settings shows the app key, tenant key, API health, and feature flags returned by the server.
The temporary Auth Debug button in Settings calls:
health.get.phpauth.debug.get.phpapp.context.get.php
It shows HTTP status, server messages, endpoint URL, and missing auth tables/columns when returned.
TogetherFunds uses one SmashPro account across apps. A user can register once, receive a TogetherFunds app membership, and keep app-specific preferences such as display name, currency, theme mode, dashboard layout, envelope style, and default budget period.
- Passwords are hashed server-side with
password_hash()and verified withpassword_verify(). - Raw session tokens are returned once and stored in the mobile app with
expo-secure-store. - The database stores only hashed session and refresh tokens.
- Logout revokes the server session and clears SecureStore.
- Future OAuth/social login can attach to the same shared
spd_usersidentity.
See docs/architecture/togetherfunds-platform-integration.md for the platform integration notes based on the SmashPro schema export.
- Car Service: $600 target, $250 saved
- Rent: $1,800 due on the 1st
- Utilities: $260 due on the 15th
- Groceries: $700 monthly
- Partner A contributes $400
- Partner B contributes $350
App.tsx
app.json
src/
components/
data/
navigation/
screens/
state/
types/
utils/
assets/