V8 Central — Product & Technical Spec
  1. Docs
  2. Frontend spec (from backend doc)
  3. FE: Integrations (Phase 5)

#FE: Integrations (from backend Phase 5)

Frontend spec for backend Phase 5: Integrations — requirements complete 2026-10-03, not built. V8 requirement It covers three things that users think of as "connected accounts".

IntegrationWhere it lives (backend decision "Option B", 2026-10-03)What that means for the frontend
Cloud server providers — used to create serversCentral — backend says organization level, the frontend doc says account level (D-27)A normal Central screen: list, connect, disconnect. Central stores the credentials encrypted
Git accounts — used to deploy applicationsEach server's OSS panelThe form is in Central, but the token is passed through to the chosen servers. Central keeps only a note (name, provider, which servers). OSS never gives a saved secret back
Backup storage — used for backupsEach server's OSS panelSame as Git

i18n namespaces: integrations.providers.*, integrations.git.*, integrations.storage.*, integrations.create.*, integrations.errors.*. Permissions: organization-level for the provider screens; the OSS git and storage permissions for the per-server parts (see Roles & permissions).

#A. Cloud server providers (Central) — /:locale/integrations

#FeatureScreen / controlRules from backend docFrontend notes
5.1ListPage: one card or row per connected provider accountAccounts belong to the organizationShow provider logo, account label, "Used by N servers". Never show the secret — provider + label only
5.2Connect"Connect provider" → picker → one short formGive the account a name, then paste the token. Vultr, DigitalOcean, Linode, Hetzner: an API token (no OAuth login). AWS Lightsail: access key + secret key. Checked on save, stored encrypted. More than one account per provider is allowed V8 requirement 2026-10-03One flow for every provider — a modal with a name field and a token field (two for Lightsail), never a redirect. The name is what the user picks from later, so it is required and shown everywhere. Several accounts per provider means the list groups by provider and the picker shows names, not just logos. Help text: where to create the token. Saving shows "Checking…", then the provider's own error if the token is wrong. Write-only secret: after saving show only a masked hint
5.3Edit"Edit" on the account → same modalChange the name or paste a new token V8 requirement 2026-10-03One modal for both: the name pre-filled, the token field empty with "leave blank to keep the current token". This replaces the separate "paste new token" dialog
5.4Invalid tokenStatus on the account → EditNo automatic renewal (API tokens, not OAuth). If the provider rejects the token, the account shows "Needs new token" → Edit V8 requirement 2026-10-03Show "Needs new token" clearly in the list, with the Edit button right there, and block creating servers with that account, with the reason
5.5DisconnectConfirm dialog, or a blocking messageCentral first checks whether any server was created with this account. If yes, disconnect is blocked and the warning lists those servers ("remove these servers first"). Disconnect is allowed only when no server uses it V8 requirement 2026-10-03Show the blocked state before the click: the Disconnect button is disabled with "Used by N servers", and the dialog lists them with links. This replaces the earlier rule that servers keep running after disconnect

#B. Create a server on a cloud provider — wizard + live progress (moved to the Servers phase)

The backend's draft describes one flow (steps 1–7). The frontend part is the wizard and the progress screen.

Wizard fields (all values come from the API — never typed into the frontend): provider account · region · size · Ubuntu version (22.04 / 24.04 / 26.04 — whatever OSS supports) · stack (Nginx + PHP · Apache + PHP · Nginx + Node (MERN) · OpenLiteSpeed + PHP) · server name · optional SSH key · root password for Linode (same as V7). Review step before the final button.

