Last updated: April 6, 2026
FairShare is no longer just a prototype. The monorepo has a working backend, a usable web app, and a usable mobile app with real shared-expense flows:
- auth
- groups
- invites
- expense creation
- settlements
- recurring expenses
- activity feed
- receipts
- realtime updates
- basic offline mutation support on mobile
The repo has also advanced in the last few days:
- web home and shell responsiveness/accessibility improved
- modal focus handling added on web
- aggregated dashboard endpoint added on backend
- web dashboard moved off the worst N+1 pattern
- balances CSV export added
- mobile offline mutation queue hardened with dedupe and broader mutation support
This is solid progress, but the product is still not launch-ready.
The main reason is not “missing everything.” The main reason is that the remaining issues are concentrated in launch-critical areas:
- unfinished parity across web and mobile
- incomplete guest/read-only and sharing flows
- weak backend hardening around some mutation paths and uploads
- sparse frontend coverage on web
- some dashboard/home UX friction still present on both platforms
- several production-grade edge cases still not fully closed
Backend is the strongest part of the repo.
What is in place:
- NestJS API with modular structure
- Prisma persistence
- JWT auth
- groups, expenses, balances, settlements, simplify, receipts, notifications, activity, payments modules
- recurring expense materialization
- receipt presign flow
- realtime events
- rate limiting through Nest throttler
- tests across multiple backend services
Recent repo-accurate additions:
GET /groups/dashboardaggregation endpoint- balances CSV export endpoint
Current assessment:
- foundation is good
- business logic is mostly centralized correctly
- still needs some hardening for uploads, idempotency semantics, and invite abuse protection
Web has improved meaningfully, but it still trails mobile in some practical product polish.
What is working:
- marketing site and dashboard shell
- group detail pages
- expense filters by date, payer, category
- expense detail page with edit flow
- expense delete flow
- expense CSV export
- balances CSV export
- recurring expense management
- settlement page
Recent repo-accurate additions:
- responsive hero/layout cleanup
- stronger glass-card contrast
- improved mobile nav behavior
- focus trap for major modals
- aggregated dashboard usage instead of per-group simplify/recurring fetch fanout
Current assessment:
- usable
- more structured than before
- still has rough interaction and dashboard CTA gaps
- still needs stronger parity and stronger component testing
Mobile remains the better product surface overall.
What is working:
- core auth and navigation
- groups and activity
- add expense flow
- expense detail screen with edit and receipt upload
- settlement flow
- recurring expense support
- offline queue infrastructure
Recent repo-accurate additions:
- offline mutation queue dedupe
- queue support expanded beyond only raw POST expense creation behavior
- idempotency key generation broadened for mutation use
Current assessment:
- strongest user-facing flow set
- still has dashboard/home inefficiencies and some unresolved UX problems
- still needs gesture conflict handling and overflow handling in high-density cases
This section reflects the current repo, including recent commits.
- registration and login flows exist
- groups can be created and listed
- members can be invited
- expenses can be created with equal, exact, and percentage splits
- settlements can be recorded
- balances and simplify suggestions exist
- recurring expenses exist and materialize into real expenses
- activity feed exists
- receipts can be attached
- backend payments groundwork exists
- fixed web hero responsiveness and shell layout issues
- improved web modal keyboard handling with focus trap support
- improved web navbar mobile behavior
- improved text contrast on web glass surfaces
- added backend aggregated dashboard endpoint
- switched web dashboard to consume aggregated dashboard data
- added balances CSV export flow
- hardened mobile offline mutation queue with dedupe behavior and broader mutation support
- web expense deletion exists
- web expense editing exists on expense detail page
- web group filtering exists in expense history
- expense CSV export exists
- balances CSV export now exists
These are the material gaps that still block a clean launch.
- guest read-only mode is implemented
- shareable group link flow is implemented
- explicit no-mutation guest guard flow exists
- strict receipt file validation policy on backend and frontend
- web inline expense editing flow in the group table
- no web “view all attention items” flow matching the mobile/product requirement
- no balances export entry from mobile
- swipe delete vs back navigation conflict still needs real handling
- attention queue still does not enforce the requested “max 3 + view all” behavior
- high-participant split UI overflow still needs dedicated handling for 10+ participants
- offline queue is better now, but not fully conflict-safe for every mutation family
- settlement duplication protection hardened with SHA-256 details-hash idempotency
- S3 upload flow hardened with server-side size and MIME validation
- invite rate limiting exists, but it is still basic throttling rather than more targeted anti-abuse protection
- web component and interaction coverage is still thin
- critical flows requested in the launch plan are not all covered
- dashboard aggregation endpoint does not yet have dedicated regression coverage
- mobile offline queue behavior changes need direct tests
These are the highest-priority issues still visible from the current repo.
HomeScreen.tsx still maps across groups and fetches:
- simplify suggestions per group
- recurring expenses per group
This is the same class of problem that was fixed for the web dashboard.
Impact:
- slower home load for users in many groups
- more battery/network usage
- more failure points
On web dashboard:
- the “Create New Crew” icon button is decorative only
- the “Review attention queue” button is decorative only
These are visible CTA affordances without complete behavior.
That is a launch problem because it creates false affordance and breaks trust.
These are current repo-level bugs or likely bugs based on implementation.
- expense deletion still uses
window.confirm, which is functional but low-quality and inconsistent with the rest of the UI - recurring expense deletion also uses
window.confirm - navbar still contains “Coming Soon!” while other home CTAs point to registration, creating messaging inconsistency
- some dashboard buttons look actionable but have no handler
- payer display on expense detail still shows raw
payerIdrather than resolved member name
- home screen “Split it” and “Settle Up” quick actions navigate using
groups[0]?.id ?? ''- if the user has no groups, these routes can be triggered with an empty
groupId
- if the user has no groups, these routes can be triggered with an empty
- home screen toast copy includes “Failed to sync your vibes”
- functional, but not launch-grade product copy
- attention list can still grow beyond the desired compact form
- editing offline-created or recently queued data is safer than before, but conflict semantics are still incomplete outside the newly handled paths
- settlements still depend on client idempotency behavior for strongest safety
- balances export currently emits only debtor-side negative balances as rows
- this is likely correct enough for v1, but should be documented as canonical output format
- rounding correction still concentrates residual cents into one participant in some flows
- exact and percentage split edits can still produce UX confusion if totals do not feel visibly balanced to the user
- create + edit + delete sequences while offline remain sensitive
- queue dedupe is improved, but not every domain action is normalized into a conflict-safe replay model
- dashboard/home quick actions need safer behavior when there are zero groups
- some action buttons should redirect to create group instead of pushing invalid or empty params
- materialization is in place, but high-volume backlog catch-up scenarios still deserve careful regression testing
- recurring and standard expense state can still diverge in user understanding if editing rules are not explained clearly
- guest viewing does not exist yet
- therefore read-only edge cases and privilege boundaries for shared links remain completely unresolved
The old doc understated current testing. The repo already has meaningful test coverage in several places.
Backend:
groups.service.spec.tsbalances.service.spec.tsexpenses.service.spec.tsexpenses.integration.spec.tsexpense-calculator.spec.tssettlements.service.spec.tssettlements.integration.spec.tsreceipts.service.spec.tsreceipts.integration.spec.tssimplify.service.spec.tsactivity.service.spec.tspayments.service.spec.tsnotifications.service.spec.tsusers.service.spec.ts
Mobile:
AddExpenseScreen.spec.tsxGroupListScreen.spec.tsxLoginScreen.spec.tsxSplitSelector.spec.tsxsplit.test.ts
E2E:
tests/e2e/fairshare.spec.ts
- web interaction/component tests are still far too sparse
- no focused test for the new web modal focus trap behavior
- no dedicated tests yet for
GET /groups/dashboard - no explicit regression tests for balances CSV export
- no direct test suite yet for the hardened mobile offline queue
- no meaningful UI regression coverage for dashboard/home screens
- backend tests for dashboard aggregation endpoint
- backend tests for settlement duplication/idempotency race behavior
- web tests for expense create/edit/delete flows
- mobile tests for offline queue dedupe and queued update behavior
- web tests for filtering and CSV action affordances
- auth exists
- JWT guard coverage is present across protected modules
- throttler is configured globally
- invite and reminder endpoints already have route-level throttle decorators
- expense and settlement creation support idempotency keys
- receipt upload validation is not strict enough yet
- invite abuse protection is still basic
- no guest-link permission model yet because guest mode does not exist
- some mutation families still rely too heavily on client correctness
- strict receipt file validation
- stronger settlement duplication protection
- targeted invite abuse controls
- guest-share access model design before release
This section is specifically about dashboard and home page UX on both web and mobile.
What improved:
- hero scaling is better
- navbar is more stable
- contrast is better
Still weak:
- top-level home page still layers multiple blurred orbs and effects; it is improved but still visually heavy
- “Coming Soon!” in navbar conflicts with stronger conversion CTAs elsewhere
- home page still carries some visual noise from decorative motion that does not add product clarity
- static marketing sections still need a final content/CTA consistency pass
What improved:
- aggregated endpoint removed the worst query fanout
- shell and glass surfaces are more readable
Still weak:
- dead CTA buttons remain
- some widgets feel ornamental instead of operational
- delete UX uses browser confirm instead of product-native confirmation
- expense editing exists only on detail page, not where users most often scan the ledger
- dashboard still mixes strong product data with decorative stylistic language in a few places
What is good:
- good structure
- quick actions are clear
- activity feed is understandable
- attention cards are useful
Still weak:
- still fetches per-group simplify/recurring data on load
- attention queue can occupy too much space
- no compact “3 items + view all” cap yet
- quick actions are unsafe when user has no groups
- product copy is still too casual in a few error/loading paths
- gesture conflict still unresolved
- high-density groups can create crowded visual stacking
- split configuration layouts still need stronger handling for large participant counts
- web dashboard aggregation path
- reduced some web layout/rendering instability
- mobile offline queue replay logic is more disciplined than before
- mobile home/dashboard aggregation path should mirror web backend aggregation
- web home visual effects can still be trimmed for lower-end devices
- recurring expense and simplify data access patterns should continue moving toward fewer round-trips
- queue replay semantics should become more state-aware, not just request-aware
These are reasonable compromises to ship cleanly.
- receipts as attachment proof only, no OCR
- balances export and expense export as CSV only, no analytics suite
- expense editing as minimal metadata editing first
- guest mode as read-only only, no mixed permissions in v1
- shipping dead CTA buttons
- shipping unvalidated upload paths
- shipping without stronger settlement duplication safety
- shipping without at least minimal web flow tests
- shipping with empty-group quick action bugs on mobile
If continuing from the current repo, the practical next sequence should be:
- fix mobile home/dashboard UX bugs
- add mobile aggregation path similar to web dashboard
- harden settlement duplication guarantees
- harden receipt validation and upload policy
- implement guest read-only mode and share link
- replace weak web confirm dialogs with product-native confirmation
- add backend dashboard/idempotency tests
- add web expense flow tests
FairShare now has a credible base and several recent launch-readiness improvements already landed in the repo.
What is true today:
- the backend is strong
- mobile is the best user surface
- web is much better than it was a few days ago
- core flows exist
- recent commits addressed real launch friction
What is also true:
- the repo still has unresolved launch blockers
- the biggest remaining work is not broad invention
- it is targeted hardening, parity closure, dead-UX cleanup, and production-grade safeguards
The product should now be treated as:
- not a prototype anymore
- not ready for broad launch yet
- close enough that disciplined finishing work will matter far more than new feature expansion