You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc.md
+19-11Lines changed: 19 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,10 +3,10 @@
3
3
Last updated: March 15, 2026
4
4
5
5
## Snapshot
6
-
- Monorepo with NestJS API, Expo mobile client, and a Next.js marketing site managed via Turbo + pnpm.
6
+
- Monorepo with NestJS API, Expo mobile client, and a Next.js web app managed via Turbo + pnpm.
7
7
- Core expense, settlement, receipt, notification, realtime, and payment primitives are implemented server-side with Prisma/PostgreSQL (Supabase URL) and Redis/BullMQ.
8
8
- Mobile app ships full flows (auth, groups, expenses, settle-up, activity, profile/settings) with offline queueing, push tokens, realtime sockets, and UPI deep-link helper; UI built with React Native Paper + Reanimated.
9
-
- Web app is currently a single-page marketing/landing experience with Framer Motion; no dashboard/auth wiring yet.
9
+
- Web app now includes authenticated dashboard: JWT cookie auth, middleware guards, groups, expenses, settlement suggestions, receipt upload, realtime Socket.IO updates, and Playwright e2e coverage.
10
10
- Observability (Sentry, OpenTelemetry, Prometheus metrics) and security hardening (helmet, throttling, CSRF on refresh, JWT + refresh cookies) are wired in backend startup.
11
11
12
12
## Project Structure
@@ -67,9 +67,17 @@ Last updated: March 15, 2026
67
67
- Tests: basic Jest + testing-library specs for login, group list, add expense screens; TypeScript lint via `tsc --noEmit`.
68
68
69
69
## Web (apps/web)
70
-
- Next.js 15 single-page marketing site with Framer Motion animations, Lucide icons, Tailwind utility styles.
- Groups: list and detail pages, member panel with invites, expense ledger, actions panel.
76
+
- Expenses: CreateExpenseModal with equal/exact/percentage split logic (shared with mobile), payer selection, participant guard, server action to POST /groups/:id/expenses.
- Receipts: per-expense upload modal uses presigned PUT from /expenses/:id/receipt-url with preview.
79
+
- Realtime: Socket.IO client joins group rooms and refreshes on expense/settlement/member events via backend gateway.
80
+
- Tests: Playwright e2e (opt-in with RUN_E2E=true) covers auth → group → expense → settlement lifecycle.
73
81
74
82
## Shared Types (packages/shared-types)
75
83
- Zod/TypeScript DTOs for auth payloads, expenses, balances, settlements, receipts, activity feeds, payments, notifications; consumed by backend controllers and mobile client.
@@ -81,17 +89,17 @@ Last updated: March 15, 2026
81
89
- Infra: Terraform stubs for AWS ECS/RDS/S3; CI assumed via GitHub Actions (see README claim) though pipeline files not present in repo root.
82
90
83
91
## Known Gaps / Risks
84
-
- Web app is marketing-only; product dashboard, auth, and API integration are not implemented.
85
-
- Payments: mobile flow currently bypasses Stripe; settles via UPI link + manual settlement API. Stripe PaymentIntent UX is not exposed to clients yet.
92
+
- Web payments UI not implemented; mobile still bypasses Stripe in favor of UPI + manual settlement API.
86
93
- Receipt processing queue lacks worker implementation; uploads are stored but no OCR/parsing pipeline exists.
87
94
- Offline queue can replay POSTs without deduplication beyond backend idempotency keys; ensure idempotency keys are supplied for settlements/payments when adding clients.
88
95
- Expo SDK 54 with React Native 0.81/React 19 stack may emit peer warnings; verify compatibility before release builds.
89
96
- CI configuration for lint/test/e2e is referenced but not included in the repo snapshot.
97
+
- Socket.IO client token is fetched from /api/auth/token; confirm refresh/token lifecycle in production deployments.
90
98
91
99
## Next Steps
92
100
1. Decide on in-app payment path: surface Stripe PaymentIntent client flow or keep UPI-only and disable PaymentIntent endpoint if unused.
93
-
2. Implement receipt-processing worker (OCR or at least validation) for queued jobs; expose receipt retrieval in UI.
94
-
3.Build authenticated web dashboard (groups/expenses/settlements) reusing shared-types + backend APIs.
0 commit comments