Progress screen — the backend's statuses are the only states the frontend shows:

  • Poll the server record while the status is Creating or Installing OSS; stop when it is Ready or Failed.
  • Ready → go to the server page. Failed → show the reason the backend gives, plus Retry and Delete the server at the provider (the second is destructive: confirm dialog naming the server).
  • Installing OSS can take a while (the backend's limit is around 30 minutes), so the screen must be safe to leave and come back to: show the same progress from the server record, and tell the user they can leave.
  • The IP appears only after the provider reports it (step 4) — show "waiting for the IP" instead of an empty field.
  • Two more things the backend parked with this flow: V7 servers on Ubuntu 20.04 can't run OSS (22.04+ only), and Hostinger servers come with Apache/MySQL pre-installed (V7 removed them first) — both belong to the Servers phase, not here.

#C. Git accounts & backup storage (stored on the servers)

Two ideas run through this whole section:

  1. The account is the thing the user manages, and a server is just somewhere it is installed. So the list groups by account ("used on: Server 1, Server 2"), not by server.
  2. Central keeps only a note — name, provider and which servers have it. No secret, ever. So the UI never offers "view token", and every action that needs the secret asks for it again.
#FeatureScreen / controlRulesFrontend notes
5.6Connect on a serverServer → Git (or Storage) → Connect, as a modal in CentralGive the account a name, then paste the token / keys V8 requirement 2026-10-03. The form is in Central because OSS never returns a saved secretAfter saving, the field is gone for good — show only the account name afterwards, with "Replace token" instead of an edit field
5.7Also add to other serversCheckbox list inside the same modal: other servers / all serversOnly servers of the organization the user may manageDefault to just this server. Show how many servers are selected. Servers the user can't manage are not listed at all
5.8Result per serverResult list per serverDone / offline → Retry — for connect, update and remove alike V8 requirement 2026-10-03. The token is saved in OSS, not in CentralOne result table reused by all three actions: server · result · Retry. Partial success is normal, so never show a single "saved" toast for a multi-server action — including removals
5.9TestTest button per serverChecks that the account works on that server V8 requirement 2026-10-03Per-server test, not a Central-side test: show the result inline on the row (works / the error) and when it was last tested. This is what the old "no test from Central" note was waiting for
5.10Update everywhere"Replace token" modalThe user enters the new token once; Central updates all servers that have this accountReuse the per-server result list from 5.8
5.11RemoveConfirm dialog with a choiceThis server only or all serversTwo clearly-labelled buttons, not a dropdown; the "all servers" option lists the servers
5.12New server laterPrompt on a newly-ready serverCentral offers "Connect your accounts here too?" — the user pastes the token again (Central kept no secret)Explain why it's asked again, in one line, or users will think it's a bug
5.14Organization → Integrations pageOne overview pageCloud providers plus all Git and storage accounts, each with "Used on: Server 1, Server 2". Actions: add to more servers, update on all, remove from allThis is the main Integrations page: section A on top (Central-stored), then Git and Storage grouped by account, not by server
5.13Accounts already on the serverSame list, marked as foundIf the OSS panel already has Git or storage accounts, Central reads them from OSS and shows them. The same account on several servers is shown once — even if each server holds a different token ("GitHub jayshree — used on: Server 1, Server 2") V8 requirement 2026-10-03. To add it to more servers, the user pastes the token onceTwo cases in one list: accounts Central set up, and accounts it found on a panel. Mark the found ones ("found on this server") and never pretend Central holds their secret. Grouping is by account, so the same name on two servers must not appear twice. Because the tokens behind one row can differ, the row must not imply one shared secret — see D-30 about what "update everywhere" then does. Matching (provider + account name) comes from the API; the frontend only displays what it is given
5.16Activity logNothing to build here — the entries show up on the organization Activity logEvery integration action is recorded with who, which account, which servers and when: connect, edit, add to other servers, update everywhere, remove, disconnect. Tokens and keys are never logged V8 requirement 2026-10-03The frontend only renders these entries (see Audit log), but it must match the backend's wording: an entry can cover several servers, so show the server list inside one entry instead of one entry per server. Never display a secret even if one ever appeared in a payload
5.15Providers offeredPickersGit: GitHub, GitLab, Bitbucket (access token). Storage: S3 (Amazon S3, Wasabi, custom S3), Google Drive (service account), FTP, SFTPA self-hosted GitLab needs a URL field (V7 had it; the backend's short list no longer says so — worth confirming). S3-compatible needs endpoint + bucket + region. Field sets differ per provider, so drive them from one small config

#Not in this phase (kept as our record)

  • Regions & sizes of a provider (read live when creating a server) → Servers phase (moved out 2026-10-03).
  • Repos & branches (account → repository → branch pickers, read from the server's OSS) → Applications phase (moved out 2026-10-03). The dependent-dropdown spec moves with it.
  • Creating a server on a cloud provider and the automatic OSS install → Servers phase (moved out on 2026-10-03).
  • Connecting an existing / own server (paste the install command) → Servers phase.
  • Server list, server details and server actions → Servers phase.

#Who can do it

Connect, edit, test and remove follow the organization roles from Phase 4 (by Pair 1) V8 requirement 2026-10-03. So every button on these screens is permission-driven: hide what the role can't do, and never show an action that will come back as "not allowed". The exact permission names are still unpublished — build the checks from the API's catalog.

#Existing users

  • Vultr, Hetzner and AWS Lightsail accounts move from V7 as they are — they were already key-based. V8 requirement 2026-10-03
  • DigitalOcean and Linode used a provider login in V7, so after the move the user pastes an API token once. This answers D-29: those accounts arrive needing a token, which is exactly the "Needs new token" state (5.4) — so the first login must show them clearly, with Edit, and explain why in one line.
  • V7's Git and Google Drive connections used one-click login; in V8 they become a pasted token / service account stored in OSS — accepted (Q9, 2026-10-03). How they move is decided later, with the migration phase (Q10), so the screens must cope with "no accounts yet" for a migrated user and say why.
  • Dropbox is not supported in Phase 5 (Q11, skipped for now). V7 users who back up to Dropbox need a plain message and another destination in the storage picker.
  • (The Ubuntu 20.04 limit moved to the Servers phase with the create-server flow.)

#Open points the frontend is waiting on

IDQuestionWhy the frontend cares
Q9One-click login → token / service account — answered 2026-10-03: accepted. Git uses an access token or app password, Google Drive a service account, as in OSSNo OAuth button anywhere in the integration screens. Every connect form is a token form
Q10Moving V7 Git / storage connections — parked: decided later, with the migration phaseMigrated users may arrive with nothing connected, so the empty state must explain that they need to reconnect
Q11Dropbox — skipped for now (2026-10-03): not supported in Phase 5Not in the storage picker. V7 Dropbox users need a message and an alternative
Q12Hostinger — answered 2026-10-03: no. It was never a connectable provider in V7 (only IP detection when adding an existing server, then removing its pre-installed Apache/MySQL). It belongs to the Servers phaseNothing to add to the provider picker
Q13OSS registration is open after an automatic install until someone registersA security hole in the create-server flow, not a screen — now a Servers phase point. If it stays, the progress screen should not show the panel URL before Central has claimed the admin account
Q14Should Central rotate the Central token after the first successful call (it sits in the provider's start-up script)?Possibly a "key rotated" state on the server record — now a Servers phase point. No screen yet
D-27Are integrations account level (Bhavik) or organization level (backend Phase 5)?Decides who owns a provider account and whose servers appear in the "add to other servers" list. The frontend keeps account level for now
ServerAvatar V8 Central · prepared by central-app-2 (Pair 2 frontend) for Bhavik Jethwa · nothing in this spec is implemented yet · Built 2026-10-03 12:35 UTC