SEAD SoftwareSEAD SoftwareSEAD SoftwareSOC 2 Type IISOC 2 Type IIInvestorsSchedule demo
Co-Wright

Permissioning that holds at the API, not just the screen

Most access control fails in the same place. The dashboard hides a row, the export doesn't. The report filters correctly, the API behind it returns everything. The permission was a property of the interface, so anything that bypassed the interface bypassed the permission with it.

Co-Wright puts the filter on the table, beneath every interface that reads it.

SOC 2 Type II certified

SOC 2 Type II · Security and Availability · January 1 to December 31, 2025 · examined by Thoropass Assurance

SOC 2 Type II compliant

What SOC 2 Type II compliance actually covers

A SOC 2 Type II examination is not a certificate. It is an independent auditor's opinion on whether a described set of controls was suitably designed and operated effectively across a period of time. In this case a full twelve months, not a snapshot in a single week.

Thoropass Assurance examined SEAD's controls against the Trust Services Criteria for Security and Availability across the period January 1 to December 31, 2025, and issued an unmodified opinion: that the system description was presented fairly, that the controls were suitably designed, and that they operated effectively throughout.

AWS is a carved-out subservice organization. Their own controls were not examined here; the report identifies what is expected of them, and we review their attestation annually.

Requesting the report

The report is confidential and restricted-use. It carries an explicit limitation on who may rely on it, and every page is marked accordingly. We share it under NDA with prospective and existing clients, their advisors, and others who fall within the audience the report names. Ask your account contact, or raise it in a first conversation, and we'll start the paperwork the same day.

Permissioning across every layer

Row and column-level permissioning

In a conventional BI stack, restricting a user to their own region is a project. Columns have to be named consistently across every source. Assignments are maintained by hand. And if the same data is reachable by API, the whole permission layer has to be written a second time for that path.

Co-Wright inverts it. Filters are declared on the table.

  • An entity-level filter restricts which rows a given group can see.
  • A field-level filter restricts a specific column.

Both are set once, on the schema. Every dashboard, list, form and API endpoint that reads that table inherits them.

Eric Wright

It does it at the API layer. It's not pulling all the data and then filtering on the front end. It's actually restricting the access at the API level.

Eric WrightChief Technology Officer

The consequence matters more than the mechanism. Build a new list, a new form, a new dashboard against that data six months later, and the filter is already applied. Nobody has to remember to scope it.

The same holds for machine access. An API account is assigned to a tenant and issued a token. When it calls the generated endpoints, it gets the filtered result: the same rows a human in that tenant would see, enforced in the same place.

This is the capability that existed within the audited environment during the 2025 period. The tenant layer described below was written in 2026 and enters scope with the audit closing this December.
Permission inheritanceorders — database table feeds Entity & field filter (region = user.region). The filter is declared once on the table and inherited identically by all four consumers: Dashboard, List, Form, API — each with the filter already applied.ordersdatabase tableEntity & field filterregion = user.regionDashboardFilter appliedListFilter appliedFormFilter appliedAPIFilter appliedPermission inheritanceorders — database table feeds Entity & field filter (region = user.region). The filter is declared once on the table and inherited identically by all four consumers: Dashboard, List, Form, API — each with the filter already applied.ordersdatabase tableEntity & field filterregion = user.regionDashboardFilter appliedListFilter appliedFormFilter appliedAPIFilter applied
A multi-tenant environment

The access model

Three concepts, in order of containment.

Workspace. The top of the tree.

Tenant. A group of users within a workspace. Every user belongs to one.

Access group. The permission set. A tenant carries an access group, and users created in that tenant inherit its filters without anyone configuring them individually.

Individual users can then be extended, granted additional access on top of what they inherit, or overridden, replacing the inherited set entirely.

Eric Wright

You get the high-level group policy, and you get the ability to override it.

Eric WrightChief Technology Officer
Today a tenant maps to exactly one access group. Multiple access groups within a single tenant, so that finance and sales inside the same client organization carry different permissions, is on the roadmap for 2026.
One-click SSO and multi-factor auth

Authentication

Authentication methods and where they are enforced
MethodSet per userEnforced at workspace level
Microsoft single sign-on
Google single sign-on
Email two-factor
Authenticator app two-factor
Supported
Not supported
Workspace-level enforcement of the two-factor methods is not something we have verified. We mark it rather than claim it.

Authentication methods are set per user, under Administration. Single sign-on can be enforced at workspace level, so a user never holds a separate Co-Wright credential at all. Where local credentials are used, password configuration is enforced against SEAD's Password Policy.

Sessions terminate automatically after15 minutes of inactivity. This was built for customers handling protected health information, where an unattended workstation is the exposure.

The inactivity timeout supports our customers' HIPAA obligations. It does not make Co-Wright HIPAA-certified, since no such certification exists.
Single-click auditing

Audit and lineage

When auditing is enabled on a table, Co-Wright creates a parallelaudit schema mirroring it, and writes every transaction against it: insert, update, delete.

Two modes:

System-time auditing
Every column change is written.
  1. 09:14:02phone: +1 201 555 0114 → +1 201 555 0177
  2. 09:14:02notes: updated
  3. 09:21:44industry: Retail → Distribution
  4. 09:36:17owner: reassigned
  5. 10:02:51address: 4 Hudson Pl → 200 River St
5 writes
Business-time auditing
Only nominated fields — name, address, industry — trigger a write.
  1. 09:21:44industry: Retail → Distribution
  2. 10:02:51address: 4 Hudson Pl → 200 River St
