Overview
ServiceHub is a customer-facing companion app for an ERP platform. The ERP serves the staff who run a business; ServiceHub serves that business's clients, giving them direct access to the services they have bought and the invoices they owe. We designed and built it as a product in its own right, intended to sit beside the core ERP, reuse its data and look like part of the same family. It is a Flutter app for iOS and Android with a Node.js API and a MySQL database.
The Challenge
A client emails for last month's invoice, phones to ask what a service includes, or wants to know whether a job has started. Each request is small, but together they drain support and accounts staff, while the answers already exist in the ERP. The ERP itself is designed for trained operators, and handing clients a stripped-down copy would confuse them. The app needed to answer common questions in a couple of taps and feel like a natural extension of the vendor's brand.
Who Uses It and How
The primary user is a client contact: an owner, office manager or accounts clerk at a customer company. They see active services and recent activity, then open invoices to check an amount, due date or status before forwarding details to their finance team.
Behind them, support and accounts staff field fewer routine requests. ERP administrators decide which clients get access and what each can see, which matters when one client company has several contacts.
Our Approach
We listed the questions clients ask most often and made each a screen that answers it quickly: self-service first, everything else later. Since customers meet the app before any training, we added a short onboarding flow. The ERP's colours, typography and components carry into mobile, and labels use the customer's vocabulary instead of internal terms.
What We Built
The onboarding sequence introduces the main capabilities. After sign-in, the home screen summarises active services and recent activity. The services section lists what the client has, with a detail page for each. The invoices section shows past and current invoices, each with a detail view so amounts and status can be checked without contacting anyone.
Architecture and Data
The app reads from a Node.js API, which sits in front of a MySQL store whose structure mirrors the ERP's clients, services and invoices. Access checks happen on the server: every request is tied to an authenticated client and can only return that client's records. Data flows one way for viewing, so the ERP remains the system of record. If the network fails, cached last-known data is shown and marked as such.
Security, Privacy and Quality
Invoices reveal pricing, contract terms and business relationships, so access control is the central security concern. We use authenticated sessions with expiry, server-side checks on every record, and careful handling of tokens on the device. Client data is personal and commercial, so retention and consent follow the vendor's existing policies and applicable data-protection law. Testing starts with permission boundaries, ensuring one client can never retrieve another's records, then API and screen tests on both platforms.
Technology
Flutter provides one codebase for iOS and Android with consistent rendering, which matters when matching an existing design system. Node.js is the API layer, keeping business rules and access checks off the client. MySQL is a natural fit for the relational structure of clients, services and invoices.
Outcome
ServiceHub gives an ERP platform's clients a direct, always-available way to look up their services and invoices, and lets the support team hand routine questions back to systems that already hold the answers. Clients gain transparency and speed, and the vendor gains a branded touchpoint that extends the ERP beyond the back office.
Frequently asked questions
How much does it cost to build a customer portal app for an ERP?
It depends mostly on how much the ERP exposes through an API, how many self-service functions you want, how complex client permissions are, and whether you need both mobile and web. Integration work with the existing system is often the largest variable. A focused first release covering services and invoices is a sensible starting point.
Can a customer app connect to an existing ERP?
Usually yes, through the ERP's API or a controlled read layer over its database. The important design choice is keeping the ERP as the source of truth while the app reads from it securely.
Why build a mobile customer app instead of a web portal?
A mobile app suits clients who check things frequently, want notifications, or prefer a quick tap over logging in through a browser. A web portal reaches more devices with less to install. Many vendors eventually offer both, reusing the same API.
Highlights
- Clients check services and invoices without contacting support
- Branding and components aligned with the core ERP
- Onboarding flow that explains the app's value
- Server-side checks keep each client's data separate
- Single Flutter codebase for iOS and Android
- Node.js API over a MySQL data layer