Skip to content
by

Docs

Introduction

What ClientOS is, how it is put together and how to read these docs.

admin.youragency.com

ClientOS is a self-hosted client portal and agency admin for selling and delivering productized services. Your clients find a service, pick a package, pay and fill in a brief. Your team delivers the work, talks to the client and gets paid, all in one place that runs on your own server under your own domains.

Who it's for#

ClientOS is built for agencies and freelancers who sell services as products: fixed packages, clear deliverables, a delivery time and a price. Think SEO packages, design subscriptions, content retainers, link building, development sprints or any other offer you can describe on a service page.

One installation serves one agency. Inside it you can have as many clients as you like. Each client is a person who belongs to one or more companies, and each company can have its own team with its own roles.

What you get#

The three apps#

A ClientOS deployment runs three apps. Each one gets its own hostname under the domain you choose, alongside a fourth, files., for uploads and downloads.

AppExample addressWho uses itWhat it does
Portalportal.example.comYour clients and the publicThe client portal, plus your public pages: service pages, forms, the signup page, invoice pay links and tracked short links
Adminadmin.example.comYou and your teamEverything you run the agency from: dashboard, orders, clients, invoices, settings. It also hosts the /setup installer on a fresh deployment
APIapi.example.comBoth apps, payment providers, ResendThe server. It owns the database, checks every permission, signs people in, receives webhooks and runs the background jobs

How they fit together#

  • The portal and admin are Next.js apps. They render pages on the server and call the API over your internal Docker network, so those calls never leave the server.
  • Browsers also talk to the API directly, for example to sign in. That's why the API has its own public hostname.
  • All the hostnames share one parent domain, so a single session cookie works across them. That shared cookie is also what lets a team member with the right permission use "Sign in as" to view the portal as a client.
  • Payment providers and Resend send their webhooks to the API's public address.
  • Background work (renewals, reminders, overdue invoices and so on) runs inside the API process. There's no separate worker and no system cron to set up.

The stack in brief#

LayerWhat ClientOS uses
Web appsNext.js 16, React 19, Tailwind CSS 4
APINestJS on Fastify, Node.js
DatabasePostgreSQL 18
Realtime presenceRedis 7 (only for who's online and typing)
File storageBuilt-in storage on your server, or your own Cloudflare R2 bucket
EmailResend (outgoing mail and inbound email into tickets)
PaymentsStripe, PayPal, NOWPayments, CoinGate, BTCPay Server, manual crypto-wallet payments and account credit
Bot protectionCloudflare Turnstile
PackagingDocker images, installed and updated by a one-command installer, behind Caddy for HTTPS

What "self-hosted" means for you#

You run ClientOS. Nobody else hosts it for you.

  • Your server. One command installs it on a Linux server you control, with its own database, file storage and HTTPS. Another updates it.
  • Your domains. The portal, admin and API live on your own hostnames, such as portal.youragency.com, carrying your name, logo and colors.
  • Your data. Every order, client, invoice and message lives in your PostgreSQL database. You back it up and you decide where it lives.
  • Your files. Logos, deliverables and attachments are stored on your server, or in your own Cloudflare R2 bucket if you prefer, and served through short-lived signed links.
  • Your accounts. Email goes out through your Resend account. Payments go straight into your Stripe, PayPal or crypto gateway accounts. ClientOS never sits between you and your money.
  • Your keys, sealed. API keys you paste into Settings (Resend, R2, Turnstile, payment gateways) are encrypted in the database with a secret only your server holds.

You need a Linux server, a domain, your license key and a Resend account for email. The installer brings everything else: PostgreSQL 18, Redis, file storage and HTTPS certificates. Installation walks you through it.

ClientOS sends mail only through your Resend account, which you connect in the admin after installing. First run covers it.

How these docs are organized#

Getting started

  1. Installation: what you need, DNS and the one-command installer.
  2. Configuration: what the installer writes to deploy/.env, and the few settings you might change.
  3. First run: the setup page, then connecting email and payments.
  4. Updates and backups: the clientos command, updates, backups, restores, your license and troubleshooting.
  5. Local development: run the whole stack on your own machine.

Selling: Services and the store, Checkout and payments, Subscriptions, Coupons and referrals, Leads and tracking, Forms.

Delivering: Orders and delivery, Todo and checklists, Messages and files, Support tickets.

Clients and money: Clients and companies, The client portal, Invoices and credit, Expenses, finance and reports.

Administration: Branding and white-label, Team and permissions, Notifications and email, Settings reference.

If you're setting up a new deployment, read the Getting started pages in order.