Web Portals

Web portals from One Stop Software give your customers, partners, or employees a secure place to do business with you online – check status, submit requests, access documents, self-serve. They are where a lot of phone calls and emails go to be replaced by something people can do themselves at 11 p.m.

Portals That Reduce Work, Not Add It

A portal only pays off if it connects to your real systems. A customer portal that cannot show a live order status, or an employee portal that cannot actually submit the request, just becomes another thing to maintain. We build portals wired into your CRM, ERP, and operational systems so the self-service is real.

  • Customer portals – orders, status, documents, support, and account self-service
  • Partner and vendor portals – shared data, submissions, and workflows across organizations
  • Employee portals – requests, approvals, documents, and internal tools in one place
  • Authentication, roles, and security appropriate to who is logging in
  • Integration with the business systems that make the portal useful

Tell us who the portal serves and what they need to do – and which systems it must connect to. We will scope it around the work it removes.

What Is a Business Web Portal?

A portal gives an external group — customers, partners, suppliers, contractors, or staff in the field — controlled access to information and transactions that live in your internal systems, without giving them access to the systems themselves.

The value is usually the phone calls and emails it removes. If a meaningful part of someone’s week is answering “where is my order?”, “can you resend that invoice?” or “what is the status of my ticket?”, those are portal features with a measurable payback.

When Does a Portal Pay for Itself?

  • The same questions arrive repeatedly and the answers already exist in a system.
  • People email documents back and forth that could simply be available on demand.
  • Customers or partners want to self-serve and currently cannot, so they call instead.
  • Field staff need information on site and currently phone the office to get it.
  • Onboarding a new partner involves sending them a spreadsheet nobody trusts.

It pays for itself less clearly when the audience is small, when the interactions genuinely need a conversation, or when the underlying data is not yet reliable enough to expose — a portal makes existing data quality problems visible to customers, which is a real risk worth naming before building.

What Should Go in the First Release?

Less than you think. The pattern that works is to ship the two or three things people ask for most, get real usage, then extend. Portals scoped as a complete replacement for every interaction tend to launch late and land badly.

Start with read-only self-service — status, documents, history. Add transactions once people are actually using it, one at a time.

The Questions That Decide the Architecture

  • Who logs in, and how? Customer accounts you manage, or federated access through their own identity provider. This is the single biggest architectural decision.
  • What can each user see? Multi-tenant portals must guarantee that one customer never sees another’s data. This deserves explicit testing, not assumption.
  • Live data or a copy? Reading directly from the ERP is simplest and couples portal availability to that system; a synchronised copy is more work and more resilient.
  • Mobile reality. Field users on poor connections need a portal that works on a phone, not a desktop site that technically loads.
  • Who supports it? A portal is a production system with external users. Support expectations should be agreed before launch, not after the first outage.

Portal Security Is Not Optional

A portal is, by definition, an internet-facing door into your business data. Authentication, per-tenant authorization, session handling, rate limiting and logging all need to be right — and the failure mode is a customer seeing another customer’s data, which is a disclosure incident rather than a bug.

We build with these controls from the start. Where the data warrants independent review, our sister practice at BulletproofSoft can test it before you expose it.

Related: CRM and ERP integration · business process automation · digital transformation.

The Mapping Between a Login and a Customer Record

The portal has its own idea of who someone is, and the CRM or ERP has another one. Between those two sits a mapping, and it is the piece most often left implicit until it breaks. A person is not the same thing as an account: one buyer may need to see three ship-to locations, a contractor may work for several of your customers at once, and a distributor's staff change without anyone telling you. Deriving the link on the fly from an email domain works right up until a customer uses a shared mailbox, brings in a consultant, or gets acquired, so the mapping is better stored explicitly, with an owner and a record of who changed it.

The other half is what ends the link. An account that was correct when it was created does not stay correct: people leave the customer's company, a partner agreement ends, a project finishes. Nothing inside your systems observes any of that on its own, so the portal needs a deliberate answer. These are decisions, and they cost less to make before the first account exists than after the portal has real users.

  • Whether one login maps to one account, or to several accounts with a selector after sign-in and a clear indication of which one is currently in view.
  • What happens when a person moves from one customer to another: the old link has to be severed without deleting the history of what they did under it.
  • How much an administrator on the customer's side is allowed to do, whether that is creating logins for their own colleagues only, or also changing what those logins can see.
  • What an account does on its own after long disuse, since dormant accounts are the ones nobody remembers to remove.
  • Whether part of the audience arrives through their own identity provider while the rest need accounts you issue, because a portal serving both is running two account lifecycles side by side.

