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.exampledocumenting 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-dynamicrendering
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
peopletable schema (e.g.,fullNamevsfirstName/lastName) - Different
matchestable structure (withsanctionedEntityId,matchAlgorithmcolumns vssanctionName,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 structuressrc/app/dashboard/layout.tsx— different sidebar navigation itemssrc/app/dashboard/page.tsx— completely different dashboard implementationsrc/app/dashboard/settings/page.tsx— modified in both branches
Action required
A developer needs to:
- Rebase
feat/core-compliance-featuresonto the latestmain - Resolve the schema and UI conflicts (reconciling the screening engine schema with the compliance features schema)
- Push the resolved branch
- Re-request merge
Once the conflicts are resolved and the PR is mergeable, the release can proceed as v0.1.2.