Skip to content

VenomHare/powerpaywallet

Repository files navigation

PowerPay Wallet Monorepo

Node.js pnpm Turborepo TypeScript Next.js React Express Prisma Tailwind CSS Zod Redux Toolkit Vitest Docker PostgreSQL

PowerPay Wallet is a monorepo managed with Turborepo and pnpm. It contains a Next.js client, a mock bank, an Express webhook service, and shared packages for database, schemas, UI, store, and tooling.

Monorepo layout

  • apps/powerpayclient: Next.js app — the main wallet client (port 3001)
  • apps/mock-hdfc: Next.js app — mock bank simulator (port 3003)
  • apps/bank-webhook: Express service — receives bank webhooks (port 3002)
  • packages/db: Prisma database package
  • packages/schemas: Shared Zod schemas
  • packages/store: Shared Redux store
  • packages/ui: Shared React UI components
  • packages/eslint-config: Shared ESLint config
  • packages/typescript-config: Shared TS configs

Requirements

  • Node.js >= 18
  • pnpm (workspace managed)
  • Docker (for Postgres and optional app builds)

Quickstart

  1. Install dependencies
pnpm install
  1. Start Postgres (local via Docker)
docker compose up -d powerpay_postgres
  1. Set environment variables (see Environment) and run development servers
pnpm dev

Apps start on:

Common scripts

pnpm build        # build all apps/packages
pnpm dev          # run all dev servers (uncached, persistent)
pnpm lint         # lint across the repo
pnpm test         # run tests
pnpm check-types  # TypeScript checks
pnpm db:generate  # prisma generate in packages/db
pnpm db:migrate   # prisma migrate dev in packages/db
pnpm studio       # prisma studio

Environment

Global environment variables used across apps (configure at the root or per app as needed):

  • DATABASE_URL
  • CLIENT_JWT_SECRET
  • GOOGLE_CLIENT_ID
  • GOOGLE_CLIENT_SECRET
  • MERCHANT_AUTH_SECRET
  • BANK_HOSTNAME
  • SUCCESS_WEBHOOK_URL
  • FAILURE_WEBHOOK_URL
  • BANK_SECRET
  • WEBHOOK_SECRET
  • WEBHOOK_PORT (default 3002)
  • POWERPAY_MOCKBANK_TRANSFER_REQ
  • NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
  • NEXT_PUBLIC_CLOUDINARY_API_KEY
  • CLOUDINARY_API_SECRET
  • NEXTAUTH_URL

See each app/package README for exact usage.

Database

This repo includes a Postgres service via docker-compose.yaml.

docker compose up -d powerpay_postgres

# Then set DATABASE_URL, e.g.
export DATABASE_URL="postgresql://postgres:sacredpassword@localhost:5432/powerpay"

# Generate Prisma client
pnpm db:generate

# Run dev migrations
pnpm db:migrate

Docker

Each app has its own Dockerfile. Example builds:

# Client (port 3001)
docker build -t powerpayclient -f apps/powerpayclient/Dockerfile .
docker run --rm -p 3001:3001 --env-file .env.local powerpayclient

# Webhook (port 3002)
docker build -t bank-webhook -f apps/bank-webhook/Dockerfile .
docker run --rm -p 3002:3002 -e WEBHOOK_SECRET=... -e WEBHOOK_PORT=3002 -e DATABASE_URL=... bank-webhook

# Mock bank (port 3003)
docker build -t mock-hdfc -f apps/mock-hdfc/Dockerfile .
docker run --rm -p 3003:3003 --env-file .env.mock mock-hdfc

Tech

  • Next.js 15, React 19
  • Express
  • Prisma
  • Zod, Redux Toolkit
  • Tailwind CSS
  • Turborepo, pnpm

Contributing

  1. Create a feature branch
  2. Make changes with tests
  3. Run pnpm lint && pnpm test
  4. Open a pull request

License

MIT

About me

Maintained by Sarthak (@venomhare). I enjoy building full‑stack TypeScript apps and scalable monorepos. If you find this project helpful, please consider starring it and sharing feedback.

About

PowerPay is a full-stack wallet payments application. My first complete end-to-end project. Open to code reviews and feedback from experienced developers.

Topics

Resources

Stars

Watchers

Forks

Contributors