All Posts
February 12, 20260.1.2Calmony Sanctions Monitor

v0.1.2 — feat: Email alerts, CSV upload, credits, certificates & audit log

Release v0.1.2: Email Alerts, CSV Upload, Credits, Certificates & Audit Log

12 February 2026

This release adds five features to Calmony Sanction Monitor:

What changed

  • Email alerts — Resend-powered notifications for match alerts, screening complete, compliance digests, and all-clear confirmations. Per-user notification preferences in Settings.
  • CSV bulk upload — Drag-and-drop file upload with smart header mapping (handles variations like "surname" → lastName). Preview and validate rows before importing. Template download included.
  • Credit system — View balance, top up (£5–£100 presets), and track transactions. Bulk discount tiers: 10% bonus at £20+, 15% at £50+, 20% at £100+. Auto-topup option available.
  • Screening certificates — Generate per-person certificates with unique reference numbers (CSM-xxx), result classification, and a printable A4 HTML layout.
  • Audit log — Every screening, match, decision, and settings change is logged. Timeline UI with filtering by event type, resource, and date range.

Other additions

  • GDPR deletion endpoint (DELETE /api/people/[personId]) removes person, matches, and certificates
  • CI workflow for build testing on push/PR
  • .env.example documenting all required environment variables

Why it matters

These features close the loop on day-to-day compliance workflows: import people in bulk, get notified on matches, prove screening status with certificates, and demonstrate due diligence with a full audit trail.

Technical notes

  • 9 new database tables: people, matches, user_settings, email_notifications, csv_uploads, credits_balance, credits_transactions, screening_certificates, audit_events
  • All API routes require Clerk authentication
  • All server-rendered pages use force-dynamic rendering

Note: This release is pending conflict resolution with the core screening engine branch before it can be merged to main.

Release Notes

❌ Release blocked — PR #10 cannot be merged

PR: #10 — feat: Email alerts, CSV upload, credits, certificates & audit log

What happened

The squash merge of PR #10 failed because the PR has merge conflicts with the main branch (mergeable: false).

Root cause

The main branch has already incorporated significant changes from a previously merged PR (the core screening engine — feat/core-screening-engine), which introduced:

  • A completely different people table schema (e.g., fullName vs firstName/lastName)
  • Different matches table structure (with sanctionedEntityId, matchAlgorithm columns vs sanctionName, matchScore)
  • New tables: sanctionsListVersions, sanctionedEntities, matchReviews, auditLog
  • Updated dashboard layout with People, Match Review, and Sanctions List navigation
  • A fully data-driven dashboard page importing from the screening engine schema

PR #10's branch (feat/core-compliance-features) was based on an older version of main and has conflicting changes in at least:

  • src/db/schema.ts — fundamentally different table structures
  • src/app/dashboard/layout.tsx — different sidebar navigation items
  • src/app/dashboard/page.tsx — completely different dashboard implementation
  • src/app/dashboard/settings/page.tsx — modified in both branches

Action required

A developer needs to:

  1. Rebase feat/core-compliance-features onto the latest main
  2. Resolve the schema and UI conflicts (reconciling the screening engine schema with the compliance features schema)
  3. Push the resolved branch
  4. Re-request merge

Once the conflicts are resolved and the PR is mergeable, the release can proceed as v0.1.2.