尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Not for production. Synthetic data, demo sign-in, free tiers.
TransactIQ catches cross-border payment errors before a payment leaves the bank, explains each one in plain words, suggests a fix, and sends every change through maker-checker approval. It is a proof of concept built on free tiers (Next.js on Vercel, Neon Postgres).
Synthetic data only. Every client, bank, account and payment is invented. Not for production use. Hosted on Vercel's Hobby plan, which is for personal, non-commercial use.
Demo walkthrough: docs/demo-script.md
From 14 November 2026, Swift CBPR+ rejects payments whose postal addresses are fully unstructured: town and country must sit in their own fields. Swift estimates about 65% of messages still carry unstructured addresses. Industry-wide, about 1 in 10 cross-border payments fails first time, at about $12.10 per failed or repaired payment (LexisNexis Risk Solutions, Oct 2026). Banks that have migrated to ISO 20022 still have the exceptions: an operations analyst reads XML, guesses the fix and resubmits. TransactIQ targets that work.
| Measure | Result |
|---|---|
| Seeded errors caught before sending | 93 of 93, no clean payment flagged |
| Rejects explained correctly | 40 of 40 |
| Address suggestions right, when shown | 58 of 58 (target 95%); the one hard case shows options instead |
| Other suggestions right (BIC, purpose, name, date, reference) | 42 of 42 |
| 150 messier test addresses, rules only | 126 shown, all right; 24 "not sure" |
| Guardrails (wrong repairs approved, self-approval, money-field edits, auto-release, unflagged party changes) | 0 |
The data is generated, and the errors were designed alongside the rules, so these numbers show the tool behaves as designed. They are not a forecast for a bank's real payments; a pilot on anonymised rejects is the way to measure that.
Next.js 16 on Vercel (pages and server actions) · Neon Postgres via Drizzle · rules and
suggestion engines as pure TypeScript in lib/ · optional Gemini Flash (AI SDK),
OpenStreetMap Nominatim and Resend. See the About page in the app for the diagram.
Requires Node 22 and a Postgres database (a free Neon project, or local Postgres).
npm install
cp .env.example .env.local # then set DATABASE_URL and RESET_SECRET
npm run db:migrate # create tables
npm run seed # load the synthetic dataset
npm run dev # http://localhost:3000
Other commands: npm test, npm run lint, npm run typecheck, npm run synth
(writes sample XML and the answer key to data/synthetic/), npm run baseline:sheet,
npm run rules:catalogue, and BASE_URL=... npm run e2e (walks the demo path in a real
browser; needs npm i -D playwright && npx playwright install chromium).
No local Node install is needed.
DATABASE_URL for Production and Preview.RESET_SECRET (any long random string).https://<your-app>.vercel.app/setup, enter the reset secret and click
Set up demo data. This creates the tables and loads the synthetic dataset. Run it
again any time to reset the demo.APP_URL and RESET_SECRET (GitHub > Settings >
Secrets and variables > Actions) to enable the nightly reset workflow.GEMINI_API_KEY for the AI fallback and AI-drafted client notes;
RESEND_API_KEY and NOTE_TO_EMAIL (your own address) to email approved notes;
enable Web Analytics in the Vercel project for page views.| Variable | What it does |
|---|---|
GEMINI_API_KEY | Free key from Google AI Studio. Turns on the Gemini fallback for addresses the rules can't read and AI-drafted client notes. Without it, the rules and templates still work. |
RESEND_API_KEY, NOTE_TO_EMAIL | Emails approved client notes to your own inbox. Without them, notes are approved and stored but not emailed. |
SUGGESTION_MIN_CONFIDENCE | Below this (default 0.7) the panel shows options or a blank field, never a guess. |
AUTH_SECRET | Signs demo sessions; falls back to RESET_SECRET. |
Open /api/health a minute or two before you start: the free Neon database sleeps after
5 minutes idle and takes a few seconds to wake. It also shows whether Gemini and email are
configured. Reset the data from /setup if a previous demo changed it.
| Service | Limit that matters here |
|---|---|
| Vercel Hobby | Personal, non-commercial use; function time limits |
| Neon free | 0.5 GB storage; sleeps after 5 minutes idle |
| Gemini free tier | Rate-limited; a 429 shows "suggestion unavailable" and the rules carry on |
| OpenStreetMap Nominatim | 1 request a second, identifying User-Agent, attribution; results cached |
| Resend free | Sends from [email protected] to your own account address only |
| Path | What it holds |
|---|---|
lib/iso/ | Build and parse pacs.008, pain.001, pacs.002; CBPR+ character set |
lib/reference/ | Failure buckets, ISO code sets, corridors, synthetic banks and watchlist |
lib/synth/ | Deterministic generator: clients, suppliers, messages, seeded errors, answer key |
lib/db/, drizzle/ | Drizzle schema, client and SQL migrations |
lib/seed/ | Seed and reset |
app/, components/ | Pages and UI |
scripts/ | Seed, sample export, baseline sheet, GLEIF and OFAC importers |
lib/rules/ | 22 pre-send rules, the engine and the answer-key scorer |
lib/suggest/ | Suggestion engine, address engine, guardrails, Gemini and OpenStreetMap |
lib/repair/, lib/notes/ | Maker-checker workflows for repairs and client notes |
tests/ | vitest: rules against the answer key, suggestions, guardrails, workflow (local DB) |
e2e/ | Playwright walk through the demo path |
All demo data is generated. Optional real reference data can be imported from free
sources: GLEIF's BIC-to-LEI file (npm run import:gleif -- file.csv) and the US Treasury
OFAC SDN list (npm run import:sdn -- sdn.csv). ISO 20022 schemas and code sets come
from iso20022.org. See DECISIONS.md for the reasoning behind each choice.