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 logsif 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 devOpen 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-nameThis creates a migration file under backend/prisma/migrations/. Commit both the schema and migration file.
Submitting a pull request
- Fork the repo and create a branch from
main:git checkout -b fix/your-bug-name. - Make your changes. Keep commits focused — one logical change per commit.
- Test manually: run the Docker stack and verify the change works end-to-end.
- Open a PR against
mainwith a clear description of what changed and why. - 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
.jswith JSDoc types where needed). - Frontend — Next.js App Router, React, TypeScript, Tailwind CSS. Follow the existing component patterns. Server Components by default;
use clientonly 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.