Panel klienta WaveHost
The client panel for a hosting provider: ordering and managing VPS and dedicated servers, a wallet, invoices and a referral program. A modern stack with secure authentication and a safe handshake to the game panel. The client runs everything from one place.
A hosting provider's client panel: ordering and managing VPS and dedicated servers, a wallet, invoices and a referral program. The most interesting part is the safe link to a separate game panel, so a client does not log in twice and accounts connect without the risk of attaching the wrong one - through a signed HMAC handshake.
Overview
WaveHost is a hosting provider that needed one place for its clients: you order a server, pay, refer others, all from the same panel. That part alone is craft work we had done before. The real challenge sat next to it: the provider already ran a separate game panel with its own accounts, and those two worlds had to be joined so the client felt one system, not two.
The simplest thing would be to make people log in twice and link an account manually by email. But that is a straight path to mistakes, and with account linking a mistake has a concrete price: attach someone else's account and you have a problem an ordinary sorry cannot undo. We wanted a link you can trust. This case study is mostly about that link.
Everything from one place
The foundation is the day-to-day the client comes back to. Ordering and managing servers covers both VPS and dedicated machines, with their state and config visible in one view. The client does not jump between tools to check what they have and what shape it is in.
Around that lives the rest of the service. The wallet and invoices sit side by side, so the balance, payments and documents form one whole, not three separate tabs to reconcile yourself. The referral program adds a referral link and a clear commission flow, wired into the same wallet. All of it stands on a modern stack with secure authentication, because this is a panel that holds money and server access.
One login instead of two
The core of the project is joining the client panel with the existing game panel. From the client's side the problem is trivial and annoying at once: two accounts, two logins, two worlds they do not care about, because they just want to manage everything in one place. From the engineering side this is exactly the part where it is easy to do something dangerous.
The naive solution goes: let the client type their game-panel login and we attach it. The trouble is that anyone could then type someone else's login and attach themselves to an account that is not theirs. Manual linking by email is slow and just as leaky. We needed a way for one system to prove the client's identity to the other, without trusting anything that passes through the browser.
A signed handshake
The solution is an HMAC-based handshake. When the client clicks "link account" in the WaveHost panel, the panel generates a link carrying the user id, a timestamp and a signature computed with a secret only the two panels know. The game panel receives that link, recomputes the signature with its own secret and compares. If it matches, it knows the request really came from the WaveHost panel and not from someone who forged the URL.
What matters is what the browser never sees. The secret does not leave the servers, so even someone who observes or intercepts the link cannot compute a valid signature for another id. The timestamp closes the second hole: the link is short-lived, and the game panel simply rejects an expired token, so a sniffed link cannot be used later.
The account-linking URL carries an HMAC signature and a timestamp. The game panel rejects a token that is expired or has a bad signature, so an intercepted or forged link will not attach the wrong account. The secret is known only to the two sides, never to the browser, which is why convenience cannot be traded for a hole.
Why a forged link will not work
It is worth walking through the scenarios, because only then is it clear the convenience really does not cost security. Someone swaps the id in the link for another one, to attach themselves to an account that is not theirs. The signature stops matching, because it was computed for a different id, and a new one cannot be generated without the secret. The game panel rejects the request.
Second scenario: someone intercepts one client's valid link and tries to use it. Here the timestamp saves the day. The link lives briefly, so intercepted after the fact it is already worthless, and the game panel treats an expired token exactly like a forged one. In both cases the boundary is checked on the server side, at the entry, not in the interface, which can always be bypassed.
Before and after joining the panels
| Aspect | Separate panels | After the HMAC link |
|---|---|---|
| Logins | two | one |
| Account linking | manual by email | one click |
| Risk of attaching the wrong one | real | rejected by the signature |
| Secret in the browser | - | never |
What the finished product actually delivers
The client runs everything from one place. They order servers, manage VPS and dedicated machines, pay, refer others and watch the wallet without jumping between tools. The link to the game panel works on one click instead of an email exchange, so the provider's two systems feel like one to the client.
Underneath, that convenience is not paid for with security, because the handshake is short-lived and signed and the secret never reaches the browser. A forged or intercepted link will not attach the wrong account, because the server guards the boundary at the entry, not the interface. This is exactly the kind of solution the project was about: simple for the client, hard where it has to be hard.
More projects
More work from the same category - see how we tackle similar challenges.
Have a similar project?
Get in touch - a quote is free and comes back within an hour.




