Wallet Watch is a modernized MERN + Plaid app for tracking spending, income, and cash flow. The architecture is still MERN (MongoDB, Express, React, Node.js), with updated tooling and hosting: Vite frontend on Vercel, Express API on Render, and MongoDB Atlas.
Live site (frontend): https://wallet-watch-seven.vercel.app/ Live API (backend): https://wallet-watch-t5cu.onrender.com Health check: https://wallet-watch-t5cu.onrender.com/api/health
backend/: Express + MongoDB API (auth, transactions, Plaid sync)frontend/: React (Vite) clientAGENTS.md: modernization handoff and phased upgrade plan
- Frontend hosting: Vercel (Hobby)
- Backend hosting: Render Web Service (free tier)
- Database: MongoDB Atlas
M0 - Frontend URL:
https://wallet-watch-seven.vercel.app - Backend URL:
https://wallet-watch-t5cu.onrender.com
- Node.js 18.x
- npm 9+
- MongoDB database (local or Atlas)
- Plaid sandbox credentials (optional unless testing bank-link flows)
Backend:
cp backend/.env.example backend/.envFill in backend/.env values before running the API.
Important for local CORS:
- Set
FRONTEND_ORIGIN=http://localhost:5173for Vite local dev.
Frontend:
cp frontend/.env.example frontend/.envSet VITE_API_BASE_URL to your backend origin (for local dev: http://localhost:4000).
cd backend && npm ci
cd ../frontend && npm ciBackend:
cd backend
npm run devFrontend:
cd frontend
npm run devThe Vite dev server runs on http://localhost:5173 by default.
Backend smoke tests cover:
- auth register/login
- transaction create/read/update/delete
- auth requirement on protected routes
Run:
cd backend
npm testBackend (Render):
PORT(set by Render automatically)MONGO_URI(Atlas connection string)SECRET(JWT signing secret)FRONTEND_ORIGIN(comma-separated allowed origins)RATE_LIMIT_WINDOW_MSRATE_LIMIT_MAXPLAID_CLIENT_IDPLAID_SECRETPLAID_ENV(sandboxorproduction)PLAID_PRODUCTSPLAID_COUNTRY_CODES
Frontend (Vercel):
VITE_API_BASE_URL=https://wallet-watch-t5cu.onrender.com
FRONTEND_ORIGIN should include each origin that must call the API, for example:
FRONTEND_ORIGIN=https://wallet-watch-seven.vercel.app,http://localhost:5173If you test from Vercel preview URLs, include the exact preview domain as well.
- Push backend changes to
master. - Confirm Render service root directory is
backend. - Confirm build/start commands:
- Build:
npm ci - Start:
npm start
- Build:
- Verify Render env vars are still present and correct.
- Open
https://wallet-watch-t5cu.onrender.com/api/healthand confirm{"status":"ok"}.
- Push frontend changes to
master. - Confirm Vercel project root directory is
frontend. - Confirm
VITE_API_BASE_URLpoints to Render backend. - Redeploy and confirm app loads at
https://wallet-watch-seven.vercel.app.
- Register/login.
- Create and delete a transaction.
- Open Income and Spending pages.
- Open Connect Bank page and verify link-token flow initializes.
- Verify browser devtools shows no CORS failures.
- In Render, redeploy the previous successful backend deploy from deployment history.
- In Vercel, promote/redeploy the previous successful frontend build.
- Keep
VITE_API_BASE_URLandFRONTEND_ORIGINaligned with the active frontend/backend pair. - Re-run the smoke test checklist above before declaring rollback complete.
- Verify Render
FRONTEND_ORIGINincludes the exact frontend origin (no trailing slash). - Include all required origins as comma-separated values, for example:
FRONTEND_ORIGIN=https://wallet-watch-seven.vercel.app,http://localhost:5173- Redeploy Render after env var changes.
- Your Atlas hostname in
MONGO_URIis invalid/expired or has a typo. - Re-copy the URI from Atlas Connect > Drivers.
- Confirm Atlas DB user, password, and network access list.
- Confirm Vercel
VITE_API_BASE_URLpoints to the active Render URL. - Confirm Render backend is healthy:
GET /api/health.
The screenshots below were captured from the live deployment after seeding realistic sample data (multiple income entries and a larger set of expenses) via Playwright automation.
Track modernization progress and implementation history in AGENTS.md.