Reading From Systems Built for Internal Users

A portal asks questions of systems that were sized for internal staff doing internal volumes, and two costs show up immediately. The first is rate limiting: CRM and ERP APIs commonly meter requests per user or per organization over a rolling window and return HTTP 429 with a Retry-After header once you pass it, which a client is expected to honor rather than retry straight away. The second is round trips. A page showing one customer's order history can quietly become dozens of calls if every line, contact and document reference is fetched separately, so a bulk or query endpoint that returns a page of records in a single call is worth the less tidy code it produces.

The third cost is vocabulary, and it is the one that outlives the build. An order status inside an ERP may carry a dozen values, several of which describe things a customer should never be shown, such as a credit hold or a margin flag. Collapsing that list into a small set of external states is a business decision rather than a development one, and it has to be written down somewhere durable, because the internal list changes whenever the process changes and the portal will go on translating the retired values until somebody updates the map. The practical questions are these.

  • Whether the source system exposes a documented API at all, or whether the only access is a read replica, a scheduled export, or a database view that someone has to keep maintaining.
  • Whether calls run under one service account or under the end user's own identity in the source system, since that decides where authorization is genuinely enforced.
  • What the portal does when a rate limit or a timeout is hit: a queued retry, a cached last known value with its age shown, or an honest message.
  • Which internal status values map to which customer-visible states, and who owns that map when the process is revised.
  • Whether writes carry an idempotency key, so that a customer who taps submit twice on a slow phone connection does not create two requests.

Documents Are the Part That Looks Simple

Every portal specification has a documents area, and it usually gets estimated as though it were a list. The list is the easy half. The files themselves live in other places: the ERP generates invoices and statements, a document management system holds signed agreements, and a shared drive holds everything nobody ever classified. Each of those has a different notion of which document belongs to which customer, and the shared drive normally has none at all, which means the association has to be created before anything can be exposed. That work is data preparation, not development, and it belongs to whoever knows the filing convention.

Delivery is the other half. Routing every large file through the application server makes the portal slower and its memory use unpredictable; where the storage supports it, the application checks the request and then issues a short-lived signed URL scoped to that single object, so the transfer happens directly from storage. A signed URL is a bearer credential for as long as it is valid, which is why the expiry belongs in minutes rather than days and why such links should never be emailed or logged. Both halves, where the files live and how they are handed over, reduce to a short list of decisions.

  • Where each class of document actually lives today, and whether a usable link to a customer record already exists in that system.
  • Whether documents are generated on demand from the source system or copied into portal storage, which decides what a customer sees after a document is corrected and reissued.
  • How large files are delivered, through the application or by a signed URL with a short expiry, and what the expiry should be.
  • Whether a document ever has to be withdrawn after posting, and what a customer who already downloaded it is told.
  • Whether uploads are accepted, which brings file type and size limits, malware scanning before anything is stored, and a decision about who gets notified that something arrived.

Where the Authorization Check Actually Lives

A portal's authorization is only as strong as its least careful query. If the filter that restricts results to the signed-in user's organization is written by hand in each endpoint, every new endpoint is a fresh opportunity to omit it, and the omissions tend to appear in whatever was added after launch: an export, a printable view, a lookup that fills a dropdown. Pushing the constraint down into the data access layer changes the failure mode. The tenant identifier comes from the session, never from the request, and a query written without it fails instead of quietly returning everything.

Identifiers and logs are the supporting half. Sequential integers in URLs invite a curious user to change one and see what comes back; a correct check makes that harmless, but opaque identifiers remove the temptation and make the attempt stand out. Recording which identity read which record, with a timestamp, is what allows a suspected disclosure to be answered with evidence rather than with reasoning about the code. The checks below are the ones worth automating so they run on every change.

  • Request each endpoint using one user's session together with another user's record identifiers, and assert that the response is a refusal rather than data.
  • Run the same test against exports, printable views, and every API the front end calls, since those are routinely added after the first security pass.
  • Verify that role limits hold on writes as well as reads, because read filtering is usually the only thing anyone tests.
  • Check what an expired or revoked session does in the middle of a workflow, and that no half-submitted transaction is left behind.
  • Confirm that a request for a record belonging to someone else returns the same response as a request for a record that does not exist, so the portal does not confirm what it refuses to show.

