PortCheck
Browse funds

Operating model

Disclosure
control

Govern the lifecycle of fund disclosure content: QA evidence, parallel approvals, and an append-only audit trail — with rules enforced on the server, not just in the UI.

End-to-end control flow

Each step is something you can walk through with a stakeholder: where content lives, how readiness is proven, and how approvals and audit evidence are recorded. Highlighted steps are enforced on the server.

  1. Model in PostgresDrizzle

    Funds → documents → version rows with lineage (parent_version_id).

    Open funds →
  2. QA workspaceRSCApp Router

    Edit body, redline vs parent, checklist, demo iXBRL validation, EDGAR-style HTML export stub.

    Browse funds →
  3. Server-enforced gatesServer Actions

    Cannot submit for review until required checklist items close. Formal approve requires workflow final step + closed QA.

    Set role on Compliance →
  4. Parallel DAG workflowReact Flow

    Template nodes/edges, step_executions, shared rules engine in TypeScript; merged with review queue in one screen.

    Workflow & review →
  5. Append-only auditSHA-256 chain

    Every mutation can emit audit_events with chained record hashes for tamper-evidence (demo scope).

    Audit log →
Next.js 16React 19TypeScriptPostgreSQLDrizzle ORMTurborepoServer ActionsReact FlowiXBRL demo

Overview

Reference prototype — not a certified control or production filing system.