Customer guide
For people who own a hosting account (a "customer account") and manage its websites, databases and DNS. Your provider or reseller created the account and gave you the first login.
Status of this guide (2026-10-14). It describes the web console as it is built in the code today. Every page
named here exists and is covered by tests, but the console has not yet been walked through in a browser on the
development cluster, and several features are switched off unless your provider turned them on (each one is
named where it matters). Where something is not built, it says PLANNED. Exact status per feature:
FEATURE_MATRIX.md.
The menu on the left shows only what your login may use. A customer usually sees: Dashboard, Websites, Databases, DNS zones, Usage, Billing, Database insight, Logs & monitoring, Alerts, Audit log, Webhooks and Your account.
1. Signing in
- Open the address your provider gave you. The sign-in page may show your provider's name and colours.
- Enter Username and Password, then Sign in.
- If two-factor sign-in is on for your login, the page asks for an Authentication code: type the code from your authenticator app, or one of your recovery codes.
First sign-in. A password someone else set for you is temporary. The console opens Your account and shows "You must set a new password before continuing"; nothing else works until you change it.
Sessions end after 30 minutes without activity or 12 hours in total. Sign out ends the session.
After a few failed attempts (five within 15 minutes for one username from one address, or five wrong two-factor codes) sign-in is refused with "Wait 15 minutes and try again".
Change your password
Your account > Change password: current password, new password twice (at least 12 characters), Change password. Your other sessions are signed out.
Turn on two-factor sign-in
- Your account > Two-factor sign-in > Set up two-factor sign-in.
- The page shows a Key and a Setup link. Add the key to any authenticator app that makes time-based codes (or open the setup link on the phone).
- Enter Your password and the Code from the app, then Turn on.
- The page now shows ten recovery codes. Write them down or store them in a password manager. They are shown only this once. Each works one time in place of an app code, for example when you lose the phone.
Turning it on signs out your other sessions.
Turn it off: Your account > Two-factor sign-in > Turn off, enter your password and a code from the app (or a recovery code), then Turn off two-factor sign-in.
Lost the phone and the recovery codes? Ask the administrator of the level above you (your reseller or provider). They can remove two-factor sign-in from your login; you then sign in with the password alone and set it up again.
Required two-factor sign-in. Your provider may require two-factor sign-in for your role. Then, after signing in, you can only open Your account, set up two-factor sign-in, change your password, list or revoke API tokens and sign out. The account page says "Your role requires two-factor sign-in" until it is set up.
2. Dashboard
Dashboard shows your limits and what you use, your websites and databases (with usage and backup status), the account's resource use, your billing plan (if billing is used), items that need attention (failed or suspended) and recent activity.
3. Websites
Add a website
- Websites > Add a website.
- Domain: for example
example.com. A domain already used by any other website on the platform is refused. - PHP version: for example
8.3. Leave it empty for a static site (HTML files only). - Optional: tick Also create a DNS zone for this domain, with default records pointing at this platform (see section 5).
- Add.
The panel first checks your quota and the quotas of every level above you. The message then says one of: - "name is deployed." The site is running. - "... was reserved but deployment failed: reason". The site stays in the list as failed and still counts against your quota until you delete it. - "... is reserved against your quota but not deployed: no engine is connected yet." The panel you use has no hosting engine connected; tell your provider.
Each site has its own page: open its name in Websites. Tabs at the top: Overview, Domains, TLS, PHP settings, Logs, Files and Backups (Logs and Files appear only for logins that may change the site; Backups only for logins that may read backups).
Delete a website
Websites, in the site's row: Delete > Delete name. The quota is released. Before removing it, the node archives the site; only the platform administrator can bring a deleted site back from that archive (Deployment & recovery > Deleted-site archives), so ask your provider. A site restored that way serves again, but it is not listed under your account again and charges no quota (putting a restored site back into the account's records is not built yet). Take a backup first if you may need the site again (section 6). Databases are deleted the same way from the Databases list.
Domains and aliases
Domains tab of the site.
- The primary domain cannot be removed.
- Add an alias: type the domain (for example www.example.com) and Add alias. Each alias uses one
domain of your account's domain quota; a site can have a limited number of aliases (shown on the page).
- Remove… next to an alias asks you to confirm on a second step. The web server stops answering for it and
the quota is released. DNS records are not changed.
- Point each domain's DNS at the platform yourself (or use a DNS zone here, section 5).
- If the site uses a provided certificate, the certificate must also name the new alias, otherwise the change
is refused and the site stays as it was.
PHP version
Overview tab > PHP version. Type the version (for example 8.3, or empty for static files) and
Review PHP change. Nothing changes until you confirm on the next step with Change to .... The node
rewrites the site's PHP-FPM pool and web server configuration and reloads them; requests in flight may see an
error during the reload. A version not installed on the server is refused and the site stays as it was.
PHP settings
PHP settings tab. Shows the version, the versions installed on the server, and four settings with their allowed range and the value in force: - Memory limit (MB; cannot exceed the site's memory limit) - Largest upload (MB) - Largest form post (MB; not below the largest upload; 0 means the same as the largest upload) - Longest request (seconds)
There is also Show PHP errors in pages (display_errors), for debugging only. Empty or 0 returns a setting to
the default. Save PHP settings rewrites the site's PHP-FPM pool, tests it and restarts it; if the server
refuses, nothing changes and the reason is shown. Two further settings (allow_url_fopen and extra disabled
functions) are for platform operators only.
HTTPS (TLS)
TLS tab. The top card shows the mode, whether the site serves HTTPS, and the certificate (names, issuer, validity, days left, any website domain the certificate does not cover).
TLS mode > choose a mode > Set TLS mode: - none: HTTP only. - self_signed: a certificate the node makes itself. For tests only; browsers show a warning. It replaces an installed certificate. - provided: your own certificate, installed below. - acme: only listed if your provider offers it. The node gets a certificate from a certificate authority automatically and renews it. Every domain of the site must already point at the node, and port 80 must be reachable from the internet. The page line "Automatic certificates (acme)" says whether it is available.
Install a certificate (sets mode provided): 1. Certificate chain: PEM text, the site's certificate first, then the intermediates. 2. Private key: PEM, unencrypted. 3. Install certificate.
The node checks that the key matches, the certificate is valid now and names every domain of the site. Otherwise nothing is written and the reason is shown. The private key is never shown again, logged or audited; after a refusal, paste it again.
Logs
Logs tab (only for logins that may change the site, because logs can contain secrets). Choose the Log: web server access, web server errors, PHP errors or PHP-FPM, and the number of Lines (1 to 1000), then Show. At most the last 256 KiB of a log is read.
The menu item Logs & monitoring is a separate overview page that is not built yet; use the site's Logs tab.
File manager
Files tab (only for logins that may change the site).
- Browse the document root; open a directory by its name, .. goes up.
- Open a text file to edit it, then Save. Files are saved all at once and keep their permissions. Text only,
at most 1 MiB.
- Create: New file or New directory, type a name, Create file / Create directory.
- Delete… asks you to confirm. A directory must be empty; a symbolic link is removed without touching its
target.
- Everything is done as the website's own user. Larger or binary files go over SFTP: on the website's SFTP
tab add your public SSH key (ed25519, ECDSA, or RSA of at least 3072 bits; options such as command= are
refused) and see the host, port and username to connect with. End SFTP sessions logs every client out.
If the tab says SFTP is not enabled on this node, ask your provider.
Scheduled jobs (cron)
Overview tab > Scheduled jobs (cron). Each row: Job id, Schedule, Command, and Remove.
Schedules are five-field cron (*/5 * * * *) or @daily. Existing jobs are shown in the form the node runs
them (systemd calendar form); that form is accepted back unchanged. Save schedule replaces the whole set,
and nothing is applied unless every row is valid. Empty rows are ignored; save with every row empty or removed
to clear the schedule.
Suspension
Overview tab > Suspension. Suspend… > Suspend name: the web server answers 403, and PHP and cron stop. Files and databases are kept. Resume name undoes it.
If your whole account is suspended by your provider or reseller, the Websites page says "This account is suspended; nothing new can be created", and your logins stop working.
Install WordPress
Overview tab > WordPress (logins that may change the site; the site must be deployed, not suspended and
run PHP).
1. Database: one of the account's MariaDB databases, or Create a new database and type its name in
New database name (it counts against your database quota). WordPress cannot use PostgreSQL.
2. Version: latest, or a release number such as 6.6.2.
3. Tick Install over an existing index.php or wp-config.php only to replace what the site already has.
4. Install WordPress. The node downloads WordPress from wordpress.org, checks it against the published
checksum, unpacks it into the site's document root as the site's own user and writes wp-config.php with a
new database user (..._wp_ and six characters, read and write).
The answer shows the database user, its password, host, port and database once: the password is written into
wp-config.php and the panel keeps no copy. Then open the site in a browser to finish WordPress's own setup
(site title, administrator). The website is linked to the database (section 4).
Messages: "The website already has an index.php or wp-config.php..." (tick the overwrite box or remove the files first); "WordPress could not be downloaded from wordpress.org" or "did not match its published checksum" (nothing was installed; the new database user is removed again, and a database created for the install is kept and named, so delete it if you do not need it). For a site on another node the card says installing WordPress from the panel is not available yet.
Other site information
The Overview tab also shows: the site's state, aliases, PHP version, the node it runs on, the configuration status (whether the node's configuration matches the panel's record), recent changes and their state, open alerts, resource usage and its history, and recent activity from the audit log.
4. Databases and database users
Add a database
- Databases > Add a database.
- Name: lower-case letters, digits and
_, starting with a letter (at most 48 characters). - Engine: MariaDB or PostgreSQL. Your provider may have connected only one of them; the other is refused.
- Add. The quota check and messages are the same as for websites.
The database page shows the engine, the name on the server and the endpoint (host and port) to connect to.
Database users
On the database page, Users: - Add a user: Name and Access (read and write, or read only), then Add user. The page shows the login, the password, host, port and database once. Copy the password then; it cannot be shown again. - New password replaces a user's password and shows the new one once. - Delete > Delete name removes the user.
Websites using a database
On the database page, Websites using this database lists the websites linked to it. Website > Link
website links one of the account's deployed websites; Unlink removes a link (also for a website deleted
while it was linked, shown by its id). A link tells database intelligence which website is behind a query; it
grants no access. A linked database cannot be deleted until it is unlinked. If the database service cannot report
the links the card says so. The API calls are PUT/DELETE /v1/sites/{site}/databases/{db} and
GET /v1/databases/{id}/sites.
Database intelligence
The database page can show the database intelligence report (top statements, connections, who caused the work) when your provider has connected that service, and the measured history of connections and statements. The Database insight menu page (an overview of all databases) is not built yet.
5. DNS zones and records
DNS zones are used only if your provider runs a DNS server for the platform. If it does not, zones and records are still stored in the panel but nobody on the internet is answered from them. Each zone page shows its state.
Add a zone
DNS zones > Add a DNS zone: Domain, optionally keep Add default records ticked (the domain and
www point at the platform's web servers), then Add zone. Zones count against your zone quota. A domain
another account already uses is refused. You can also create a zone from a website's Overview tab (DNS
card) or when adding the website.
For the zone to be answered on the internet, your domain registrar must list the platform's name servers, which are shown on the zone page under Name servers.
Records
On the zone page, Records:
- Add a record: Name (relative to the zone: @ is the domain itself, www is www.example.com),
Type, TTL (60 to 604800 seconds; empty for 3600) and Content, then Add record.
- Types: A, AAAA, CNAME, MX, TXT, SRV, CAA, NS. Content examples: MX 10 mail.example.com; SRV name
_service._proto, content priority, weight, port and host; CAA 0 issue "letsencrypt.org"; TXT the text
itself. Host names a record points at are always full names.
- Records of the same name and type share one TTL.
- Edit and Delete next to each record.
- The SOA record and the zone's own NS records are set by the platform.
If a zone shows failed or pending, Send the zone again retries sending it to the DNS server.
Delete this zone: type the zone name to confirm, then Delete permanently. It is removed from the DNS server first, then from the panel, and its quota is released.
6. Backups and restore
Open a site or database, then the Backups tab (or Backups in the Websites/Databases list).
Important: restore points are stored on the same node as the site or database. They protect against mistakes, deletions and damage, but not against losing the node or the provider. They are not off-site copies. The page says so at the top.
Back up now and check a backup
- Back up now creates a restore point.
- Check hash re-reads it and compares its checksum.
- Verify by test restore restores it into a scratch location. A restore point counts as proven only after this succeeded; until then it is shown as "Not verified".
Schedule
Schedule card: Run every N hours (1 to 168) or daily at a time (UTC, for example 02:30), and Keep
(1 to 90 restore points), then Save schedule for this website/database. Account-wide schedule backs up
every site and database of the account that has no schedule of its own. Without a schedule nothing is backed
up automatically.
Restore
- In the restore point's row: Restore….
- Choose: - Restore as a new website/database: the live one is not touched. Give a New domain (site) or New database name. For a site you can tick Also apply the restore point's cron jobs to the copy. - Replace name in place: the current state is backed up first.
- Preview restore. Nothing has changed yet. The preview shows files added, removed and changed, database tables and rows, settings that change, free disk space, and any conflict that blocks the restore.
- Confirm: - As new: Create name and restore into it. - In place: type the site or database name and Restore name. The preview is valid for a limited time (shown next to the button).
Last operation and Job history show what ran and whether it succeeded. A restored copy is a real site or database and counts against your quota.
Websites on another node
A website on another node (its page names the node) is backed up and restored on that node, where its restore points also stay (same node as the website: still not off-site). The page works the same, with three differences: Back up now, the checks and restores are queued for that node and finish there (the page shows the operation until it finished; reload to see the result); the list and the preview are read from that node when you open them, so they are missing (with the reason) while the node is offline; and a website restored as new is created on the same node. Database backups are unchanged: databases are on the panel's database server. (Built and tested in the sandbox; no website runs on another node on the current servers yet.)
7. Usage and alerts
Usage shows your quota use (websites, databases, domains), what the kernel reports for the account (CPU time, memory, processes, disk I/O), history charts, and each website's use.
Disk space and number of files (inodes) are enforced soft on the current servers: the panel measures your use (shown on Usage and the website page, with restore points counted) and, at the limit, refuses its own file-manager writes, uploads, imports and new websites with a message naming the usage, but writes by your PHP code, SFTP and cron are not stopped (hard enforcement on the server is PLANNED). Mailboxes are not shown ("Mailboxes are not shown: email is a later module"): email hosting is PLANNED (not available).
A website on another node is measured on that node: its page shows that node's counters and disk use, and the account's Usage lists each node and adds them up. The disk and file limits count your files and restore points on every node (as each node last reported them, at most an hour old). History charts are still from the panel's own hosting node only.
Alerts lists alerts on your websites, databases and account (when your provider has metrics turned on). Filter by Severity and On; tabs Open, Resolved, All. Open an alert for its history and chart. On an open alert, Acknowledge or Resolve, with an optional one-line Note. Alert rules are set by the platform administrator.
8. Billing statements (read-only)
Billing appears when your provider bills through the panel. It is read-only for customers: - Plan: who bills you, the plan, base price, price per account and the per-node rates. - Estimate for the current month so far (not a forecast). - Ended months that are not yet closed. - Closed statements: open one for its lines; download CSV or JSON of a statement or of all your statements.
The panel produces statements only. It does not take payments or add taxes; invoices come from your provider's billing system. A statement page note "Usage is not being metered" means the provider has metering switched off.
9. API tokens
Tokens let a script call the API (/v1/...) without a browser. Your account > API tokens > Create a
token:
- Label: what it is for.
- Lifetime: hours; 0 means it never expires.
- Access: Read and change, or Read only (a read-only token can only make GET requests).
- Scope: an org ID to limit the token to that part of the tree; empty means everything you can reach.
- Create token. The token is shown once; copy it then.
Send it as Authorization: Bearer <token>. A token acts as you, with your role, but cannot manage tokens or
change your password. Revoke stops it at once. The list shows each token's status, expiry and last use.
10. Webhooks
Webhooks send signed event messages to your own HTTPS address, for example to update another system. They exist only if your provider turned them on; otherwise the page says "Webhooks are not enabled on this panel".
Add an endpoint (Webhooks page):
1. URL: must be https:// and resolve to a public address.
2. Description (optional).
3. Events: tick the types you want; none ticked means every type. Types: site.created, site.changed,
site.suspended, site.resumed, site.deleted, database.created, database.changed, database.deleted,
operation.succeeded, operation.failed, alert.fired, alert.resolved, user.created,
user.suspended, user.resumed, dns.zone.created, dns.zone.changed, dns.zone.deleted.
4. Add endpoint. The next page shows the signing secret once; store it in the receiver.
On the endpoint's page:
- Send a test event.
- Delivery log: the newest 50 attempts with status code and time taken. Failed deliveries are retried with
growing pauses (30 s up to 1 h) and given up 24 hours after the event. One endpoint receives its events one at
a time, in order.
- Settings: change URL, description, events, or untick Enabled to pause (events wait in the queue).
- Replace the signing secret: the old one stops working at once; the new one is shown once.
- Delete: type delete to confirm. Queued events and the log are removed.
How to check the signature: API_SPEC.md, section Webhooks (headers X-Panel-Webhook-*, HMAC-SHA256 over the
timestamp and the body).
11. Audit log
Audit log lists every change and every refused request in your account, newest first. A green line says the log's hash chain verifies; a red one means a record was changed or removed: tell your provider.
12. Not available yet (PLANNED)
Email (mailboxes, forwarders), shell (SSH) access, Git deployment, WordPress install for a site on another node, other one-click apps, hard disk and inode quota enforcement, off-site backups, the Database insight and Logs & monitoring overview pages, and failover of a site to another node.