Trust Center + Compliance Program (self-hosted Probo)
Give a company a credible security posture quickly: a branded public trust
center plus the program behind it — frameworks, controls, policies, a risk
register, inventories, a vendor/sub-processor list, and a DPA that are internally
consistent. Built on Probo (open-source compliance/trust platform), self-hosted,
so there is no per-seat SaaS bill.
This produces the artifacts and public page, not an audit. An actual SOC 2 /
ISO 27001 attestation still requires an independent auditor; this gets the company
audit-ready and publicly credible.
When to use
- A startup/SaaS needs to show security maturity to customers/partners now.
- You want the underlying program (controls, policies, risk register, RoPA,
sub-processors, DPA) authored coherently, not as disconnected templates.
- Self-hosting is preferred over Vanta/Drata/SafeBase pricing.
When NOT to use
- The company needs a signed attestation → engage an auditor (this is prerequisite
work, not a substitute).
- A fully managed platform is genuinely wanted and budget exists.
Part 1 — Deploy + brand Probo
Probo runs as containers behind a reverse proxy on a small box (see
[[ec2-instance-connect-data-pull]] for keyless prod shell access).
- Deploy the Probo stack via its docker-compose; put it behind nginx on a
dedicated subdomain (e.g.
trust.<domain>).
- TLS — issue/renew the cert via ACME. If issuance breaks, check the ACME
http-01 path routing through nginx before blaming the CA.
- Branding without forking the app: use nginx
sub_filter to rewrite
the served HTML (product name, logo) at the proxy. Enable it on the right
Content-Type and disable gzip on those responses so sub_filter can match.
- Backups + secrets: confirm DB backups run and the app's secret/vault store
is populated before authoring — losing the program later is worse than a slow start.
Gotchas that will bite
- PDF export dumps raw JSON if ProseMirror rich-text (esp. table cells)
lacks required node attributes. When authoring policies via the API/DB, produce
well-formed ProseMirror (valid
attrs on table/cell nodes) or exported PDFs
show raw document JSON instead of formatted text.
- Dark mode breaks branding: light-lock the theme (pin the theme CSS variables
to light values) unless dark is fully styled, or the trust center renders
half-branded for dark-mode visitors.
- Custom domain / www: set the website's canonical/host field to the exact
public host (with/without
www) so links and canonical URLs resolve.
Verify the public trust center renders correctly (light + dark, mobile) with
[[cdp-render-verification]].
Part 2 — Author the program (coherent, not templated)
Build it so controls ⇄ policies ⇄ measures line up. Order that works:
- Frameworks + controls — enable SOC 2, ISO 27001, and GDPR; import their
control sets in Probo.
- Core policy set — author the standard policies (Information Security,
Access Control, Acceptable Use, Data Protection/Privacy, Incident Response,
Business Continuity, Vendor/Third-Party, Change Management, Data Retention,
Encryption/Key Management, etc.). Write them specific to the company (its
real stack and data flows), not generic boilerplate — strip any "template"
notices.
- Risk register + inventories — a risk register, plus asset, data, and
RoPA (GDPR Records of Processing Activities) inventories, plus a vendor /
sub-processor list. Ground each in the company's actual providers.
- Map it together — link controls → the policies that satisfy them → the
measures/evidence. Unmapped controls are the tell of a fake program.
- Public content — publish frameworks, policy summaries, a DPA, the
sub-processor list, and an Updates timeline so the trust center reads
as a living program, not a snapshot. Consolidate contact to a single address
(e.g.
legal@ / security@).
Writing quality
Policies and privacy content are read by real prospects and lawyers — apply
[[beautiful-prose]] / [[humanizer]]: plain, specific, no filler, no invented
certifications or dates. Cite the framework clause where relevant. Never claim an
attestation the company does not hold.
Deliverables checklist
Related
- [[ec2-instance-connect-data-pull]] — keyless prod shell to the Probo box.
- [[cdp-render-verification]] — verify the public trust center renders.
- [[beautiful-prose]] / [[humanizer]] — policy/privacy writing quality.
- [[company-legal-reputation-research]] — external due-diligence counterpart.
1---2name: trust-center-compliance-program3description: Trust Center + Compliance Program (self-hosted Probo)4---56# Trust Center + Compliance Program (self-hosted Probo)78Give a company a **credible security posture** quickly: a branded **public trust9center** plus the **program behind it** — frameworks, controls, policies, a risk10register, inventories, a vendor/sub-processor list, and a DPA that are internally11consistent. Built on **Probo** (open-source compliance/trust platform), self-hosted,12so there is no per-seat SaaS bill.1314This produces the **artifacts and public page**, not an audit. An actual SOC 2 /15ISO 27001 attestation still requires an independent auditor; this gets the company16audit-ready and publicly credible.1718## When to use1920- A startup/SaaS needs to *show* security maturity to customers/partners now.21- You want the underlying program (controls, policies, risk register, RoPA,22 sub-processors, DPA) authored coherently, not as disconnected templates.23- Self-hosting is preferred over Vanta/Drata/SafeBase pricing.2425## When NOT to use2627- The company needs a signed attestation → engage an auditor (this is prerequisite28 work, not a substitute).29- A fully managed platform is genuinely wanted and budget exists.3031---3233## Part 1 — Deploy + brand Probo3435Probo runs as containers behind a reverse proxy on a small box (see36[[ec2-instance-connect-data-pull]] for keyless prod shell access).37381. **Deploy** the Probo stack via its docker-compose; put it behind nginx on a39 dedicated subdomain (e.g. `trust.<domain>`).402. **TLS** — issue/renew the cert via ACME. If issuance breaks, check the ACME41 http-01 path routing through nginx before blaming the CA.423. **Branding without forking the app**: use nginx **`sub_filter`** to rewrite43 the served HTML (product name, logo) at the proxy. Enable it on the right44 `Content-Type` and disable gzip on those responses so `sub_filter` can match.454. **Backups + secrets**: confirm DB backups run and the app's secret/vault store46 is populated before authoring — losing the program later is worse than a slow start.4748### Gotchas that will bite4950- **PDF export dumps raw JSON** if ProseMirror rich-text (esp. **table cells**)51 lacks required node attributes. When authoring policies via the API/DB, produce52 well-formed ProseMirror (valid `attrs` on table/cell nodes) or exported PDFs53 show raw document JSON instead of formatted text.54- **Dark mode breaks branding**: light-lock the theme (pin the theme CSS variables55 to light values) unless dark is fully styled, or the trust center renders56 half-branded for dark-mode visitors.57- **Custom domain / www**: set the website's canonical/host field to the exact58 public host (with/without `www`) so links and canonical URLs resolve.5960Verify the public trust center renders correctly (light + dark, mobile) with61[[cdp-render-verification]].6263## Part 2 — Author the program (coherent, not templated)6465Build it so **controls ⇄ policies ⇄ measures** line up. Order that works:66671. **Frameworks + controls** — enable SOC 2, ISO 27001, and GDPR; import their68 control sets in Probo.692. **Core policy set** — author the standard policies (Information Security,70 Access Control, Acceptable Use, Data Protection/Privacy, Incident Response,71 Business Continuity, Vendor/Third-Party, Change Management, Data Retention,72 Encryption/Key Management, etc.). Write them **specific to the company** (its73 real stack and data flows), not generic boilerplate — strip any "template"74 notices.753. **Risk register + inventories** — a risk register, plus asset, data, and76 **RoPA** (GDPR Records of Processing Activities) inventories, plus a **vendor /77 sub-processor** list. Ground each in the company's actual providers.784. **Map it together** — link controls → the policies that satisfy them → the79 measures/evidence. Unmapped controls are the tell of a fake program.805. **Public content** — publish frameworks, policy summaries, a **DPA**, the81 **sub-processor** list, and an **Updates timeline** so the trust center reads82 as a living program, not a snapshot. Consolidate contact to a single address83 (e.g. `legal@` / `security@`).8485### Writing quality8687Policies and privacy content are read by real prospects and lawyers — apply88[[beautiful-prose]] / [[humanizer]]: plain, specific, no filler, no invented89certifications or dates. Cite the framework clause where relevant. Never claim an90attestation the company does not hold.9192## Deliverables checklist9394- [ ] Public trust center live on `trust.<domain>` (TLS valid, branded, light+dark, mobile-verified)95- [ ] SOC 2 / ISO 27001 / GDPR frameworks + controls loaded96- [ ] Core policy set authored (company-specific, no template notices)97- [ ] Risk register + asset/data/RoPA inventories + vendor/sub-processor list98- [ ] Controls mapped to policies + measures (no orphan controls)99- [ ] Public DPA + sub-processor list + Updates timeline published100- [ ] Single canonical contact address101102## Related103104- [[ec2-instance-connect-data-pull]] — keyless prod shell to the Probo box.105- [[cdp-render-verification]] — verify the public trust center renders.106- [[beautiful-prose]] / [[humanizer]] — policy/privacy writing quality.107- [[company-legal-reputation-research]] — external due-diligence counterpart.