6d2711e36e1a326ce1fb1b116662c74869366a0e
Default to beenvoice.soconnor.dev with server settings hidden behind Advanced; add Entities tab with clients/businesses, invoice creation, UI fixes for dashboard layout, date fields, FAB position, and card-matched button radius. Co-authored-by: Cursor <cursoragent@cursor.com>
beenvoice Mobile
Expo companion app for beenvoice — dashboard, time clock, invoices, and account settings.
Prerequisites
- Bun 1.3+
- beenvoice server running (see
../beenvoice/README.md) - iOS development build for Live Activities (
expo-widgets)
Setup
cd beenvoice-app
bun install
cp .env.example .env
Edit .env and set your API URL:
# Simulator
EXPO_PUBLIC_API_URL=http://localhost:3000
# Physical iPhone (use your Mac's LAN IP)
EXPO_PUBLIC_API_URL=http://192.168.1.42:3000
The beenvoice server must have the Expo auth plugin enabled (@better-auth/expo in beenvoice/src/lib/auth.ts).
Run
# Terminal 1 — API server
cd ../beenvoice && bun run dev
# Terminal 2 — mobile app (development build)
cd beenvoice-app
bun run ios
This uses port 8082 for Metro so it does not collide with other Expo projects on 8081.
If you already built the app and only need Metro:
bun run start -- --clear
Then open the beenvoice app on the simulator (not Expo Go).
Live Activities require a native build (bun run ios). They do not work in Expo Go.
After changing assets/beenvoice.icon, rebuild iOS:
bunx expo prebuild --platform ios --clean
bun run ios
Troubleshooting PlatformConstants / [runtime not ready]
Usually one of:
- Wrong Metro bundler — another project's dev server is on the same port. Stop it or use
--port 8082. - Stale native build — after adding native modules, rebuild:
bunx expo prebuild --platform ios --clean bun run ios - Expo Go — native modules like widgets need the custom dev build from
bun run ios, not Expo Go.
Features
- Auth — sign in, register, forgot password, reset password; multiple saved accounts
- Dashboard — revenue, pending, overdue, recent invoices
- Timer — clock in/out with client, invoice, and hourly rate; iOS Live Activity (dev build)
- Invoices — list, filter by status, tap to update status
- Settings — profile, accounts, theme (system/light/dark), server URL, sign out
Deep links
beenvoice://reset-password?token=...— open reset password screen with token prefilled
Description
Languages
TypeScript
94.6%
Shell
2.9%
JavaScript
1.6%
Swift
0.9%