2 writes

System time records every change to every column.Business time records only when nominated fields change, such as name, address or industry, for cases where the full stream is noise.

Audit tables are archived on a schedule so history stays reachable.

Separately, soft deletion can be enabled. Records carrycreated_at,updated_at anddeleted_at metadata; deleting through the interface stamps deleted_at rather than removing the row, leaving it restorable or permanently deletable as a deliberate second act.

Two more safeguards sit above that:

  • Safe delete requires typing the word to confirm, not just clicking through a dialog.
  • Business specs are cloned on deletion. Restoring is one action; removing the clone requires a second explicit delete.

And business specs are version controlled. A change that introduces a bug is a few clicks from being rolled back or forked, the way a branch is.

Table-level transaction auditing is what we describe here. Audit coverage of database queries against a table can be enabled.
Every hop authenticated

Our infrastructure

Access to the AWS console runs through Microsoft single sign-on, governed by security groups on the Microsoft side, with two-factor enforced there. This replaced direct IAM users with two-factor and passkeys, which are being retired.

Reaching a production server is a further step. Terminals sit behind an encrypted an enterprise grade VPN tunnel, itself gated by Microsoft SSO, with its own access controls determining who reaches which host.

Credentials for partner environments are held inan enterprise grade password vault. Developer IAM access keys are rotated periodically.

Kevin Mauldin

In order to even access the terminals for a lot of these servers, you have to authenticate through our Identity Provider (IdP) and install the VPN client to connect.

Kevin MauldinHead of Infrastructure
Two regions, tested annually

Resilience

Failover and replication architectureVirginia — primary: database primary in AZ 1 and standby in AZ 2 with automatic multi-AZ failover; S3 bucket with versioning. Continuous asynchronous replication and versioned S3 replication flow automatically to Ohio — recovery. Database recovery to the second region is a documented manual procedure taking roughly one hour — it is not automatic.Virginia — primaryDB — primaryAZ 1DB — standbyAZ 2Automatic failovermulti-AZS3 bucketversioning onOhio — recoveryDB — replicaread-only until promotedS3 bucketversioned replicaAsync replication — continuousRecovery — manual, ~1 hourdocumented procedureS3 replication — versionedAutomatic / continuousManual, documented procedureFailover and replication architectureVirginia — primary: database primary in AZ 1 and standby in AZ 2 with automatic multi-AZ failover; S3 bucket with versioning. Continuous asynchronous replication and versioned S3 replication flow automatically to Ohio — recovery. Database recovery to the second region is a documented manual procedure taking roughly one hour — it is not automatic.Virginia — primaryDB — primaryAZ 1DB — standbyAZ 2Automaticmulti-AZS3 bucketversioning onRecovery — manual, ~1 hourdocumented procedureReplicationOhio — recoveryDB — replicaread-only until promotedS3 bucketversioned replicaAutomatic / continuousManual, documented procedure

The production database cluster runs on RDS in multi-AZconfiguration, across a read-write instance and a read-only replica. If an availability zone fails, failover to the other is automatic.

Beyond the region, data replicates to a second region, Virginia to Ohio. S3 buckets holding record attachments and bundles replicate the same way, with versioning enabled, so an object deleted or overwritten in error can be rolled back.

Backups run nightly for the database and for production EC2 instances, and restoration is tested annually.

Kevin Mauldin

If one availability zone goes down, it automatically switches over to the other one.

Kevin MauldinHead of Infrastructure
Cross-region recovery is not automatic. Standing production up in the second region is a documented manual procedure, timed at roughly one hour when last exercised for the audit. Automating it is on this year's agenda. In-region failover is automatic; cross-region is not, and we would rather you plan against the real number.
At rest and in transit

Encryption

Customer data stores are encrypted at rest, using AWS-managed keys. EC2 volumes are encrypted as well, though they hold no customer data. Data in transit over public networks is encrypted by secure transport protocols.

Keys are AWS-provided, not customer-managed. If your requirements include bring-your-own-key, we do not support it today.
No single person ships

How changes reach production

No single person ships to production. Branch protection rules in the development tool enforce review before merge, and every release is tested by the team in a preview environment separate from production before approval.

Regression testing is increasingly automated, using Playwright driven by AI agents, which has substantially reduced the small-bug class of release defect.

Kevin Mauldin

It's basically doing regression testing for us, so we don't have to do that manually anymore.

Kevin MauldinHead of Infrastructure
The number of required approvers is stated in the branch protection configuration. Confirm it before publishing a figure.
The fine print, up front

What we don't claim

We would rather be the vendor whose security page you didn't have to fact-check.

  • The report coversSecurity and Availability. Not Confidentiality, Processing Integrity or Privacy.
  • Multi-tenancy is not yet audited.It shipped after the audit period and enters scope this December.
  • Cross-region recovery is manual, at roughly an hour.
  • AWS's own controls were not examinedby this report. We review their attestation annually.
  • One access group per tenanttoday.
  • No HIPAA certification, because none exists — there is no formal audit.
  • The report isconfidential and restricted-use, so we don't publish it or summarize its findings here. We share it under NDA and expect you to read it closely.
Alexander Wright

Your data is secure, encrypted, and accessible to the level of which you're granted access to from the platform.

Alexander WrightPresident & CEO
Ask us the hard questions

Bring your security team.

Schedule demo