- Where is our data hosted?
- The database and our self-hosted services run on Hetzner infrastructure in Germany. Some subprocessors (Supabase, Stripe, Anthropic, Resend, Twilio, Cloudflare) host in the US; those transfers rely on the UK International Data Transfer Addendum and Standard Contractual Clauses. Details on the data-processing page.
- How are candidate sandboxes isolated?
- Every candidate pod runs under the gVisor runtime on a separate Execution Cluster that has no public ingress. Network egress is denied by default. Pods are ephemeral, have no persistent volumes, and are torn down after every session.
- How are secrets managed?
- HashiCorp Vault, self-hosted, with Kubernetes authentication and per-workload ServiceAccount policies. External Secrets Operator syncs Vault values into Kubernetes Secrets at runtime. No secrets ever touch a ConfigMap, an env file outside local dev, or a git repo.
- What do you log and for how long?
- Access logs run through a PII scrubber before they reach Loki. Hot retention is 30 days, cold retention is 90. Administrative actions are logged to an append-only table with an immutable offsite copy on Hetzner Object Storage. Retention windows are pulled from a single config module.
- How often do you run security testing?
- Static analysis (Semgrep), container scanning (Trivy), secret scanning (Gitleaks), and dependency scanning run on every pull request. Accessibility tests run via axe-core in end-to-end. An external penetration test is scheduled for month 3 of the operational timeline and recurs at least annually.
- Do you offer a bug bounty?
- Yes, invite-only on HackerOne from month 3. Researchers already in good standing elsewhere in the industry can request an invite via security@skillbricks.ai; we will expand the program as volume allows.
- What about AI-assisted cheating?
- Fraud-resistance is a first-class concern. We use process-intelligence signals, paste detection, timing distributions, follow-up probes tied to candidate-specific answers, and a separate Claude call for generation versus scoring. No single actor can both propose and accept a score.