3R Programs

AI · Systems · Portfolio Projects

April 2026 proof of concept

BSA/AML Audit Management Proof of Concept

A narrow but serious audit-findings workflow, and one of the first places I learned how much better AI products get when SME judgment, testing, and a willingness to pivot are part of the build.

Hosted demo link pending refreshed screenshotsView screenshots

Demo environment note

April 2026 proof-of-concept snapshot. Still functional, and the lessons from it now show up in my active Horizon Scanning build.

The data is fictional and seeded. Meridian Bank & Trust is not a real bank, and no customer, bank, regulatory, employer, or production data is represented.

AI Response Generation

The useful AI feature came from a real pain point.

This project taught me to ask a better question: not where can AI be impressive, but where can it make a real compliance workflow easier to draft, review, and explain.

The better idea came from testing the first one

I started with a citation helper because it looked like an obvious AI feature. Testing it made the better answer clear: experienced auditors do not need much help picking an FFIEC section. The higher-friction work was drafting formal management responses, so I changed direction.

AI drafts; the person authors

The fun part was not just getting Claude to write prose. It was shaping a review loop that felt right for compliance work: Claude drafts from the finding facts, the response lands in an editable surface, and the user accepts, edits, or rejects it.

The workflow decides when AI is allowed

The drafter is available only when a finding is issued and waiting for management response. It is locked before issuance and after the response window, because a useful compliance tool has to respect the process around it.

Audit Trail

The AI output is visible, attributable, and reversible.

The design separates what the model suggested from what the user accepted. That distinction is the product point: an examiner, auditor, or reviewer should be able to recover who did what, when, and through which path.

  1. 1

    Insert a PENDING ai_logs row before the Claude call, including model, system prompt, user prompt, and request payload.

  2. 2

    Call Claude with forced structured output: draft plus rationale, not free-form text that the app has to guess how to parse.

  3. 3

    Complete the log with response payload, suggested value, rationale, token counts, and latency.

  4. 4

    Show the AI draft to the user in an editable review surface. Dismiss is logged. Accept requires an explicit action.

  5. 5

    On Accept, write the user-final text, mark the ai_logs row ACCEPTED, and record the field edit in the same transaction with a shared correlation id.

From Prototype To Current Focus

The BSA demo became a stepping stone, not a dead end.

I do not want to stay attached to an early idea just because it was the starting point. This proof of concept still works, but its real value is what it taught me about product judgment, AI controls, and the kind of build I want to keep pursuing.

BSA/AML proof of concept

This was one of my first serious AI apprenticeship projects: take a workflow I know well, build a narrow working slice, find the awkward parts, and keep improving the product decision.

Horizon Scanning

The current focus applies the same lessons to regulatory-change review: source-quoted summaries, AI-proposed ratings, user confirmations or overrides, prompt versions, and audit logs.

Tech Stack

The stack matters because the governance pattern has to survive real implementation.

Part of the enjoyment is learning how the pieces fit together. The stack is how the compliance ideas become visible: identity, state, review gates, structured AI output, durable storage, testing, and deploy discipline.

BSA/AML demo stack
  • Next.js 16 App Router, React 19, TypeScript
  • Tailwind CSS v4 and shadcn-style primitives
  • Clerk auth with seeded personas
  • Neon serverless Postgres and Drizzle ORM
  • Zod validation, server actions, state-machine gates
  • Anthropic Claude Sonnet for management-response drafting
  • Vitest unit tests and Playwright governance tests
Horizon Scanning stack now carrying the pattern
  • Next.js 16, React 19, strict TypeScript
  • Supabase Postgres with pgvector
  • Clerk, Resend, Vercel, GitHub Actions
  • Claude CLI review pipeline and OpenAI embeddings
  • AI ratings separated from user ratings
  • Source quotes, prompt versions, mock LLM mode, and audit logs

Screenshots

What each page proves

These screenshots are from the hosted demo environment. The layout below gives each image more width so the workflow evidence is easier to inspect.

01

Findings list

The main work queue shows seeded audit findings with status, risk, due date, audit source, and owner. It proves the demo is a functioning workflow surface, not a static mockup.

Findings list showing seeded BSA/AML audit findings with filters for audit, status, and risk rating.
02

Issued finding detail

The detail page ties the narrative, response status, remediation notes, change history, and risk matrix into one reviewable record.

Finding detail page for an issued alert-to-SAR conversion finding with management response and risk matrix sections.
03

Edit finding

The edit surface keeps the finding structured. Severity and likelihood drive the risk rating, which the server recomputes rather than trusting the browser.

Edit finding form with structured fields for title, description, risk rating, ownership, and remediation notes.
04

New finding intake

The intake path starts a finding as a governed record tied to an audit, with the fields a reviewer expects before the item moves into the lifecycle.

New finding form with audit, title, description, risk rating, owner, due date, and remediation fields.
05

Reopened finding

Reopened findings test the edge cases: recurrence, prior response context, status history, and renewed remediation accountability.

Reopened finding detail page preserving original response, reopened remediation context, and risk rating.
06

Filtered response queue

Filtering issued findings turns the inventory into an action queue: the records waiting for a management response.

Findings table filtered to issued findings waiting for management response.
07

Validation state

Blank submission fails visibly and safely. Validation states matter because bad records should be stopped before they enter the trail.

New finding form displaying required-field validation messages.
What Carried Forward

This is the kind of building I enjoy.

I like taking a real workflow, building a small usable version, finding where it feels off, and changing direction when the better answer appears. The BSA/AML demo was that first serious test. Horizon Scanning is where I am applying the lessons now.

Back to 3R Programs