Auvix Global Movers
DESIGN

Building Boundaries Into the Platform, Not the Interface

5 min read

A common weakness in software built to serve several different kinds of users is treating access as a matter of what the interface happens to show. A menu item is hidden from a role that shouldn't see it, a button is disabled, a page redirects if the wrong person lands on it. The underlying data and the request handling behind that screen often stay reachable regardless, because the restriction lives only in what gets rendered, not in what the system actually permits. It is a pattern that is easy to build quickly and easy to get wrong quietly: the interface can look correct for a long time before someone finds the gap between what it shows and what it actually allows.

AGM Cloud, the platform AUVIX built to run scheduling, time tracking, and client work for field-operations companies, was designed around a different premise. Who can see and do what is decided in two places that have to agree with each other, an interface built specifically for each role and a backend that enforces the same boundary independently, rather than one place the other is simply trusted to get right.

Four roles, four different surfaces

AGM Cloud does not put every kind of person in front of the same dashboard and hide the parts they shouldn't touch. Each role gets its own surface, sized to what that job actually needs. Someone doing the physical work gets a narrow, mobile-first screen built for clocking in, checking a schedule, and uploading a photo from a job site, nothing more. The people running the office, the admins and dispatchers, get a fuller workspace built around staffing, scheduling, and the client-facing tools their plan includes. A customer gets a much narrower, read-only window onto the jobs, photos, and invoices that belong to them specifically, and nothing that belongs to anyone else. AGM Cloud's own staff, the people who run the platform itself rather than any one customer's business, work from a fourth surface entirely, one built around managing tenants and watching the system as a whole.

Building four surfaces takes more work than building one and hiding parts of it. The alternative, a single interface that shows or hides elements based on a permission check, tends to accumulate exceptions over time: a field that should have stayed hidden for one role, a state where a hidden button is still technically reachable through a direct link, a screen designed for one audience that quietly grows features meant for another. Giving each role its own surface removes a category of that risk before it can start, because a worker's app was never built to display a client invoice in the first place. There is nothing to accidentally leave uncovered.

A boundary the interface cannot be talked out of

Separate surfaces solve part of the problem. They do not, by themselves, stop a request from reaching data it shouldn't, because a client-side view is only ever a suggestion to whatever is actually answering requests behind it. AGM Cloud keeps everything sensitive, money, identity, one company's records versus another's, behind a dedicated backend service, and that is where the real boundary lives. When that service looks up a company's jobs or invoices, the separation between one tenant and the next is built into how it goes looking for the data in the first place, not applied afterward by trimming a response down to size.

The same backend decides what a given plan or role is actually allowed to do, checked as part of handling the request itself rather than left to whatever the screen happens to display. Signing in is protected by a second verification step, and certain actions carry a further check of their own before they're allowed through, billing changes and data exports among them, so getting past the first login barrier is not enough on its own to reach the platform's most consequential operations.

Why both layers matter

Either layer alone would leave a real gap. Separate interfaces without server-side enforcement would still let a technically capable user reach whatever the backend was willing to answer, regardless of how the screen in front of them was arranged. Server-side enforcement without separate interfaces would still leave every role working from an interface cluttered with controls meant for someone else, correct in principle but confusing and error-prone in practice, and more likely to develop the kind of accidental exception that server-side rules alone cannot always anticipate. Doing both means the interface stays legible for the person actually using it, while the boundary that decides what any given request is allowed to touch does not depend on that interface having been built correctly in the first place. Each layer covers a failure mode the other one does not.

The same boundary, applied to automation

AGM Cloud also puts AI to work in a few places, a chat assistant on the site, help pricing a quote, a first pass at a contract or an email. Here too the platform does not simply trust the feature to behave. Nothing generated this way reaches a customer on its own. A person reviews it first, whether what's being reviewed is a suggested price, a line in a contract, or a message about to go out. It is the same pattern running through the rest of the platform's boundaries. Instead of trusting a feature to stay within its lane because it was built to, the system is arranged so the feature has no path to act past the point it was meant to stop, whatever it happens to produce.

That constraint is a design decision, not a limitation discovered after the fact. A drafting tool that a person has to approve fails safely: a bad suggestion gets rejected before it reaches a client. A tool trusted to act on its own does not get that checkpoint, which matters more as the suggestions involved touch things like what a customer is billed or what a contract commits a company to.

What this doesn't establish

None of this is a claim that AGM Cloud is immune to security failures; no system built by anyone can honestly claim that, and this description is not an audit. What it establishes is a specific, checkable architectural choice: separate surfaces per role, with the actual boundary enforced a second time, independently, inside the backend rather than left to what the interface happens to show. The public site, the product itself, and the systems running behind it can each be checked and found working right now, which is a statement about what has been built and deployed, not about how the business is doing. How many companies actually use it, what it earns, or how quickly either figure is moving are separate questions this article does not try to answer, since no such figures have been supplied.

A structural habit worth naming

None of the individual pieces described here are unusual on their own. Role-based interfaces and server-side authorization are both established practices. What is worth noticing is the discipline of applying both together rather than treating one as a substitute for the other, and of choosing, specifically, not to start from a single shared dashboard and bolt access rules onto it afterward. A platform serving several very different kinds of users, workers in the field, the admins scheduling them, the clients paying for the work, and the people operating the platform itself, has many more places for that kind of gap to open than a product built for a single audience. Closing it by construction, rather than by review, is a decision that shows up in the architecture long before it shows up in an incident report, which is exactly when it is worth making.