IA Systems & Data

Pagos

Installable personal finance app for Peru: log payments, income and expenses in two taps, get reminded before every due date and use it offline.

Client
IA Systems & Data
Year
2026
Service
Apps and software
Role
Full-stack technical lead
Format
Web app
Status
In production
Pagos cover: household payments, accounts and goals in one place
01 · The challenge

Running household finances without missing a due date.

We wanted logging household payments, income and expenses to take two taps, no due date to slip by and a clear view of where the money goes, offline too.

02 · What we did

An installable app that works on the device first.

We built the frontend in Next.js 16 with Dexie (IndexedDB): the app always reads and writes to a local copy on the device. A NestJS 12 backend syncs changes by cursor, resolves conflicts with last-write-wins and never hard-deletes data.

It supports shared households with capability-based permissions, multiple currencies with SUNAT's daily exchange rate, scheduled payments with reminders, credit cards with statement and due dates, installments, loans between people, budgets with goals and recurring-expense detection.

03 · Features

What it includes

  • Two-tap logging

    Payments, income and expenses are logged in two taps, with templates for frequent entries.

  • Works offline

    The app reads and writes to a local copy and syncs changes without blocking the interface.

  • Shared household

    Invitations, capability-based permissions (manage, write and read) and private entries that don't affect the shared total.

  • Scheduled payments

    Reminders before every due date, a payments calendar, projected end-of-month balance and cards with statement and due dates.

  • Budget and goals

    Per-category budget, savings goals with a target date, alerts at 80% and 100% of a limit and a warning on likely duplicates.

  • Automation

    Automatic categorization rules and recurring-expense detection, turned into a scheduled payment in one tap.

04 · How we built it

Stack and architecture

  • Next.js 16
  • TypeScript
  • Tailwind CSS 4
  • NestJS 12
  • Prisma 7
  • PostgreSQL 16
  • Redis 7
  • PWA
Frontend
Next.js 16 with Dexie (IndexedDB) as the local copy, TanStack Query and shadcn/ui.
Backend
NestJS 12 with Prisma 7 over PostgreSQL 16, Zod, BullMQ queues on Redis 7, and sign-in with Google, a local PIN or passkeys.
Data
Two-way cursor-based sync, with last-write-wins conflict resolution and no hard deletes.
Infrastructure
pnpm and Turborepo monorepo on a dedicated VPS behind Cloudflare and Caddy, with CI/CD on GitHub Actions.
05 · Technical challenges

What we solved

  1. Conflict-free sync

    Idempotent cursor-based protocol: the client always reads from its local copy, conflicts resolve by last write and records are flagged as deleted instead of being removed.

  2. Integer money, never floating point

    Every amount is stored in cents with its ISO 4217 currency, with no rounding errors in splits, installments and multi-currency balances.

  3. Capabilities instead of fixed roles

    The system checks capabilities (manage, write and read) rather than role names, so each household names its own roles without touching code.

06 · Project facts

In detail

Installable and offline
PWA
Biometric unlock
Passkeys
Similar entries to detect a recurring expense
3
See all

Need something like Pagos?

Tell us about your project. Free diagnosis and a fixed proposal within 48 hours.