When Something You Already Own Could Be the Portal

Not every self-service requirement needs a portal built for it. A handful of customers who each want one report do not need a login; they need the report scheduled and delivered. A document exchanged twice a year does not justify an account and a password reset process. And many CRM and ERP products ship a customer or partner portal module already, so when the requirement sits close to what that module does out of the box, switching it on is the cheaper answer.

Those modules get abandoned for reasons of fit rather than capability: the fields the customer needs are custom ones the module does not surface, the screens cannot be reworded away from the vendor's own vocabulary, or the licensing scales with the number of external users. Custom development earns its place when the portal has to span more than one back office system, when the workflow is specific to how you operate rather than to how the vendor assumed you would, or when the external audience grows large enough that per user licensing becomes the dominant cost. Before deciding either way, put the module you already own to these questions.

  • Does it read the custom fields you actually use, or only the vendor's standard data model?
  • How are external users licensed, and does that price scale with the number of customers you intend to invite?
  • Can it present data from a second system, or does everything it shows have to live in that product already?
  • Can its screens be reworded enough that customers are not required to learn the vendor's terminology?
  • What happens to it when the host product is upgraded, and do the changes you made to it survive that?

Frequently Asked Questions

Is a portal the same thing as a website with a login?

No. A website publishes the same pages to every visitor, and a login on a website usually gates content that was already written and stored as content. A portal produces a different answer for each person who signs in, because the answer is assembled from records at the moment of the request. Extranet was the older word for the same idea, back when it described a network arrangement rather than an application; the distinction that still matters is whether the software gates content or reads records.

What does a portal run on, and what does it need to reach?

It is a web application with a database of its own, and it runs where your other web applications run: a cloud platform, a virtual machine, or a container host. That database holds accounts, sessions, entitlements, preferences and audit logs even when every business record is read live from somewhere else. The constraint that decides hosting is reachability. If the ERP or CRM sits on-premises and the portal is hosted externally, there has to be a deliberate path between them, whether an outbound integration initiated from the internal side, a site-to-site VPN or private link, or a replicated copy placed in the hosted environment. Exposing the back office system itself to the internet to make a portal work is the arrangement to avoid, since it puts the whole system where only the portal belongs.

What has to already exist before this work can start?

Access to the system of record in a form that can be read programmatically: API credentials with a documented scope, or a replica or scheduled export where the product has no API. A non-production copy to build and test against, so that testing does not create real orders, real shipments, or real email to real customers. And test data covering the roles you intend to serve, including at least two distinct customer accounts, because the checks that matter most cannot be run against a single one.

How does the integration itself proceed?

It starts with one record read end to end: a real order or ticket pulled from the source system, under a real login, rendered on a page, before any screens are designed around it. That single path exercises the credential model, the field mapping, and the link between the portal login and the customer record, and those are the three things that usually turn out to differ from what the documentation implied. Broadening from a working path is largely repetition of a pattern that has already been proved. Writing back into the source system is a separate exercise, because the receiving system enforces validation rules the portal cannot see, and its error responses have to be turned into something a customer can act on rather than passed through as codes.

Can customers sign in with their own company credentials?

Yes, where their identity provider supports OIDC or SAML 2.0, which the mainstream ones do. The practical gain is offboarding: when they disable an employee in their own directory, that person loses portal access immediately without anyone having to tell you. The cost is a configuration exercise per customer organization, coordinated with someone technical on their side, plus agreement on which claim in the token identifies the organization the user belongs to. Federation settles who the person is, not what they are allowed to see, so the entitlement rules stay on your side either way.

What happens when the back office system is down or being upgraded?

For anything the portal writes, a durable queue is the difference between a failed submission and a delayed one: accept the request, acknowledge it with a state the customer can see, and drain the queue when the system returns. For reads, showing the last known value with its age attached is usually better than an error, provided nothing time-sensitive or financial is presented as current. Upgrades deserve separate handling, because vendors rename fields, retire endpoints, and change response behavior between releases, so the portal's integrations should be run against the vendor's non-production release before the upgrade reaches production rather than diagnosed afterward.

Who inside our company has to be involved?

Two roles, and they are rarely the same person. One administers the source system and can grant access, create test data, and say what a field actually contains as opposed to what it is called. The other comes from the business and can decide what an external user is permitted to see and do, since that is a policy question rather than a technical one. The second role matters more than it looks, because the rules governing what a customer may do cannot be recovered from the data alone.