Nectere Array
Array deploys and hosts the other Nectere apps. Install it once on a Docker machine, then deploy apps from its menu. Each deployed app becomes a tile on one dashboard and opens under Array's address with a single sign-in. Admins decide who sees each tile.
sudo bash install_necterearray.sh --port 443 --dir /opt/necterearray01The dashboard
The admin dashboard after sign-in, one tile per deployed app. The mock is live: open the menu, flip a tile with the round arrow, try Organize, or Open a running tile.
- 1Menu. Dashboard, Deploy, Settings, Logs, Users.
- 2Machine load. CPU, memory and disk on the Array host. Hover for exact figures.
- 3Session. Signed-in user, Array version and Log out.
- 4Organize / Refresh. Organize reorders and renames tiles (admins only). Refresh reloads them.
- 5Tile. App colour stripe, tile name, app and product line, optional description.
- 6Status. Running, Stopped or Error, or a progress bar during deploy and update.
- 7Open / Flip. Open works only while the app is running. The round arrow flips to the management side.
02Install
Array is the only Nectere app installed by hand. Everything else is deployed from it. Requirements are a Linux, macOS or Windows machine with Docker (the Linux installer adds Docker if it's missing) and a GitHub token that can read the Nectere images.
| Machine | Run |
|---|---|
| Linux | sudo bash install_necterearray.sh |
| macOS | bash install_necterearray_mac.sh |
| Windows | .\install_necterearray_win.ps1 |
Array listens on 443 unless you pass --port 8443 (-Port 8443 on Windows). The installer prints the address to open when it finishes.
[OK] Docker is available [OK] Generated .env with credential key [OK] Shared network nectere-net ready [INFO] Pulling ghcr.io/pipefl/necterearray:latest... [INFO] Starting Nectere Array... [OK] Nectere Array is running! [INFO] Open https://localhost:443 to complete setup
First ten minutes
- Open the printed address and accept the certificate warning.
- Create the admin account.
- In Menu › Settings, paste the GitHub token and Save. Docker engine should read Connected.
- Pick an app under Menu › Deploy.
- Add people in Menu › Users and grant tiles with each tile's Access button.
Upgrading Array
Rerun the installer. It pulls the latest Array and restarts it. Users, tiles and settings are kept, and deployed apps stay up during the restart.
03Sign-in and first run
On first visit Array shows a setup form. Whoever completes it becomes the first admin.
Application Tile Dashboard
Welcome! Create your admin account to get started.
| Message | Where it comes from |
|---|---|
| Please fill in all fields. | Setup form, empty field. |
| Passwords do not match. | Setup form, confirmation mismatch. |
| Password must be at least 8 characters. | Setup form and Add User. |
| Please enter username and password. | Sign-in form, empty field. |
| Invalid credentials | Wrong username or password. Counts toward lockout. |
| Too many failed sign-in attempts. Try again in 5 minute(s). | Five failures for this username in 15 minutes. Wait 5 minutes. |
| Connection error. Please try again. | Array didn't respond. Check that it's running. |
Sessions last 8 hours.
04Top bar
Host meters
Each segment is 10%. A red disk meter means free up space before deploying more apps. The sliders below drive the demo meters.
| Usage | Segment colour | Tooltip example |
|---|---|---|
| 0–59% | green | CPU 23% |
| 60–84% | amber | Memory 64% (20.4 / 31.3 GB) |
| 85–100% | red | Disk 88% (219.7 / 249.6 GB) |
The meters are hidden on narrow screens.
Session controls
Log out also ends the session in every app opened through Array. When the 8 hours expire Array returns to the sign-in page.
05Menu
Deploy opens a flyout of every app in the catalog. Hover for a description; click to open the Deploy window with that app selected. Click outside the menu or press Esc to close it.
| Item | Goes to | Who sees it |
|---|---|---|
| Dashboard | Your tiles | Everyone |
| Deploy › | App list, then the Deploy window | Admins |
| Settings | Docker status and your GitHub token | Admins |
| Logs | Today's Array activity | Admins |
| Users | Add, promote and delete users | Admins |
06Tiles
One tile per deployed instance. The front opens the app; the back manages it, and only admins can flip. Clicking the body of a running tile is the same as Open.
Front and back
| Part | What it shows | Example |
|---|---|---|
| Accent stripe | App colour. | #3b82f6 |
| Tile name | Set at deploy, changed in Organize. | Anvil — Prod |
| App | Nectere app. | Nectere Anvil |
| Product | What the app does. | Terraform Deployment Manager |
| Blurb | Optional description. | Azure landing zones and lab VMs |
| Back actions | Admin actions. | Logs, .env, State, Access, Update, Destroy |
Statuses
| Status | Looks like | Open button |
|---|---|---|
| running | Running | Primary, enabled |
| stopped | Stopped | Disabled |
| deploying | Progress bar + percent (tooltip Deploying… 45%) | Disabled |
| updating | Progress bar + percent (tooltip Updating… 72%) | Disabled |
| error (couldn't start; check Logs) | Error | Disabled |
| missing (removed outside Array) | Missing | Disabled |
Staying current
Tiles refresh themselves every 30 seconds, faster during a deploy or update, so other admins' changes appear without a reload. Flipped tiles stay flipped.
Empty states
Your instances
No Instances Yet
Open the menu and pick Deploy to spin up your first Nectere instance.
Your instances
No Instances Yet
You have not been given access to any tiles yet. Ask an Array admin.
Toasts
Bottom right, gone after 3 seconds. Green edge for success, red for errors.
07Organize mode
Organize turns every tile face up with a dashed outline and a pencil. Drag tiles to reorder. The pencil renames: Enter or click away saves, Esc cancels. Done saves the order.
- Renaming changes the label only. The app, its data and its address are untouched.
- Names max out at 60 characters. A blank name is ignored.
- Background refreshes don't move tiles while organizing.
- With no tiles, Organize shows
No tiles to organize yet.
08Deploying an app
Pick an app from Menu › Deploy. On Deploy the window closes and a new tile shows progress until it reads Running. A first deploy of an app can take a minute or two to download.
Deploy Instance
Deploy Instance
| Field | Required | Notes |
|---|---|---|
| Application | Yes | Prefilled from the Deploy flyout. |
| Tile Name | Yes | Shown on the tile, e.g. Anvil — Prod. |
| Description | No | Shown under the product line. |
| Authentication | Yes | Can't be changed after deploy. See below. |
Progress bar
| Bar | What's happening |
|---|---|
| 5–45% | Downloading. Slowest on a first deploy. |
| 55–78% | Setting up storage. |
| 88% | Starting. |
| 100% | Running. If the app isn't up within about 30 seconds the tile shows Error. |
Which sign-in to pick
09Opening an app
Open shows the app over the dashboard under a bar with the app colour and tile name. Open in tab moves it to its own tab. ✕ Close or Esc returns to the tiles. The browser address stays Array's, so there are no extra bookmarks or certificates.
When access is refused
Shown when the session has expired or an admin removed you from the tile. Reopen the tile from the dashboard.
10Managing an instance
Each button on the back of a tile opens a window. Clicking the backdrop doesn't close it; use the window's own buttons. Esc currently closes every window, the menu and the viewer at once, including an unsaved .env editor.
Logs
The app's recent output, newest at the bottom. Check here first when a tile shows Error.
Anvil — Prod — container logs
Nectere Anvil starting... ANVIL [2026-10-26T09:41:12.9041127+00:00] [INFO] [DEPLOY] Plan started for deployment 5d21c8e0a4f7 ANVIL [2026-10-26T09:41:39.1203315+00:00] [INFO] [RUN] Run 20261026094112c41e (plan) on deployment 5d21c8e0a4f7 succeeded ANVIL [2026-10-26T09:42:00.0185502+00:00] [INFO] [DRIFT] Scheduled drift check started for 'aks-csi-test' (94c0e1b27d3a) ANVIL [2026-10-26T09:42:31.6640918+00:00] [WARN] [DRIFT] 'aks-csi-test' is skewed - live infrastructure differs from the configuration
.env
App settings, one NAME=value per line. Save & recreate restarts the app for a few seconds with the new values. Data is kept.
Anvil — Prod — .env
These are the container's environment variables. Editing a*_CREDENTIAL_KEY line makes the app unable to read its existing data, so change it only if you know what you're doing. Saving recreates the container (volumes and data are kept).
POWERSHELL_TELEMETRY_OPTOUT=1 ANVIL_CREDENTIAL_KEY=q3V9rYxk1Jm0w+T5bH8dLpE2sZcN7aF4uG6iK0oR1vM= ANVIL_MAX_CONCURRENT_RUNS=3 ARRAY_AUTH_MODE=1 ARRAY_AUTH_KEY=Hk2pQ8vXz4nB7mW1yR5tL0cJ9sF3dA6gE2uI8oN4bV0=
- Lines starting with
#are ignored. - Leave
ARRAY_AUTH_MODEandARRAY_AUTH_KEYalone. Array sets them. - Changing a
*_CREDENTIAL_KEYon an app with data makes that data unreadable. - Saving asks for confirmation.
State
Start, Stop and Restart. Only the actions valid for the current status are enabled.
Anvil — Prod — State
Aperture — Win fleet — State
Access
Lists plain users only, since admins see every tile. Changes apply immediately, including to anyone who has the app open.
Anvil — Prod — Access
Admins can open every tile. Tick the users who should also see this one.
Atlas — Lab — Access
Admins can open every tile. Tick the users who should also see this one.
Update
Checks for a newer published version. Nothing downloads until you press the button. Tiles update independently, so two Anvil tiles can run different versions.
Anvil — Prod — Update
| Result line | When | Button |
|---|---|---|
| Update available | Newer version published. | Primary Update now |
| No update available — up to date | Already current. | Secondary Re-pull anyway |
| Could not reach GHCR — check the token in Settings | Check failed, usually the GitHub token. | Secondary Force re-pull |
All three buttons update the app. The tile shows Updating with a progress bar, then Running. Settings, users and data are kept.
Destroy
Removes the app and its tile. Data is kept unless Delete data directory too is ticked, which is permanent.
Destroy Instance
Stop and remove "Anvil — Prod" (nectereanvil-3f9a1c07).
11Settings
Docker engine should read Connected. While it reads Unreachable, nothing can be deployed or managed. GHCR Registry holds the GitHub token used to download apps; deploys fail until one is saved.
- Use a classic GitHub token with
read:packages. - A saved token is never displayed. The label reads
(token saved)or(none saved), and saving a blank box keeps the current one. - An expired token makes deploys and updates fail with
unauthorized.
12Logs
Today's Array activity: sign-ins, deploy steps, updates, settings changes and refused tile access. Auto-refresh follows it live.
Format is [time] [level] [area] what happened. ERROR lines usually match a failed deploy or update.
13Users
Two roles. Admins do everything. Users see and open only the tiles they've been granted. Plain users get Promote and Delete; admins get Delete only.
Add User
Add User
Permissions
| Action | Admin | User |
|---|---|---|
| See tiles | All | Granted tiles only |
| Open a tile, Open in tab | ✓ | ✓ (their tiles) |
| Deploy, rename, reorder | ✓ | ✕ |
| Start, stop, restart, update, destroy | ✓ | ✕ |
| .env editor, Access lists | ✓ | ✕ |
| Settings, Logs, Users panels | ✓ | ✕ |
Deleting a user removes them from every tile. You can't delete your own account.
14Apps you can deploy
The app colour is used for the tile stripe, hover outline and viewer dot.
| App | What it's for |
|---|---|
| Nectere Anvil | Terraform packages, variables, plans, applies, drift checks |
| Nectere Atlas | Multi-host Ansible: inventories, playbooks, runs, terminals |
| Nectere Arch | Container deployments to Azure |
| Nectere Aperture | Remote PowerShell against Windows machines |
| Nectere Amphora | Object store to object store migration |
| Nectere Andante | Step-sequenced automation |
An app can be deployed more than once, for example a prod Anvil and a lab Anvil. Each instance has separate data and updates, and separate users when it uses Application sign-in.
15Things to know
- Prefer Array sign-on. Application sign-in means a separate login per tile, and two tiles of the same app can sign each other out in one browser.
- Destroy keeps data by default. Delete data directory too can't be undone.
- Don't touch
*_CREDENTIAL_KEY. Changing it locks the app out of its existing data. - Update is per tile. Check each instance separately.
- Access changes are immediate. Plain users never see tiles they aren't on, and removal cuts off an open session too.
- Esc closes everything, unsaved .env edits included.
- Array admin is effectively server admin. It can start, stop, change and remove every app on the machine.
16Troubleshooting
| You see | Do this |
|---|---|
Deploy fails with unauthorized | Token missing, expired or lacking read:packages. Save a new one in Settings and redeploy. |
Deploy fails with not found | The app image isn't published yet. Ask the image maintainer. |
| Settings shows Unreachable | Array can't reach Docker. Rerun the installer. |
| Tile shows Error | Flip the tile and check Logs. A bad .env change is the usual cause; revert it and save. |
| Tile shows Missing | The app was removed outside Array. Destroy the tile and redeploy. |
The viewer shows Proxy error | App stopped or still starting. Check State, wait a few seconds, reopen. |
The viewer says Access expired | Close the viewer and press Open again. |
| Update says up to date but you expected a new version | It isn't published yet. Check later. |
| Locked out after typing a wrong password | Wait 5 minutes. |