AuditFlow OS Build History · Stage 5 of 5

The SaaS build

← See the full journey

Product thinking

Build phases

The SaaS build did not start as a new idea. It came after the readiness packs and Notion workspace had already proved the audit workflow. The SaaS version is where the model starts to enforce what Notion could only structure: tenant separation, user roles, permissions, workflow gates, report locking and stronger audit trails. The SaaS build is now in beta, with the core foundation live and deeper workflow features being tested and refined.

PhaseWhat it covers
1. Readiness pack methodIS4, ISO 27001, NCSC CAF and NIST CSF question packs, evidence requests, red flags, scoring and interview-prep appendices.
2. Notion operating modelAudits, findings, evidence, actions, controls, dashboards, templates, reporting libraries and example audits.
3. Public Notion releasePublic positioning, user guidance, downloadable artefacts, screenshots and a duplicable template.
4. SaaS foundationAuthentication, organisations, user roles, audit records, findings, evidence, actions, controls, dashboard, permissions and database structure.
5. SaaS workflow depthManagement responses, report generation, risk scoring, framework mapping, reminders, exports and stronger audit controls.
Release history & direction

Roadmap

ReleaseScopeStatus
R1Core audit workflowLive
R2Findings, evidence and actions linked togetherLive
R3Dashboard and reporting viewsLive
R4Framework mapping and reusable librariesLive
R5SaaS user roles, organisations and permissionsLive
R6Exporting, automation and future integrationsPDF export live, automation ahead
Not yet built

Future phases

Supplier assurance module
Control library expansion
Automated evidence reminders
Audit trail and activity history
Portfolio-level risk dashboard
AI-assisted report drafting
Scope control

Backlog & prioritisation

PriorityScope
P1: must haveCore audit, findings, evidence, actions and dashboard.
P2: should haveFramework mapping, reporting libraries, user guidance and example audits.
P3: could haveIntegrations, automated reminders, advanced analytics and report exports.
P4: later phaseAI-assisted report drafting, supplier portal and mobile or offline field audit support.
Keeping scope honest

Risks & mitigations

RiskMitigation
Product becomes too broadKeep the core focused on audit, findings, evidence and actions.
Users do not understand audit terminologyAdd a glossary, examples and guidance.
SaaS version becomes too complexBuild from the proven Notion data model rather than starting fresh.
Access control errorsUse organisation-level permissions and clear roles.
Poor reporting outputsBuild a reusable report structure and libraries.
Evidence storage issuesDefine evidence handling and upload rules early.
Framework mapping becomes inaccurateKeep mappings clear, editable and reviewed.
Decisions and compromises

What the SaaS build actually cost and caught

Row-level security from the first migration, not retrofitted

Every business table gets an organisation_id and row-level security enabled in the same migration that creates it, not added in a cleanup pass later. Slower up front, since every new table needs its access rules worked out before it can be used, but it avoids the common multi-tenant failure: a table quietly missing tenant isolation until someone notices in production.

Risk kept in three separate places, on purpose

Likelihood and impact live on the audit; risk_rating lives on the finding; a separate risks table holds risk broader than one finding. Collapsing them into one concept would be simpler to build, but would lose the real distinction between how risky the audit is, how serious this specific issue is, and what the standing risk register entry connects to.

Billing deliberately not built yet

Subscriptions and billing are explicitly deferred until the core workflow, audit creation through report generation, is solid end to end. For a SaaS product, delaying monetisation infrastructure is a real sequencing call: prove the workflow works before building the layer that charges for it.

AI drafting features planned, then shelved

A phased plan for AI-assisted report drafting was researched and written up in detail against the real codebase, then set aside on purpose. Test the app for a month first, and come back to it after the core product has actually been used, not before.

A skipped migration that broke production

Changing a member's audit access started failing in production with a missing-column error. The cause was one migration getting skipped when migrations were applied manually, while later ones went through fine. Diagnosed by checking what was actually missing rather than guessing, then fixed by running the skipped migration directly.

Minimal, reversible private beta gating

Signup during the beta is gated behind an invite code checked against a single environment variable, not a new database table or invite system. If the beta opens up later, that's one variable removed, not a migration to undo.

Reports stay live until issued, then become locked

Draft reports can pull current findings, evidence and actions while they are being reviewed. Once issued, the report is snapshotted and locked so later changes do not alter the official audit record. That trades convenience for audit integrity.

Closing an action does not close the finding

A remediation action can be marked complete, but the finding only closes after review of completion evidence. That keeps closure tied to evidence, not to someone saying the work is done.

What building this taught me

Lessons learned

  • A good audit product starts with the workflow, not the dashboard.
  • Findings need structure before reporting can improve.
  • Evidence must be linked to controls and actions, not filed separately.
  • Users need worked examples, not just empty templates.
  • A Notion build can prove the operating model before SaaS development starts.
  • Product thinking and audit thinking work well together because both need traceability.
Working method

How I work with AI on a build like this

The SaaS build is AI-assisted end to end. What matters is not that AI wrote code, it's the discipline applied to it: verify before accepting, correct the direction when something drifts, and hold the line on scope and honesty rather than letting either slide for the sake of speed.

Verification before acceptance, every time

Every change goes through an actual production build before it counts as done, checked against the real output, not an AI's claim that something works. That single habit catches a real class of problem: a broken build, a stale link left over from a domain change, a component fixed in one place but still broken in three others.

Correcting the direction mid-build, not after

When a proposed feature risked moving the build outside its agreed scope, the call was to flag it and stop, not build around it silently. The same standard applied to content: illustrative mockups that could pass as real client documents were sent back with a requirement for an explicit disclosure label before anything shipped.

Treating a summary as a claim, not a fact

A stale portfolio link, a phase-gating conflict, and a UI bug reported once but present in four near-identical places were all caught by re-checking the actual code and output, not by accepting a plausible-sounding summary. The skill being exercised is direction and verification, not typing.

Artefacts

Product roadmapBacklogRisk registerRelease planFramework mapping docNotion audit database

What this demonstrates

Product & systems thinkingDelivery managementProcess mapping

What this proved

What this stage proved

The SaaS build proved the workflow could be enforced, not just modelled: real tenant isolation from the first migration, real permission gates by role, and an audit record that locks on issue instead of staying quietly editable. That is the gap Notion could structure but never close.