Features
Learn how features work in SPCBot and how to configure them for your team.
Visual Guide
Drop real screenshots into the paths below. This grid is rendered by src/app/docs/components/image-placeholder.tsx.
Dashboard Overview
Main dashboard with stats and recent deployments
public/docs/images/dashboard-overview.pngServer List
Connected servers and their health status
public/docs/images/servers-list.pngDeployment View
Live deployment logs and progress
public/docs/images/deployment-view.pngUpdate changed files only without full container rebuild
What It Does
- Git Pull: Fast update of changed files only
- Update Modules: Reload changed Odoo modules
- Fast Restart: Restart Odoo without container rebuild
When to Use
- Small code changes
- Module updates
- Configuration changes
- NOT for database schema changes
API Endpoint
POST /organizations/:slug/projects/:projectId/environments/:id/quick-update
Clone Environment
Duplicate an entire environment including database, filestore, and configuration.
What Gets Cloned
- Database (full pg_dump / pg_restore)
- Filestore (Odoo attachments)
- Configuration (non-secret env vars)
- Git repository and branch
- Secrets (must be reconfigured)
Clone Options
| Option | Description |
|---|---|
| Name | New environment name |
| Server | Target server (can be different from source) |
| Branch | Override git branch (optional) |
API Endpoint
POST /organizations/:slug/projects/:projectId/environments/:id/clone
Body: {
"name": "staging-copy",
"serverId": "optional-server-id",
"branch": "optional-branch"
}
Auto Deploy
Automatically deploy when code is pushed to GitHub.
How It Works
- Push code to GitHub repository
- GitHub sends webhook to SPCBot
- SPCBot queues deployment job
- DeploymentWorker processes the job
- Instance updated automatically
Configuration
- Enable Auto Deploy toggle per environment
- Only triggers when environment is
RUNNING - Set webhook URL in GitHub repository settings
Auto-deploy to production should be used with caution. Consider requiring manual approval for production environments.
Auto Restart
Keep an instance running on its own — SPCBot brings it back automatically instead of waiting for someone to notice it's down.
How It Works
A background check runs every 5 minutes per instance. If it finds the instance down while it should be up, it runs a recovery step on the server and confirms the instance responds again before marking it healthy.
When It Restarts
- The instance crashed
- The host server rebooted (instance containers come back with it)
- The instance was stopped externally (e.g. directly on the server via SSH, outside SPCBot)
If you stop the instance from the SPCBot dashboard, Auto Restart will not bring it back. It only recovers from unexpected downtime.
Configuration
- Enabled by default for every instance
- Toggle it per environment in Settings → Auto Restart
- Turning it off applies immediately to the running instance; turning it back on does too
Maintenance Page
When an instance's Odoo backend is briefly unreachable — a deploy restart, a crash, a module upgrade in progress — visitors see a branded "Service Unavailable" page instead of a raw server error.
How It Works
Fully passive: your server's reverse proxy shows the page automatically whenever it can't reach Odoo, and switches straight back to your instance the moment Odoo answers again — no setup, no toggle, nothing to configure per environment. Visitors can play a small game while they wait and are redirected automatically the instant your instance is back — mid-game if one's in progress, immediately otherwise.
The page is served with a "temporary, try again shortly" response, so browsers and crawlers treat the outage as transient rather than a broken page.
Configuration
- Enabled automatically on every instance — no setup required
- Existing instances pick it up on their next deploy
Scheduled Backups
Every production instance backs itself up automatically, to one or more places you choose, and keeps only what your retention rules say to keep.
How It Works
- The schedule, storage destinations, and retention are configured once per organization, under Settings → Backups
- Coverage is a simple on/off switch per instance: production instances default to on, other environment types default to off — flip either from Settings → Backups or right from that instance's own Backups tab
- Choose one or more storage targets: the instance's own server, another of your own registered servers, Cloudflare R2, any S3-compatible bucket, or Google Cloud Storage
- Set your own retention: how many daily, weekly, and monthly backups to keep — older ones are pruned automatically
- Manual backups, imported dumps, and automatic pre-restore snapshots are never auto-deleted, regardless of retention settings
- A single Backups page lists every backup across your whole organization, with search, sort, and pagination — status, size, destination, and one-click download
Restoring Safely
Restore is the most destructive action in SPCBot, so every restore runs through the same guardrails, in order:
- The backup is verified (checksum + structural check) before anything on the target is touched
- An automatic snapshot of the target is taken first — there is no way to skip this step
- You must type RESTORE to confirm, and the dialog names the exact target instance
- A backup from one instance can be restored onto a different instance (e.g. production onto staging) as long as they run the same Odoo version
Point-in-Time Recovery
Beyond scheduled backups, each instance can enable continuous WAL archiving — restore its database to any specific second, not just to the moment of the last snapshot.
- Turn it on per instance, from that instance's own Backups tab — enabling briefly restarts the database to apply the setting, then takes a first base backup automatically
- Choose a destination — Cloudflare R2, S3-compatible storage, Google Cloud Storage, or another of your own registered servers — and how many days of history to keep. Storing WAL on the instance's own local disk isn't offered, since it wouldn't survive a server loss or the restore process itself
- Pick a point in time within the recoverable window, type RESTORE to confirm, and the database is rolled back to that exact second — an automatic snapshot is taken first so the restore itself can always be undone
- The database is restored to the exact second chosen; the filestore is not rolled back as part of point-in-time recovery — attachments added after that moment remain in place. Restore a regular scheduled backup instead when you need the filestore rolled back too
Streaming replication (a continuously up-to-date hot standby) is the only remaining item on the backup/recovery roadmap — not built yet. Scheduled backups and point-in-time recovery are both available today.
Database Placement & Version
Choose where an instance's PostgreSQL database runs and which version it runs, at creation time.
Pick a Version
Every instance is created with a PostgreSQL version selected from an admin-managed list, instead of a single fixed version — useful for matching the version a dump was originally taken from.
Choose Where It Runs
| Placement | Description |
|---|---|
| Same server (default) | Database runs alongside Odoo on the same server, in its own container — today's default behavior, unchanged |
| Another of your servers | SPCBot runs the database on a different server you've already registered — either as a dedicated container, or by reusing that server's existing PostgreSQL install if it already has one (detected automatically) |
| Managed database service | Connect to a database you already run elsewhere (e.g. Google Cloud SQL) — SPCBot only connects to it, it never provisions or manages that database |
Placement and version cannot be changed after the instance is created — plan ahead, or create a new instance with the placement you need.
Scheduled backups and point-in-time recovery currently require the database to be on the same server as the instance. An instance using an external database placement should rely on its own database provider's backup tooling for now.
Environment Variables
Configure per-instance settings securely with inline editing.
Variable Types
| Type | Storage | Display |
|---|---|---|
| Regular | Plain text | Visible value |
| Secret | Encrypted (AES-256) | Hidden (••••••••) |
| System | Encrypted | Read-only (e.g., _ODOO_MASTER_PASSWORD) |
Odoo Configuration
Special ODOO_* variables are injected into odoo.conf:
ODOO_WORKERS=4→ Sets worker processesODOO_LOG_LEVEL=debug→ Sets logging levelODOO_LIMIT_MEMORY=8589934592→ Memory limits
Inline Editing Features
- Double-click to edit any user variable
- Enter to save, Escape to cancel
- Blur auto-saves if value changed
- Toggle secret checkbox during edit
- Hover reveals edit button