Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build and deploy a production-ready Trust Center for any company. Use this skill whenever someone asks to create a trust center, compliance portal, security page, or wants to publish their SOC 2/SOC 3/ISO 27001/HIPAA/compliance posture publicly. Also triggers when someone mentions gated document access for audit reports, NDA-based document sharing, or wants to replace paid trust center tools like Secureframe, Vanta, Drata, or SafeBase. Even if they just say "I need a place to share my SOC 2 with
.claude/skills/grcengclub-trust-center/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 200% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 177% | 0% |
Build a serverless trust center that publishes a company's compliance posture — certifications, policies, and audit reports — with gated access for sensitive documents.
A fully deployed trust center with:
Monthly cost: ~$5-15/mo for the trust center infrastructure (e-signature provider costs vary).
Follow these steps in order. Each step builds on the previous one.
Ask the user for the following. Be conversational — don't dump all questions at once. Ask 2-3 at a time, then move on.
Required:
For each certification, ask:
Ask about documents:
Ask about NDA / e-signature (optional):
Optional:
If they have a SOC 2 report file, ask them to share it — the skill can extract certification details, control counts, and audit period automatically.
If the user provides a SOC 2 report or other compliance documents:
Read the reference files to generate the code. The order matters:
references/infrastructure-template.yaml → Generate infrastructure/template.yamlreferences/api-handler.py → Generate backend/functions/api_handler.pyreferences/seed-data.md → Generate backend/seed_data.pyreferences/frontend-files/ → Generate the React frontend:TrustCenter.jsx DEMO_CONFIG and DEMO_DOCUMENTS with the user's datareferences/deploy-script.sh → Generate deploy.shREADME.md with company-specific detailsThe final output should be:
trust-center/
├── README.md
├── deploy.sh # One-command deploy
├── infrastructure/
│ └── template.yaml # CloudFormation (full AWS stack)
├── backend/
│ ├── functions/
│ │ └── api_handler.py # Lambda API
│ └── seed_data.py # Company-specific data population
├── frontend/
│ ├── index.html
│ ├── package.json
│ ├── vite.config.js
│ └── src/
│ ├── main.jsx
│ ├── hooks/useAuth.jsx
│ ├── pages/TrustCenter.jsx
│ ├── pages/AdminDashboard.jsx
│ ├── pages/LoginPage.jsx
│ └── utils/api.js
└── docs/
└── DEPLOYMENT.md # Step-by-step guideWalk the user through deployment:
aws sts get-caller-identityaws configure get region./deploy.sh --email ADMIN_EMAILIf deploying from Claude Code, run these commands directly.
After deployment, upload the user's actual compliance documents:
bashDOCS_BUCKET=$(aws cloudformation describe-stacks \ --stack-name trust-center-prod \ --query 'Stacks[0].Outputs[?OutputKey==`DocumentsBucket`].OutputValue' \ --output text) aws s3 cp SOC2_Report.pdf "s3://$DOCS_BUCKET/documents/SOC2_Report.pdf" aws s3 cp SOC3_Report.pdf "s3://$DOCS_BUCKET/documents/SOC3_Report.pdf" # ... etc for each policy document
If the user wants automated NDA signing, guide them through connecting their chosen e-signature provider. See the "NDA Integration" section below for details.
The trust center supports an optional NDA signing step before granting access to gated documents. The backend is designed to be provider-agnostic — it uses environment variables for the API key, URL, and template ID, and a webhook endpoint for completion callbacks.
The user must choose an e-signature provider. Here are the tested options:
DOCUMENT_COMPLETEDcompletedform.completedenvelope-completedAfter choosing, the user needs to:
https://TRUST_CENTER_URL/api/webhook/esignESIGN_PROVIDER: documenso | opensign | docuseal | docusignESIGN_API_KEY: their API keyESIGN_API_URL: provider's API base URLESIGN_NDA_TEMPLATE_ID: the template ID from step 1The backend auto-detects the provider and formats API calls accordingly. If no provider is configured (env vars are empty), the NDA step is skipped and requests go straight to admin review.
sets up the real API URL via environment variables during build.
Gated docs show a "Request Access" button that collects name/email/company/reason.
After the initial build, users can ask to:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 31,296 | 5,931 | -81% | 1 | 1 | 0% | 6,242 | 2,954 | -53% | 0 | 0 | — |
case-02 | fail→fail | 33,457 | 2,147 | -94% | 1 | 1 | 0% | 6,222 | 2,842 | -54% | 0 | 0 | — |
case-03 | fail→fail | 45,077 | 27,324 | -39% | 1 | 1 | 0% | 6,217 | 8,768 | +41% | 0 | 0 | — |
case-04 | pass→pass | 7,810 | 9,098 | +16% | 1 | 1 | 0% | 1,246 | 4,058 | +226% | 0 | 0 | — |
case-05 | fail→pass | 10,802 | 8,712 | -19% | 1 | 1 | 0% | 1,677 | 3,860 | +130% | 0 | 0 | — |
case-06 | fail→pass | 9,881 | 3,629 | -63% | 1 | 1 | 0% | 1,662 | 3,144 | +89% | 0 | 0 | — |
case-07 | fail→pass | 15,538 | 8,067 | -48% | 1 | 1 | 0% | 2,536 | 3,823 | +51% | 0 | 0 | — |
case-08 | fail→pass | 13,063 | 5,672 | -57% | 1 | 1 | 0% | 1,179 | 3,537 | +200% | 0 | 0 | — |
case-09 | fail→pass | 7,107 | 4,702 | -34% | 1 | 1 | 0% | 1,222 | 3,391 | +177% | 0 | 0 | — |
case-10 | pass→pass | 5,115 | 3,838 | -25% | 1 | 1 | 0% | 878 | 3,180 | +262% | 0 | 0 | — |
case-11 | pass→pass | 7,724 | 5,343 | -31% | 1 | 1 | 0% | 1,387 | 3,442 | +148% | 0 | 0 | — |
case-12 | fail→pass | 13,092 | 4,840 | -63% | 1 | 1 | 0% | 2,320 | 3,422 | +48% | 0 | 0 | — |
case-13 | pass→pass | 8,477 | 3,430 | -60% | 1 | 1 | 0% | 1,331 | 2,987 | +124% | 0 | 0 | — |
case-14 | pass→pass | 7,765 | 2,338 | -70% | 1 | 1 | 0% | 1,196 | 2,882 | +141% | 0 | 0 | — |
case-15 | fail→pass | 14,974 | 7,305 | -51% | 1 | 1 | 0% | 2,355 | 3,838 | +63% | 0 | 0 | — |
case-16 | fail→pass | 8,325 | 3,834 | -54% | 1 | 1 | 0% | 1,362 | 3,136 | +130% | 0 | 0 | — |
case-17 | fail→pass | 9,941 | 5,275 | -47% | 1 | 1 | 0% | 1,760 | 3,517 | +100% | 0 | 0 | — |
case-18 | fail→pass | 10,366 | 2,485 | -76% | 1 | 1 | 0% | 1,631 | 2,925 | +79% | 0 | 0 | — |
case-19 | fail→pass | 6,630 | 1,860 | -72% | 1 | 1 | 0% | 1,095 | 2,785 | +154% | 0 | 0 | — |
case-20 | fail→fail | 13,743 | 11,591 | -16% | 1 | 1 | 0% | 2,193 | 4,363 | +99% | 0 | 0 | — |
case-21 | fail→fail | 14,696 | 15,445 | +5% | 1 | 1 | 0% | 2,944 | 5,659 | +92% | 0 | 0 | — |
case-22 | fail→fail | 37,713 | 35,965 | -5% | 1 | 1 | 0% | 6,182 | 8,733 | +41% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.