Developer

Contributing

Contributions are welcome. NodeDR POS is a focused tool — please keep PRs aligned with the offline-first single-shop POS mission.

Project scope

NodeDR POS is intentionally a focused, offline-first, single-shop POS. Please keep contributions aligned with this goal rather than expanding into multi-tenant, cloud, or SaaS territory. Good contributions include:

  • Bug fixes and stability improvements.
  • Hardware compatibility (new printer types, scanner edge cases).
  • Localization / currency support for additional countries.
  • UX improvements to the register, inventory, or reports flows.
  • Performance improvements (query optimization, startup time).
  • Documentation fixes and improvements.

Out-of-scope (please discuss in an issue first): cloud sync, multi-branch, SaaS billing, OAuth login, mobile native apps.

Reporting bugs

Open a GitHub issue with:

  • NodeDR POS version (the commit or git tag).
  • Your OS and Docker version (docker compose version).
  • Steps to reproduce.
  • What you expected vs. what happened.
  • Output of docker compose logs if there are backend errors.

Local development setup

You can run the backend and frontend without Docker for faster iteration:

# Terminal 1 — backend on :4000
cd backend
cp .env.example .env
npm install
npm run prisma:migrate:dev   # creates the SQLite database
npm run dev                  # starts Express with nodemon

# Terminal 2 — frontend on :1994
cd frontend
npm install
BACKEND_URL=http://localhost:4000 npm run dev

Open http://localhost:1994. The Next.js dev server proxies /api/* to BACKEND_URL. No API URL ever ends up in the browser bundle.

Database schema changes

The schema lives in backend/prisma/schema.prisma. After editing it:

cd backend
npm run prisma:migrate:dev -- --name your-migration-name

This creates a migration file under backend/prisma/migrations/. Commit both the schema and migration file.

Submitting a pull request

  1. Fork the repo and create a branch from main: git checkout -b fix/your-bug-name.
  2. Make your changes. Keep commits focused — one logical change per commit.
  3. Test manually: run the Docker stack and verify the change works end-to-end.
  4. Open a PR against main with a clear description of what changed and why.
  5. Reference the issue number in the PR description if applicable.

Code style

  • Backend — Node.js / Express / Prisma. Follow the existing style (no TypeScript on the backend — it uses .js with JSDoc types where needed).
  • Frontend — Next.js App Router, React, TypeScript, Tailwind CSS. Follow the existing component patterns. Server Components by default; use client only where interaction requires it.
  • No linter enforced yet — match the surrounding code style.

License

By contributing, you agree that your contributions will be licensed under the MIT License, the same license as the project.