
JKP Vodovod i Kanalizacija Subotica is a production system developed for a public utility company, enabling digital interaction between citizens and utility services. The platform allows users to submit water meter readings, view billing information and report service issues through a mobile application. Payment functionality is fully implemented and currently in integration with the bank and payment processor ahead of launch.
In addition to the customer-facing mobile app, the system includes an internal web dashboard used by utility employees to manage user data, review submissions, handle fault reports and send notifications. I was the sole engineer across all three layers - mobile, web and backend.
The system is actively used in production and continues to evolve with new features.
The primary goal of the project was to replace manual and fragmented workflows with a unified digital system. Previously, water meter readings, billing and fault reporting relied heavily on in-person interactions and manual processes, including physical meter readings performed by employees.
The new system enables users to become self-readers by submitting meter readings through the mobile application, while utility employees manage and validate the data through internal tools.
The platform needed to support:
- Large numbers of users with varying levels of technical familiarity
- Monthly water meter reporting for all customers
- Secure handling of personal and financial data
- Reliable payment processing
- Internal administrative workflows for utility employees
Because the application is used by a public utility company, correctness, stability, security and strict data consistency with the official national database were critical requirements.
The main technical challenge of the project was implementing reliable payment processing across mobile and web platforms while keeping large volumes of data synchronized.
Key challenges included:
- Implementing secure payment flows suitable for a public-sector system
- Ensuring consistency between payment state, billing data and backend records
- Handling edge cases such as partial payments, failed transactions and retries
- Maintaining reliability under real-world usage conditions with large user bases and high data volume
Beyond payments, the system required careful handling of data synchronization between mobile clients, internal dashboards and backend services.
The platform consists of three main components:
Mobile Application
- Built with React Native
- Allows users to submit meter readings, pay bills, view billing history and report service issues
- Provides notifications related to billing updates, service interruptions and announcements
Internal Dashboard
- Built with Next.js
- Used by utility employees to manage users, meter readings, payments and fault reports
- Supports administrative workflows and operational data review
Backend Services
- Implemented using Node.js
- Data storage using MongoDB and an external Oracle database
- Responsible for business logic, payment handling, and data synchronization
This architecture provides a clear separation between user-facing functionality, internal administration and core business logic.
End users can:
- Submit water meter readings within defined monthly time windows
- View utility bills and billing history through the mobile application (in-app payments launching with bank integration)
- Report service issues and track their status
- Receive notifications related to billing, outages and service updates
Utility employees can:
- Review submitted readings and payments
- Manage customer data
- Process fault reports
- Send notifications to users through the system
Payment functionality was designed with a strong focus on reliability and data consistency: idempotent retry handling, graceful failure recovery, and cross-service consistency checks that keep payment state accurate across mobile clients, the internal dashboard and backend records. The payment flows are complete and undergoing integration with the bank and payment processor before public launch.
This project involved building and maintaining a large-scale production system used by a public utility company.
Key areas of experience include:
- Designing system architecture for a large, publicly used platform
- Leading technical discussions and communicating with stakeholders
- Implementing secure payment flows in mobile and web applications
- Designing systems that handle sensitive financial and personal data
- Working across mobile, web and backend layers within a single platform
- Maintaining and evolving a production system with real users
