Inspiration
Sometimes, you just get tired of hearing people complain about the same thing so you just go ahead to fix it. From April 2026, hundreds of thousands of UK sole traders and landlords must file quarterly under Making Tax Digital. Most still do not have the compatible software to do this. The tools that exist were built for accountants: double-entry books, payroll, VAT modules which they do not have operational knowledge. I kept meeting people who run a trade or rent a flat and just want to know what went in, what went out, and whether HMRC got the update. They do not want to learn accounting. They don’t want to deal with the complexities of tax filing. They want ten minutes a quarter, not ten hours of rigorous calculations. PactTax started there. Connect the bank, sort transactions, file. We added AI because classification is the boring part: staring at "AMZN MKTP" and guessing if it was stock or a personal purchase. Amazon Nova 2 Lite FM does the suggestion; the users must always confirm before approval is complete. This keeps us honest with HMRC and easier for people who cannot afford to get categories wrong.
What it does
PactTax is a mobile-friendly app for UK sole traders and landlords who need to comply with Making Tax Digital (MTD). In plain terms: HMRC wants you to keep proper digital records and send in quarterly updates online. PactTax puts your bank activity, your categories, and your filing in one place so you are not copying numbers between apps at midnight.
Get set up
Say how you make money, add the tax info HMRC expects, connect your HMRC login, and link your bank account. Things like your National Insurance number are locked down before they ever hit our database.
Sort your transactions
Your bank payments show up in an inbox. Mark each as personal or business, pick the HMRC category that fits, and attach a receipt photo when you need proof later.
Ask the assistant
Stuck on what MTD means or where to tap next? Hit the floating help button. It walks you through the product and the rules in plain English. It is not giving you bespoke tax advice, just helping you use the app without ringing an accountant for every small question.
AI suggestions when the app is unsure
Sometimes “Amazon” or “Transfer” does not tell you much. When our usual rules cannot decide, AI suggests personal vs business and a category. You accept or reject with one tap. Nothing gets filed without you saying so.
See where you stand
A simple dashboard shows quarter progress, a ballpark tax estimate, and nudges before deadlines sneak up on you.
File with HMRC
Ready to send a quarter? PactTax checks the totals first. If you are past the free trial, you subscribe, then submit to HMRC’s sandbox (their practice environment) so you can run the full journey without touching a live return until you are ready.
Live at pacttax.vercel.app. Read-only bank access; we never move money.
How we built it
Zero Stack layout: Next.js on Vercel talks to Aurora DSQL through a Python Lambda API in eu-west-2. Cognito handles auth; the browser holds JWTs and sends them to API Gateway.
Data path: TrueLayer syncs transactions into DSQL. Classification updates go through PATCH /transactions with an audit trail. Receipts land in S3 via presigned URLs. NINO/UTR encrypted with KMS.
AI split (on purpose):
- Assistant —
POST /api/assistanton Vercel streams via AI SDK → Vercel AI Gateway →amazon/nova-2-lite. No transaction PII in prompts. - Classification —
POST /transactions/{id}/suggeston Lambda calls Bedrock IAM →eu.amazon.nova-2-lite-v1:0. Suggestions persist in DSQL; rules and regex run first.
Pipeline: Push to main under infra-backend/** runs pytest → Terraform plan/apply → SQL migrations. Frontend auto-deploys on Vercel.
We chose DSQL because MTD data is relational (users, entities, transactions, submissions) and we wanted PostgreSQL semantics with AWS-managed ops in London for UK residency.
Challenges we ran into
OAuth in a PWA. HMRC and TrueLayer redirects had to hit API Gateway callbacks, not the Vercel origin. One wrong redirect URI and the whole onboarding loop breaks.
Human-in-the-loop AI. Letting the model auto-classify would be faster and wrong. We built deterministic rules, then AI, then mandatory ✓/✗. Audit fields derive server-side so the client cannot fake "AI accepted."
Two AI runtimes. Gateway on Vercel for chat UX; Bedrock on Lambda for suggest + persistence next to DSQL. Same model family, different wiring. Worth it for a clean security boundary.
HMRC sandbox quirks. Test users need MTD Income Tax enrollment. Business IDs default to sandbox scenarios (XBIS12345678901). Filing only works when every business expense in the quarter has a category.
Bedrock in EU. Model access and inference profile setup in eu-west-2 is a console step Terraform cannot do for you.
Accomplishments that we're proud of
- Full MTD loop in production shape: bank → classify → estimate → HMRC sandbox submit → Stripe paywall.
- AI that actually ships: assistant + inbox suggestions, rate limits, user toggle, merchant rules that learn from confirmations.
- ~30 Lambda functions, 14 SQL migrations, CodePipeline on every backend merge.
- Mobile inbox with swipe, undo, and AI strips that do not block gestures.
- Architecture diagram and DSQL cluster with real transaction metrics in AWS Console.
- All of this built in 1 week (check the github commit history)
What we learned
DSQL fit relational MTD data and EU hosting without us running Postgres ourselves.
Splitting AI by trust boundary helped: education chat on Vercel, compliance-adjacent inference next to the database on Lambda.
For regulated-adjacent products, "suggest then confirm" is not a compromise. It is the feature. Users trust ✓ more than magic.
What's next for PactTax
- Broader accounting connections — integrations beyond sole-trader/landlord MTD for businesses and individuals who outgrow swipe-only workflows.
- HMRC production recognition and live filing.
- Play Store TWA wrapper.
- Partner channel (accountants, letting agents).
- Bulk classify and split transactions (PRD P2).
Built With
- amazon-bedrock
- amazon-cloudwatch
- amazon-cognito
- amazon-nova
- amazon-rds-relational-database-service
- amazon-web-services
- and-the-following-others-(categorised):-languages:-typescript
- api-gateway-http-api-v2
- aurora-dsql
- aws-codepipeline
- cloudformation
- codepipeline
- cursor
- eventbridge
- framer-motion
- hmrc
- hmrc-mtd-api-(sandbox)
- kms
- python-3.13
- react-19
- s3
- secrets-manager
- serwist-pwa
- ses
- shadcn/ui
- sql-frontend:-next.js-16
- stripe
- tailwind-css-v4
- terraform
- truelayer
- vercel
- vercel-ai-sdk-backend:-aws-lambda
Log in or sign up for Devpost to join the conversation.