Security

Trust & Security

Last reviewed: 2026-09-01

SpokeHub is not SOC 2 attested or ISO 27001 certified. Neither claim can be made truthfully by any company — including one using continuous-controls-monitoring software like this page describes — without an independent audit: SOC 2 attestation is issued only by a licensed CPA firm after they review real evidence over time, and ISO 27001 certification only by an accredited certification body, after theirs. What follows is our own honest internal scorecard against both frameworks’ criteria, not a substitute for either one. If a vendor questionnaire or procurement process needs a real attestation letter, we don’t have one to send — this page exists so you get an accurate answer instead of silence or an overstatement.

Readiness scorecard

We track every SOC 2 Trust Services Criterion and ISO 27001 Annex A control we consider in scope against what the product’s code actually does — each one backed by a specific file, not a checkbox. That live map is our internal /admin/compliance dashboard; the numbers below are a snapshot of it.

89%
Overall readiness
87%
SOC 2 (20 criteria)
90%
ISO 27001 (23 controls)
31
Fully implemented
9
Partially implemented
0
Not yet started

What's real, working security today

Not a marketing list — every item below is shipped code, cited to its file:

  • Password hashing: bcrypt for every account type, never stored or logged in plaintext (src/lib/auth.ts).
  • Signed sessions: HMAC-SHA256-signed, httpOnly, SameSite=Lax cookies, Secure in production, for homeowner, contractor, and admin sessions independently.
  • Optional admin two-factor: a from-scratch, standards- compliant RFC 6238 TOTP implementation, compatible with any standard authenticator app.
  • Encryption at rest for stored integration credentials: AES-256-GCM (src/lib/credentials.ts).
  • A real, append-only audit log covering admin, contractor, and homeowner login events plus key admin actions, viewable internally at /admin/audit-log — never recording secrets or a failed login’s attempted email/identifier.
  • A real bot check on every login form (signed challenge, honeypot, timing trap), upgradeable to Cloudflare Turnstile with zero code changes.
  • A CI gate on every change — type-check, lint, the full automated test suite, a production build, and a dependency vulnerability scan — before anything reaches the main branch.
  • A tested backup/restore system — snapshotted automatically, restorable in minutes, exercised by its own automated tests rather than only claimed to work.

What we're upfront about not having yet

The same honesty standard applies in both directions. These are open, tracked items — not hidden, not silently deferred:

WAF-1No WAF, DDoS mitigation, or site-wide bot-detection service

The real, working login bot-check (botCheck.ts) covers login-form submissions specifically. It is not network-layer protection against volumetric abuse, credential stuffing, or general scraping. This is infrastructure a hosting edge (Cloudflare, Vercel's edge network, or similar) provides — it's scoped out of a single Next.js app's own code, and belongs to whoever operates the real deployment, not this reference build. What changed 2026-09-01: real, ready-to-apply configuration for both providers now exists (edge/cloudflare/waf.tf — a Terraform cloudflare_ruleset, syntax-verified against the real HCL parser; edge/vercel/apply-firewall-rules.sh — real `vercel firewall` CLI commands), with every rate-limit threshold set relative to this app's actual existing src/lib/rateLimit.ts numbers rather than invented, and explicit bypasses for the Stripe webhook and cron endpoints. Still genuinely `open`, on purpose — nothing is active, since this sandbox has no real domain or edge account to apply it against; applying it to a real deployment is now a copy-paste-and-fill-in-credentials step instead of a from-scratch design exercise.

PENTEST-1No penetration test has been performed

Nothing in this build is a substitute for an independent penetration test before handling real homeowner/contractor PII at scale. This is a reference/demo build with no production deployment or bug-bounty program. A real, live self-assessment was run 2026-09-01 (compliance/security-assessment/2026-09-01-self-assessment.md — npm audit plus curl against an actually-running production build) as the closest honest substitute achievable from inside this sandbox, and it found and fixed one genuinely high-severity issue (DEMO-LOGIN-1) — real evidence that this kind of testing finds real things, and exactly why it still isn't a substitute for a professional, adversarial pentest with far more time, tooling, and creativity than a scripted pass can bring.

Risks we've reviewed and knowingly accepted

Not every finding needs the same fix. These are documented, deliberate trade-offs, not oversights:

DEP-AUDIT-17 moderate-severity dependency advisories, in two dev-only CLI tools

npm audit reports 7 moderate findings, all in drizzle-kit's (@esbuild-kit/*) and @capacitor/cli's (xcode → uuid) own dependency chains. Both tools already sit at their latest published version and only ship the vulnerable sub-dependency in a local dev CLI (drizzle-kit push/studio, npx cap add/sync/open) — neither is part of the deployed web app or the built native app. The only available 'fix' for the drizzle-kit chain is a major downgrade, which is a worse trade than the finding itself. Re-evaluate as each upstream project migrates off its vulnerable sub-dependency.

Data handling

We classify data into four tiers — Restricted, Confidential, Internal, and Public — and handle each differently; the public marketplace listings (contractor profiles, category/location pages) are intentionally public, the same way a Yelp or Google Maps listing already is, while account data, messages, and payment metadata sit behind authentication and are excluded from search indexing. Full detail is in our internal Data Classification Policy. See our Privacy Policy for what we collect and why.

Policies

We maintain a written policy set — Information Security, Access Control, Incident Response, Data Classification, Vendor Risk Management, and Business Continuity/Disaster Recovery — each grounded in a specific mechanism in the codebase rather than generic template language, reviewed at least annually. These are internal documents; specifics are available on request.

Reporting a vulnerability

We have no bug-bounty program. If you find a real vulnerability, please report it responsibly — with enough detail to reproduce it — and we’ll investigate and respond through the process defined in our Incident Response Plan.

This page reflects 43 tracked controls across both frameworks as of 2026-09-01. It is maintained alongside the codebase and updated when our security posture actually changes — not on a marketing schedule.