Web and mobile (PWA) application for comparing product prices in Croatian stores, creating shopping lists, storing digital loyalty cards, and getting deal alerts with barcode scanning and AI suggestions.
Deployed and available on: disscount.me
Created by: Jakov Jakovac
Big thanks to Cijene API for providing access to their API for data about products and store chains :)
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
- Node.js 22.19.0+ (or latest LTS)
- pnpm (or npm/yarn)
- Java 21
- Maven 3.9+
- PostgreSQL (local or remote)
- Start the backend first (so API is available), then start the frontend.
- Database (PostgreSQL)
- Create database and user (example): sudo -u postgres psql -c "CREATE USER disccount WITH PASSWORD 'secret';" sudo -u postgres psql -c "CREATE DATABASE disccount OWNER disccount;"
- Adjust names/passwords as needed.
- Backend setup
- Copy/configure environment variables (backend expects):
- SPRING_DATASOURCE_URL (e.g. jdbc:postgresql://localhost:5432/disscount)
- SPRING_DATASOURCE_USERNAME
- SPRING_DATASOURCE_PASSWORD
- JWT_SECRET (strong random string)
- You can copy
.env.exampleto.envin the backend folder if present. - Build and run: cd backend mvn clean install mvn spring-boot:run
- The backend starts on port 8080 by default. Open API docs at: http://localhost:8080/api-docs
- Frontend setup
- Install and run: cd frontend pnpm install pnpm dev
- The frontend runs on port 3000 by default: http://localhost:3000
Contributions are welcome — whether it's a bug report, feature idea, documentation improvement or code change. Below are guidelines to make the process smooth for everyone.
- Search existing issues before opening a new one to avoid duplicates.
- Create a new issue and include:
- A clear title and description of the problem or idea.
- Steps to reproduce (for bugs) and expected vs actual behavior.
- Environment details (OS, Java/Maven/Node versions, Postgres version, browser) if relevant.
- Attach screenshots, logs or example requests/responses when helpful.
- Use labels if available (bug, enhancement, question, docs).
- Fork the repository and create a feature branch from
master:- Branch name example:
feat/add-search-by-barcodeorfix/shopping-list-null-pointer.
- Branch name example:
- Follow project coding style:
- Backend: Java 21, use existing package structure and formatting.
- Frontend: follow existing TypeScript/React patterns, use Prettier extension and linting rules.
- Run tests and build locally before creating a PR:
- Backend:
cd backend && mvn clean install(use-DskipTestsonly for quick local debugging). - Frontend:
cd frontend && pnpm install && pnpm dev(and run any available tests/lint scripts).
- Backend:
- Commit messages should be concise and descriptive. Reference related issue numbers in the PR or commit message.
- Open a pull request against the
masterbranch and include:- A summary of changes, why they were made, and any migration steps.
- Screenshots or short recordings for UI changes.
- Links to related issues.
- Code builds and tests pass locally.
- Linting/formatting applied.
- No sensitive data (passwords, secrets) included.
- Other improvements such as translations, UI & UX suggestions, icons and designs are welcome. Open issues or PRs just like for code.
- Propose larger ideas in an issue first so maintainers can provide feedback before an implementation.
- Maintainers will review PRs, request changes if necessary, and merge when ready.
- Code Rabbit (an automated code-review tool) runs on pull requests and posts suggestions. Please review and address its recommendations before requesting a final review; if you disagree with a suggestion, explain why in the PR comments. Maintainers may require resolving important warnings before merging.
- Please be responsive to review comments - small follow-ups are common.
- Be respectful and constructive. This project follows the license in the repository; if a Code of Conduct is added later, contributors must follow it.
Thank you for helping improve Disscount - every contribution helps!








